我在java中实现“转发”请求时遇到问题。所以我有一个servlet,我希望对于请求localhost(servlet在localhost上工作)我收到一个页面(在programm中定义了实习页面)并且可以继续使用localhost来处理这个页面。例: 页面定义:stackoverflow.com 因此,如果我输入浏览器url:localhost,我会收到stackoverflow的内容但url必须是localhost,如果我转到localhost / tags我会收到stackoverflow / tags的内容,但url仍然应该是localhost / tags。 我希望你的帮助
答案 0 :(得分:1)
听起来您可能需要在servlet中实现某种隧道http代理。幸运的是,这并不是那么困难,甚至可能还有一个开源选项。
此链接可能对您有用: http://httpd.apache.org/docs/2.0/mod/mod_proxy.html
答案 1 :(得分:0)
由于它位于不同的域,因此无法转发。转发只能发生在相同 Web应用程序上下文中的资源。
您需要包含外部资源。 JSTL <c:import>
可能会在这里使用。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:import url="http://stackoverflow.com" />
基本上都是这样。
另一种选择是HTML <iframe>
元素,区别在于它包含在客户端。
<iframe src="http://stackoverflow.com"></iframe>
这只能在Stackoverflow等某些网站上完美运行;)然而,优点是父网址始终保持不变,无论您在所包含的网站上执行什么操作(除了在新网站中打开链接)选项卡/窗口)。
答案 2 :(得分:0)
嗯,您可以使用httpclient获取网站的完整内容,然后使用httpcomponents httpclient或jersey-client软件包将其发送给用户代理 如:
public void doGet(HttpServletRequest req,HttpServletResponse resp){
HttpClient client=new HttpClient() // dont instantiate like this it's a heavyweight ;)
GetMethod get=new GetMethod("http://stackoverflow.com/");
int status=client.executeMethod(get);
if (status=200){
resp.getWriter().write(get.getResponseBodyAsString().getBytes("UTF-8"));
resp.getWriter().flush();
}else{
// handle error
}
get.releaseConnection();
}