2014-12-29 44 views
0

我正在做以下操作,但地址欄中的網址發生更改。從/ test到localhost:8080 ... 是否可以在地址欄中保持url相同?如何重定向但保持URL相同

<servlet> 
     <servlet-name>test</servlet-name> 
     <servlet-class>xxx.xxxx.Servlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>test</servlet-name> 
     <url-pattern>/test</url-pattern> 
    </servlet-mapping> 

Servlet.java

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

     String path = request.getRequestURI(); 
     response.sendRedirect("http://localhost:8080"+path); 
    } 

回答

1

你必須先了解你的Servlet(HttpServlet),他們正在運行的Servlet容器正在實施的HTTP棧。 HTTP是一個請求 - 響應協議。

客戶端發送HTTP請求,服務器(您的Servlet容器)以HTTP響應回覆。在這種情況下,

response.sendRedirect("http://localhost:8080"+path); 

它響應302,表示重定向。您的客戶如何處理這取決於他們。通常,瀏覽器客戶端將向重定向目標發送新的HTTP GET請求。這將強制頁面刷新/更新。

如果這不是您想要的行爲,您需要更改您的客戶行爲。例如,您可以將部分客戶端邏輯放入iframe中。然後你會重定向只刷新iframe。

0

您可以使用forward而不是重定向。我寫了一個獲取servlet名稱並調度它的方法:

protected void gotoServlet(HttpServletRequest req, HttpServletResponse resp,String servletName) throws ServletException, IOException { 

    RequestDispatcher dispatcher = this.getServletContext().getNamedDispatcher(servletName); 
    dispatcher.forward(req,resp); 
} 
相關問題