2013-04-11 33 views
0

有什麼方法可以將請求URL更改爲指向託管在其他Web服務器中的另一個頁面?假設我有在Tomcat中託管的網頁:更改請求URL以指向servlet過濾器中的不同Web服務器

<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指向在託管的PHP頁面另一個網絡服務器http://localhost/display.php。我知道我可以使用response.sendRedirect,但它不適用於我的情況,因爲它會丟棄所有POST數據。有什麼方法可以更改請求URL,以便chain.doFilter(req, res);將我轉到該PHP頁面?

回答

1

HttpServletResponse#sendRedirect()默認發送一個HTTP 302重定向,它實際上隱式地創建一個新的GET請求。

您需要改爲HTTP 307重定向。

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

(我假設http://localhost URL僅僅是示範性的;這顯然不會在生產工作)

注:瀏覽器會要求確認,然後再繼續。

另一種方法是,爲代理玩:

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。

相關問題