“转发”请求

时间:2010-06-04 13:47:34

标签: java http servlets proxy

我在java中实现“转发”请求时遇到问题。所以我有一个servlet,我希望对于请求localhost(servlet在localhost上工作)我收到一个页面(在programm中定义了实习页面)并且可以继续使用localhost来处理这个页面。例: 页面定义:stackoverflow.com 因此,如果我输入浏览器url:localhost,我会收到stackoverflow的内容但url必须是localhost,如果我转到localhost / tags我会收到stackoverflow / tags的内容,但url仍然应该是localhost / tags。 我希望你的帮助

3 个答案:

答案 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();

}