2009-06-22 3 views
1

Я пытаюсь использовать Servlets как уровень контроллера и 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, равного «он равен« 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

Есть ли у кого-нибудь предложения по альтернативным подходам? –