2011-07-30 166 views
1

我要讓調度員拋出一個異常時,我想轉發給不存在的資源,這裏是我的代碼Dispatcher不會拋出異常

String page = (String) request.getAttribute("page"); //page to be forwarded form servlet to jsp 
    if (page == null) { 
     page = request.getParameter("page");//page to be forwarded form jsp to servlet 
    } 
    RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/InstitutionPages/" + page + ".jsp"); 
    try { 
     dispatcher.forward(request, response); 
    } catch (IOException ex) { 
      ex.printStackTrace(); 
     LogoutServlet.redirectToLoginPage(request, response); 
    } catch (javax.servlet.ServletException e) { 
      e.printStackTrace(); 
     Logger.getLogger(RegistrarManagementServlet.class.getName()).log(Level.SEVERE, null, e); 
     LogoutServlet.redirectToLoginPage(request, response); 
    } catch (java.lang.IllegalArgumentException e) { 
     e.printStackTrace(); 
     LogoutServlet.redirectToLoginPage(request, response); 
    } 

頁,我送無效的頁面名稱,但控制檯上出現此錯誤

SEVERE: PWC6117: File "D:\versions\v30\OnlineQuerySystem_New\build\web\WEB-INF\InstitutionPages\Registerkk.jsp" not found 

沒有打印任何一個堆棧軌跡!

回答

1

這是你的servlet可以什麼樣子:

public class SimpleServlet extends HttpServlet { 

@Override 
protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
     throws ServletException, IOException { 

    // do something at the servlet here 

    String page = (String) req.getAttribute("page"); // page to be forwarded 
                 // form servlet to 
                 // jsp 
    if (page == null) { 
     page = req.getParameter("page");// page to be forwarded form jsp to 
             // servlet 
    } 

    this.forwardIfExists(req, resp, page); 

} 

protected void forwardIfExists(HttpServletRequest req, 
     HttpServletResponse resp, String page) throws ServletException, IOException { 

    File pagePath = new File(this.getServletContext().getRealPath(page)); 

    if (pagePath.exists()) { 
     req.getRequestDispatcher(page).forward(req, resp); 
    } else { 
     throw new IllegalArgumentException(String.format("The page %s does not exist", page)); 
    } 

} 

} 

另外,不要趕的ServletExceptionIOException異常由servlet方法拋出,如果他們發生了一些非常糟糕的在應用程序中正在發生,你不應該像你在代碼中那樣吞下這些異常。這些例外應該保持原樣,並且容器應該抓住它們。您應該使用它們,而不是嘗試打印堆棧跟蹤,因爲這將在err流中打印,並且不會在生產服務器上顯示。

+0

同樣,在轉發時應該發生異常 – palAlaa

+0

添加了代碼以執行您正在查找的內容。 –

+0

1- getRealPath不會到達web-inf內部的文件。 2-當在doGet()中引發異常時,所有異常都會出現在jsp頁面中,這是不推薦的。 – palAlaa