0

別の Web サーバーでホストされている別のページを指すように要求 URL を変更する方法はありますか? Tomcat でホストされているページがあるとします。

<form action="http://localhost:8080/Test/dummy.jsp" method="Post">
    <input type="text" name="text"></input>
    <input type="Submit" value="submit"/>
</form>

そして、サーブレット フィルターを使用してリクエストをインターセプトします。

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException,ServletException {
    HttpServletRequest request = (HttpServletRequest) req;
    chain.doFilter(req, res);
    return;
}

私が望むのは、別の Web サーバーでホストされている PHP ページを指すように要求 URL を変更することですhttp://localhost/display.php。を使用できることはわかっていますresponse.sendRedirectが、すべての POST データを破棄するため、私の場合は機能しません。chain.doFilter(req, res);そのPHPページに転送されるようにリクエストURLを変更する方法はありますか?

4

1 に答える 1

2

HttpServletResponse#sendRedirect()、デフォルトで HTTP 302 リダイレクトを送信します。これにより、新しい GET 要求が暗黙的に作成されます。

代わりに HTTP 307 リダイレクトが必要です。

response.setStatus(307);
response.setHeader("Location", "http://localhost/display.php");

( http://localhostURL は単なる例であると思います。これは明らかに本番環境では機能しません)

注: ブラウザーは続行する前に確認を求めます。

別の方法は、プロキシでプレイすることです。

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.

注:これには、フィルタの代わりにサーブレットを使用することをお勧めします。

ここでも、PHP コードを JSP/サーブレット コードに移植するという別の方法があります。ここでも別の方法として、Quercus などの PHP モジュールを介して Tomcat で PHP を直接実行する方法があります。

于 2013-04-11T12:20:41.510 に答える