Показать перенаправленный JSP с URL-шаблоном "/ *" - PullRequest
0 голосов
/ 23 февраля 2011

Чтобы улучшить свои навыки работы с Java, я пытаюсь создать простой фреймворк j2ee (MVC).

Я создал его для обработки каждого запроса в FrontServlet. Вот карта, которую я использовал:

web.xml :
<servlet>
    <servlet-name>Front</servlet-name>
    <servlet-class>test.FrontServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>Front</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>   

Моя проблема в том, что когда я пересылаю запрос из FrontServlet в JSP, очевидно, что запрос JSP обрабатывается FrontServlet, и представление не обрабатывается.

  • Как мне решить эту проблему, сохранив шаблон URL "/ *"?
  • Есть ли способ визуализации JSP в сервлете без потери производительности?

Заранее спасибо за ответ!


  • Решение 1 (@Bryan Kyle)

Я пытаюсь последовать вашему совету. Я создал этот фильтр:

public void doFilter(ServletRequest request,
   ServletResponse response, FilterChain chain) 
   throws IOException, ServletException 

   {
       HttpServletRequest req = (HttpServletRequest) request;

       if(!req.getRequestURL().toString().endsWith("jsp"))
       {
           // I changed the servlet url-pattern to "/front.controller"
           req.getRequestDispatcher("/front.controller").forward(req, response);
           /*chain.doFilter(req, resp);*/
       }
   }

<filter>
    <filter-name>Filter</filter-name>
    <filter-class>test.Filter</filter-class>
</filter>

<filter-mapping>
    <filter-name>Filter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
  • Это правильно?

Спасибо!

Ответы [ 2 ]

1 голос
/ 23 февраля 2011

A Filter - неподходящее решение для подхода с фронт-контроллером.

Вы хотите уточнить url-pattern вашего сервлета, чтобы он соответствовал, например, /pages/* или *.do.Вы не хотите, чтобы ваш фронт-контроллер запускал ненужные запросы, такие как CSS / JS / images / etc.Чтобы взять /pages/* в качестве примера, предполагая, что у вас есть JSP в /WEB-INF/foo.jsp, то следующее в сервлете

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    request.getRequestDispatcher("/WEB-INF" + request.getPathInfo() + ".jsp").forward(request, response);
}

должно отобразить данный JSP на http://localhost:8080/contextname/pages/foo.

См. Также:

1 голос
/ 23 февраля 2011

Я думаю, что проблема здесь может заключаться в том, что вы используете Servlet вместо ServletFilter.

ServletFilter, так как это имя предлагает фильтровать запросы, обеспечивая предварительную и последующую обработку назапрос.Возможно, вы захотите использовать фильтр, если вам нужно сделать что-то вроде следующего:

  • Обеспечить проверки безопасности для всего приложения
  • Установить свойства запроса, которые выбираютсясервлет или jsp
  • Сжатие ответа
  • Информация о журнале времени
  • И т. д.

Ознакомьтесь с документацией о Сервлет-фильтрах.

...