有没有办法将请求URL更改为指向托管在不同Web服务器中的另一个页面?假设我在Tomcat中托管了一个页面:
<form action="http://localhost:8080/Test/dummy.jsp" method="Post">
<input type="text" name="text"></input>
<input type="Submit" value="submit"/>
</form>
我使用servlet过滤器拦截请求:
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException,ServletException {
HttpServletRequest request = (HttpServletRequest) req;
chain.doFilter(req, res);
return;
}
我想要的是将请求URL更改为指向另一个Web服务器http://localhost/display.php
中托管的PHP页面。我知道我可以使用response.sendRedirect
,但在我的情况下它不起作用,因为它会丢弃所有POST数据。有没有办法更改请求URL,以便chain.doFilter(req, res);
将我转发到该PHP页面?
答案 0 :(得分:1)
HttpServletResponse#sendRedirect()
默认发送HTTP 302重定向,确实隐式创建了一个新的GET请求。
您需要改为使用HTTP 307重定向。
response.setStatus(307);
response.setHeader("Location", "http://localhost/display.php");
(我认为http://localhost
网址只是示范性的;这显然不适用于制作)
注意:浏览器会在继续之前要求确认。
替代方案是代理:
URLConnection connection = new URL("http://localhost/display.php").openConnection();
connection.setDoOutput(true); // POST
// Copy headers if necessary.
InputStream input1 = request.getInputStream();
OutputStream output1 = connection.getOutputStream();
// Copy request body from input1 to output1.
InputStream input2 = connection.getInputStream();
OutputStream output2 = response.getOutputStream();
// Copy response body from input2 to output2.
注意:您最好使用servlet代替过滤器。
另一个替代方案是将PHP代码移植到JSP / Servlet代码。另一个替代方案是通过PHP模块(例如Quercus)直接在Tomcat上运行PHP。