2011-07-30 167 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