【问题标题】:"Forwarded" request“转发”请求
【发布时间】:2010-06-04 13:47:33
【问题描述】:

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

【问题讨论】:

    标签: java http servlets proxy


    【解决方案1】:

    听起来您可能必须在您的 servlet 中实现某种隧道 http 代理。幸运的是,这并不难做到,甚至可能有可用的开源选项。

    此链接可能对您有用: http://httpd.apache.org/docs/2.0/mod/mod_proxy.html

    【讨论】:

    • 确切地说,这更像是一个网络问题(“我如何向 localhost 发出请求去 www.stackoverflow.com?”),而不是一个 servlet 问题本身
    【解决方案2】:

    无法转发,因为它位于不同的域中。只能对相同 web 应用程序上下文中的资源进行转发。

    您需要包含外部资源。 JSTL <c:import> 可能在这里有用。

    <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    <c:import url="http://stackoverflow.com" />
    

    基本上就是这样。

    另一种方法是 HTML &lt;iframe&gt; 元素,不同之处在于它包含在客户端。

    <iframe src="http://stackoverflow.com"></iframe>
    

    这仅在某些站点(例如 Stackoverflow)上无法完美运行;)然而,优点是父 URL 始终保持不变,无论您在包含的站点上做什么(除了在新站点中打开链接)选项卡/窗口)。

    【讨论】:

      【解决方案3】:

      嗯,您可以使用 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();
      
      }
      

      【讨论】:

      • 如果必须保持会话怎么办?
      • 您必须在程序中添加状态,然后在内部保存会话并在调用第三方站点时使用 httcomponents api 设置它。如 get.setRequestHeader("Cookie","JSESSIONID=xxx");
      • HttpClient是什么样的?来自阿帕奇?
      猜你喜欢
      • 2016-01-26
      • 2019-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-18
      • 2011-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多