Диспетчер не выбрасывает исключение - PullRequest
1 голос
/ 31 июля 2011

Я хочу, чтобы диспетчер выдавал исключение, когда я хочу перенаправить на несуществующий ресурс, вот мой код

 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 Ответ

1 голос
/ 31 июля 2011

Вот как может выглядеть ваш сервлет:

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 ));
    }

}

}

Кроме того, не перехватывайте ServletException или IOException , генерируемые методами сервлета, если они произошличто-то действительно плохое происходит в вашем приложении, и вы не должны проглатывать эти исключения, как в своем коде.Эти исключения следует оставить как есть, и контейнер должен их перехватить.Вам следует записать их и не пытаться распечатывать трассировки стека, так как они будут распечатаны в потоке с ошибками и не будут видны на рабочем сервере.

...