Como carregar um site externo dentro de um div
Tutorial de como inserir uma página externa em um div.
Vou utilizar o método HttpURLConnection do Java. Pro Javascript JQuery.
Vou abrir uma conexão à uma página externa de dentro de um Servlet Java e exibir o resultado em um HttpServletResponse que por fim será exibido em um Div.
Primeiro o arquivo html.
Vou criar um botão que ao ser clicado vai enviar um url pra um método javascript que por sua vez vai chamar o servlet e abrir a página externa no div.
O arquivo script.js, que contém o método show(url)
A função vai desabilitar o botão submit, e em seguida chamar o servlet com o url (método GET). Caso haja algum erro na requisição, eu exibo o tipo do erro no html.
Por fim o Servlet que vai utilizar o método HttpURLConnection pra conectar a página externa
Iniciei a conexão com HttpURLConnection. Como o método utilizado foi GET, peguei o parâmetro da url.
A linha connection.setRequestProperty("Accept-Charset", "ISO-8859-1"); codifica a página, caso haja acentuação. No meu caso ISO-8859.
Em seguida leio toda a página em um StringBuilder e marco a saída (response) como html (response.setContentType("text/html");) e mando o resultado.
Se eu utilizasse o método POST, mudaria o seguinte:
É isso.
Vou utilizar o método HttpURLConnection do Java. Pro Javascript JQuery.
Vou abrir uma conexão à uma página externa de dentro de um Servlet Java e exibir o resultado em um HttpServletResponse que por fim será exibido em um Div.
Primeiro o arquivo html.
Vou criar um botão que ao ser clicado vai enviar um url pra um método javascript que por sua vez vai chamar o servlet e abrir a página externa no div.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<link rel="stylesheet" type="text/css" href="/pages/style/style.css" />
<script type="text/javascript" src="/pages/script/jquery-1.6.2.min.js"></script>
<script type="text/javascript" src="/pages/script/script.js"></script>
<title>Generate</title>
</head>
<body>
<input type="button" id="btnSend" value="clique aqui" onclick="show('http://www.google.com.br');">
<div id="result" style="border: 1px solid black; width: 450px; height: 500px; text-align: center;"></div>
<div id="error"></div>
</body>
</html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<link rel="stylesheet" type="text/css" href="/pages/style/style.css" />
<script type="text/javascript" src="/pages/script/jquery-1.6.2.min.js"></script>
<script type="text/javascript" src="/pages/script/script.js"></script>
<title>Generate</title>
</head>
<body>
<input type="button" id="btnSend" value="clique aqui" onclick="show('http://www.google.com.br');">
<div id="result" style="border: 1px solid black; width: 450px; height: 500px; text-align: center;"></div>
<div id="error"></div>
</body>
</html>
O arquivo script.js, que contém o método show(url)
A função vai desabilitar o botão submit, e em seguida chamar o servlet com o url (método GET). Caso haja algum erro na requisição, eu exibo o tipo do erro no html.
function show(url) {
$('#btnSend').attr('disabled', 'disabled');
$("#result").load(
'/Generate/ServletRedirect?host='.concat(url),
function(response, status, xhr) {
if (status == "error") {
var msg = "Ocorreu um erro: ";
$("#error").html(msg + xhr.status + " " + xhr.statusText);
}
});
}
$('#btnSend').attr('disabled', 'disabled');
$("#result").load(
'/Generate/ServletRedirect?host='.concat(url),
function(response, status, xhr) {
if (status == "error") {
var msg = "Ocorreu um erro: ";
$("#error").html(msg + xhr.status + " " + xhr.statusText);
}
});
}
Por fim o Servlet que vai utilizar o método HttpURLConnection pra conectar a página externa
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletRedirect extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
StringBuilder stringBuilder = new StringBuilder();
HttpURLConnection connection = null;
try {
URL url = new URL(request.getParameter("host"));
connection = (HttpURLConnection) url.openConnection();
connection.setRequestProperty("Accept-Charset", "ISO-8859-1");
connection.setRequestMethod("GET");
connection.setRequestProperty("Content-Type","text/plain");
connection.connect();
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
stringBuilder.append(line + "\n");
}
reader.close();
} catch (Exception e) {
InputStream error = ((HttpURLConnection) connection).getErrorStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(error));
String line = null;
while ((line = reader.readLine()) != null) {
stringBuilder.append(line + "\n");
}
reader.close();
e.printStackTrace();
}
response.setContentType("text/html"));
response.getWriter().write(stringBuilder.toString());
}
}
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class ServletRedirect extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
StringBuilder stringBuilder = new StringBuilder();
HttpURLConnection connection = null;
try {
URL url = new URL(request.getParameter("host"));
connection = (HttpURLConnection) url.openConnection();
connection.setRequestProperty("Accept-Charset", "ISO-8859-1");
connection.setRequestMethod("GET");
connection.setRequestProperty("Content-Type","text/plain");
connection.connect();
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
String line = null;
while ((line = reader.readLine()) != null) {
stringBuilder.append(line + "\n");
}
reader.close();
} catch (Exception e) {
InputStream error = ((HttpURLConnection) connection).getErrorStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(error));
String line = null;
while ((line = reader.readLine()) != null) {
stringBuilder.append(line + "\n");
}
reader.close();
e.printStackTrace();
}
response.setContentType("text/html"));
response.getWriter().write(stringBuilder.toString());
}
}
Iniciei a conexão com HttpURLConnection. Como o método utilizado foi GET, peguei o parâmetro da url.
A linha connection.setRequestProperty("Accept-Charset", "ISO-8859-1"); codifica a página, caso haja acentuação. No meu caso ISO-8859.
Em seguida leio toda a página em um StringBuilder e marco a saída (response) como html (response.setContentType("text/html");) e mando o resultado.
Se eu utilizasse o método POST, mudaria o seguinte:
connection.setDoOutput(true); // Triggers POST.
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + "ISO-8859-1");
OutputStream output = null;
try {
output = connection.getOutputStream();
output.write(query.getBytes(charset));
} finally {
if (output != null) try { output.close(); } catch (IOException logOrIgnore) {}
}
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + "ISO-8859-1");
OutputStream output = null;
try {
output = connection.getOutputStream();
output.write(query.getBytes(charset));
} finally {
if (output != null) try { output.close(); } catch (IOException logOrIgnore) {}
}
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
É isso.
Comentários