2009-06-22 6 views
1

서블릿을 컨트롤러 레이어로, JSP를 뷰 레이어로 사용하려고합니다. 내가 읽은 예/자습서의 대부분은이 같은 일을 somehting을 제안 :서블릿과 JSP를 함께 사용하면 예기치 않은 루프가 발생합니다.

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // add something for the JSP to work on 
    request.setAttribute("key", "value"); 

    // show JSP 
    request.getRequestDispatcher("main.jsp")forward(request, response); 
} 

이 간단한 예를 들어 잘 작동하지만 (조금이라도)을 강화할 때

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    // add something for the JSP to work on 
    request.setAttribute("key", "value"); 

    String pathInfo = request.getPathInfo(); 
    if ((pathInfo != null) && (pathInfo.length() > 1)) { 
     // get everything after the '/' 
     pathInfo = pathInfo.subSequence(1, pathInfo.length()).toString(); 

     if (pathInfo.equals("example")) { 
      request.getRequestDispatcher("alternate.jsp").forward(request, response); 
     } 
    } 

    // show JSP 
    request.getRequestDispatcher("main.jsp").forward(request, response); 
} 

내가 무슨 일이 일어나는지를 알 수있는 한, 예를 들어 http://localhost/main/example으로 가면 서블릿에 도달하여 alternate.jsp로 전달한 다음 다시 서블릿을 실행하지만 이번에는 pathInfo와 동일하게 "example "alternate.jsp"와 같아 지므로 main.jsp 디스패치로 넘어갑니다.

위와 유사한 로직을 사용하여 어떻게 다른 JSP 파일을 실행할 수 있습니까?

그냥 좋은 측정을위한 web.xml에 매핑은 다음과 같습니다 이상하게

<servlet> 
    <servlet-name>Main</servlet-name> 
    <servlet-class>com.example.MainServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Main</servlet-name> 
    <url-pattern>/main/*</url-pattern> 
</servlet-mapping> 
+0

어 ... 필자는 필자가 필요한 대답을 얻기 위해이 질문을 재 작업해야한다고 생각합니다. –

+0

좋아, 문제를 더 좁히고 더 나은 테스트를 시도한 후에 더 좋은 질문이 떠오른다. http://stackoverflow.com/questions/1030302/how-can-i-map-a-root-servlet-so-that-other-scripts-are-still-runnable –

답변

2

, 난 그냥 다른 각도에서이보고되었다. 일치 순서에 대한 자세한 내용은 here, 섹션 7.3.2 서블릿 일치 절차를 참조하십시오.

짧은 요약 : 경로 기반 매핑은 확장 매핑을 대체하기 때문에 JSP 매핑을 가로채는 것입니다.

+0

누구나 다른 방법에 대한 제안이 있습니까? –