2011-07-30 2 views
1

예외를 throw하지 않습니다, 여기 Dispatcher가 내가 존재하지 않는 리소스에 전달하고자 할 때 발송자가 예외를 throw 만들고 싶어

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

여기처럼 서블릿이 볼 수있는 방법은 다음과 같습니다 또한

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이를 잡을 수없는 그들이 정말 나쁜 일이 응용 프로그램에서 일어나고있는 일이있는 경우, 그리고 코드에있는 것처럼 이러한 예외를 삼가서는 안됩니다. 이러한 예외 사항은 그대로 두어야하며 컨테이너는 컨테이너를 잡아야합니다. 로그이어야하며 스택 추적을 인쇄하지 마십시오. 오류 추적 스트림에서 인쇄 할 것이므로 프로덕션 서버에는 표시되지 않습니다.

+0

전달할 때 예외가 발생해야합니다. – palAlaa

+0

찾고있는 코드를 추가했습니다. –

+0

1- getRealPath가 web-inf 내부의 파일에 도달하지 않습니다. 2 doGet()에서 예외를 throw하면 모든 예외가 JSP 페이지에 표시되므로 권장되지 않습니다. – palAlaa

관련 문제