gpt4 book ai didi

java - 远程服务器的 RequestDispatcher?

转载 作者:搜寻专家 更新时间:2023-10-30 21:01:20 27 4
gpt4 key购买 nike

我正在尝试创建一个 HttpServlet,它将所有传入请求按原样转发到在不同域上运行的另一个 serlvet。

如何做到这一点? RequestDispatcher 的 forward() 仅在同一服务器上运行。

编辑:我不能引入任何依赖项。

最佳答案

当它不在相同的 ServletContext 或相同/集群的网络服务器中运行时,你不能在其中 webapps 配置为共享 ServletContext (在 Tomcat 的情况下) , 检查 crossContext 选项)。

必须通过 HttpServletResponse.sendRedirect() 发送重定向.如果您真正关心的是在新 URL 上重用查询参数,只需重新发送它们即可。

response.sendRedirect(newURL + "?" + request.getQueryString());

或者当它是 POST 时,发送 HTTP 307重定向,客户端将在新 URL 上重新应用相同的 POST 查询参数。

response.setStatus(HttpServletResponse.SC_TEMPORARY_REDIRECT);
response.setHeader("Location", newURL);

更新 根据评论,这显然不是一个选项,因为您想隐藏 URL。在那种情况下,您必须让 servlet 充当代理。您可以使用 HTTP 客户端执行此操作,例如Java SE 提供了 java.net.URLConnection ( mini tutorial here ) 或更方便的 Apache Commons HttpClient .

如果是 GET,就这样做:

InputStream input = new URL(newURL + "?" + request.getQueryString()).openStream();
OutputStream output = response.getOutputStream();
// Copy.

或者如果是 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.

请注意,您可能需要捕获/替换/更新 HTML 响应中的相关链接(如果有)。 Jsoup在这方面可能会非常有帮助。

关于java - 远程服务器的 RequestDispatcher?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3916214/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com