我正在尝试创建一个HttpServlet,它将所有传入的请求按原样转发给另一个在不同域上运行的serlvet.
如何实现这一目标?RequestDispatcher的forward()仅在同一服务器上运行.
编辑:我不能介绍任何依赖项.
Bal*_*usC 21
当它不在ServletContextwebapps配置为共享的相同或相同/集群web服务器中运行时ServletContext(在Tomcat的情况下,检查crossContext选项),您不能.
您必须发送重定向HttpServletResponse.sendRedirect().如果您真正关心的是重新使用新URL上的查询参数,只需重新发送它们即可.
response.sendRedirect(newURL + "?" + request.getQueryString());
Run Code Online (Sandbox Code Playgroud)
或者当它是POST时,发送HTTP 307重定向,客户端将在新URL上重新应用相同的POST查询参数.
response.setStatus(HttpServletResponse.SC_TEMPORARY_REDIRECT);
response.setHeader("Location", newURL);
Run Code Online (Sandbox Code Playgroud)
根据评论更新,这显然不是一个选项,因为你想要隐藏URL.在这种情况下,您必须让servlet播放代理.您可以使用HTTP客户端执行此操作,例如提供的Java SE java.net.URLConnection(此处为迷你教程)或更方便的Apache Commons HttpClient.
如果它是GET,那就做:
InputStream input = new URL(newURL + "?" + request.getQueryString()).openStream();
OutputStream output = response.getOutputStream();
// Copy.
Run Code Online (Sandbox Code Playgroud)
或者如果是POST:
URLConnection connection = new URL(newURL).openConnection();
connection.setDoOutput(true);
// Set and/or copy request headers here based on current request?
InputStream input1 = request.getInputStream();
OutputStream output1 = connection.getOutputStream();
// Copy.
InputStream input2 = connection.getInputStream();
OutputStream output2 = response.getOutputStream();
// Copy.
Run Code Online (Sandbox Code Playgroud)
请注意,您可能需要捕获/替换/更新HTML响应中的相对链接(如果有).Jsoup可能对此非常有帮助.
| 归档时间: |
|
| 查看次数: |
19934 次 |
| 最近记录: |