URL сервлета и физические каталоги - PullRequest
1 голос
/ 11 ноября 2011

Итак, теперь, когда я переместил свои JSP-файлы в / WEB-INF / content из / content после написания моего ProcessServlet, чтобы использовать forward (), чтобы добраться до них, как я должен настроить свой шаблон URL web.xml для полученияк сервлету?

Примечание. Мои JSP находились в каталоге / content вместе с файлами CSS, изображений и JS.Так что / content / css, / content / image, / content / js все еще там.

Я обнаружил, что если я использую шаблон "/ content / *" в web.xml для моего сервлета, то запрашиваетcss, images и js также проходят через сервлет.Как мне избежать этого?

Может кто-нибудь предложить лучший способ настроить мои URL и каталоги?

Ответы [ 3 ]

2 голосов
/ 12 ноября 2011

2 варианта:

  1. Переместить /content/css, /content/image, /content/js в /resources/css и т. Д. Чтобы исправить URL-адреса в существующих JSP, просто используйте поиск и замену интеллектуальным способом.,Должна быть минутная работа.

  2. Измените шаблон URL сервлета /content/* на другой, например, /pages/*.

    • Если вы хотитесохраните существующие URL-адреса, добавьте фильтр на /content/*, который в основном выполняет следующие действия:

      String uri = ((HttpServletRequest) request).getRequestURI();
      if (uri.startsWith("/content/css/") || uri.startsWith("/content/image/") || uri.startsWith("/content/js/")) {
          chain.doFilter(request, response); // Goes to default servlet.
      } else {
          request.getRequestDispatcher("/pages" + uri).forward(request, response);
      }
      

    Это только радикальное изменение.Вам, вероятно, потребуется исправить все ссылки в JSP, если они не предназначены так, как главный шаблон, в котором вы указали <base> в одном месте.Кроме того, вы можете добавить 301 переадресацию для старых закладок и поисковых индексов.

1 голос
/ 11 ноября 2011

Вот как я настроил мой:

+-WEB-INF/
|   +-jsp/*.jsp
+-styles/*.css
+-images/*.jpn,*.png,etc.

Я использую отображение сервлетов для отображения динамического содержимого, например * jsp, и оставьте сервлет по умолчанию для работы со статическим содержимым. Конечно, это не единственный способ решить проблему.

web.xml выглядит так:

<servlet-mapping>
    <servlet-name>Your Servlet</servlet-name>
    <url-pattern>/content/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

Сервлет по умолчанию предоставляется большинством контейнеров servelt, и вам не нужно его писать. Ключевое слово "по умолчанию" для кота и молы.

1 голос
/ 11 ноября 2011

Вам не нужно использовать сервлет для такой пересылки.Если количество страниц JSP невелико, вы можете объявить сопоставление для них непосредственно в файле web.xml, так же, как и для сервлетов (см. Пример здесь )

...