2014-02-08 34 views
0

名爲Test.jsp的JSP頁面被映射到以下Servlet。是否有可能從Servlet重定向到同一個JSP頁面?

@WebServlet(name = "TestServlet", urlPatterns = {"/TestServlet"}) 
public final class TestServlet extends HttpServlet 
{ 
    protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException 
    { 
     //request.getRequestDispatcher("/WEB-INF/admin_side/Test.jsp").forward(request, response); 
     response.sendRedirect("TestServlet"); 
    } 

    @Override 
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     processRequest(request, response); 
    } 

    @Override 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
     processRequest(request, response); 
    } 

    @Override 
    public String getServletInfo() { 
     return "Short description"; 
    } 
} 

該Servlet被映射到JSP頁面Test.jsp。當在地址欄中輸入如http://localhost:8080/Assignment/TestServlet的URL時,將調用doGet()方法。

該請求可以轉發給給定的URL註釋掉。是否有可能重定向到相同的JSP頁面,Test.jsp

如果試圖這樣做,谷歌Chrome抱怨,

此網頁有重定向循環

,但它可以重定向至其他網頁WEB-INF/admin_side下。

+3

請告訴我們,我們展示的代碼或配置您如何這樣做,你的意思是「servlet被映射到JSP」,「JSP被映射到servlet」。前進不是重定向。重定向不是前鋒。目前,在你發佈的代碼中,你會得到一個重定向循環,因爲servlet會自動重定向。 –

+0

我在這個Servlet的'web.xml'中沒有任何配置。 – Tiny

+0

因此,除了將Servlet映射到路徑/ TestServlet的WebServlet註釋之外,您沒有將JSP映射到servlet以及將servlet映射到JSP的任何映射。所以,現在,你的問題是什麼,你想達到什麼目的?轉發到任何JSP都可以正常工作。您從Chrome獲得的重定向循環是由於您沒有轉發任何內容。相反,servlet重定向到它自己。 –

回答

2

POST-REDIRECT-GET模式的工作方式如此。

客戶端發送POST請求,您的服務器處理它並以重定向響應,即。帶有302狀態碼和Location標題的響應給適當的URI。客戶端向該URI發出GET請求。

目前,您的服務器重定向GET和POSTS請求。更糟糕的是你的GET重定向到它正在處理的相同的URI,創建你所看到的重定向循環。

更改您的Servlet實現以便POST發送重定向,但實際上GET提供了HTML,AJAX等正常的200響應

相關問題