Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Tomcat 5 и 8 - разное поведение web.xml


Автор: aranea 22.1.2015, 10:14
Здравствуйте!

в 2008 году по стопам темы http://forum.vingrad.ru/forum/topic-124877.html сделал свое приложение, работало на Tomcat 5.5 на тот момент актуальной
недавно решил вспомнить старое, скачал новый Tomcat 8.0.17, развернул в нем проект - не работает, выдает 404 на главной странице (и как оказалось по любому адресу сайта, заканчивающемуся на / "слэш")
если слэш в конце удалить - то нужная страничка открывается

удивился, установил Tomcat 5.5, развернул в нем - работает по всем адресам как и в 2008 году
начал копать, оказывается для Tomcat 8 дело только в этой маппинге
Код

  <servlet-mapping>
      <servlet-name>default</servlet-name>
      <url-pattern>*.html</url-pattern>
  </servlet-mapping>

если его удалить - все работает, но *.html страницы тогда тоже пытаются через сервлет пролезать - не находит их

привожу web.xml
Код

<?xml version="1.0" encoding="Windows-1251"?>

<web-app>
  <display-name>...</display-name>
  <description>....</description>
  <context-param>
    <param-name>configFile</param-name>
    <param-value>/conf/wwwww.xml</param-value>
  </context-param>

<!-- *** listeners *** -->

  <listener>
    <listener-class>ru.wwwww.servlets.wwwwwContextListener</listener-class>
  </listener>

<!-- *** servlets *** -->
    <servlet>
        <servlet-name>wwwwwServlet</servlet-name>
        <servlet-class>ru.wwwww.servlets.wwwwServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

<servlet>
  <servlet-name>Connector</servlet-name> 
  <servlet-class>net.fckeditor.connector.ConnectorServlet</servlet-class> 
  <load-on-startup>1</load-on-startup> 
  </servlet>

<!-- *** servlet mappings *** -->
 <servlet-mapping>
  <servlet-name>Connector</servlet-name> 
  <url-pattern>/fckeditor/editor/filemanager/connectors/*</url-pattern> 
  </servlet-mapping>

    <servlet-mapping>
        <servlet-name>wwwwwServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

  <servlet-mapping>
      <servlet-name>default</servlet-name>
      <url-pattern>/doc/</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
      <servlet-name>default</servlet-name>
      <url-pattern>*.html</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
      <servlet-name>default</servlet-name>
      <url-pattern>*.css</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
      <servlet-name>default</servlet-name>
      <url-pattern>*.gif</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
      <servlet-name>default</servlet-name>
      <url-pattern>*.jpg</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
      <servlet-name>default</servlet-name>
      <url-pattern>*.png</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
      <servlet-name>default</servlet-name>
      <url-pattern>*.js</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
      <servlet-name>default</servlet-name>
      <url-pattern>*.txt</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
      <servlet-name>default</servlet-name>
      <url-pattern>*.ico</url-pattern>
  </servlet-mapping>

  <servlet-mapping>
      <servlet-name>default</servlet-name>
      <url-pattern>*.xml</url-pattern>
  </servlet-mapping>

<!-- *** welcome files *** -->
  <welcome-file-list>
      <welcome-file>index.html</welcome-file>
  </welcome-file-list>

<!-- *** error page *** -->
  <error-page>
      <error-code>500</error-code>
      <location>/error_500.html</location>
  </error-page>
  <error-page>
      <error-code>404</error-code>
      <location>/error_404.html</location>
  </error-page>

<!-- JSPC servlet mappings end -->
</web-app>


причем если index.html положить в корень проекта, то в 8 версии открывается именно он по адресу сайта
маппинг / на wwwwwServlet не срабатывает почему-то и запрос не передается приложению

расскажите в чем разница пожалуйста!

Автор: Pawl 22.1.2015, 22:26
Цитата

   причем если index.html положить в корень проекта, то в 8 версии открывается именно он по адресу сайта
   

Попробуйте вместо index.html использовать index.jsp, а в нём делать редирект на ваш сервлет типа 
Код

<% response.sendRedirect("..."); %>

И ещё, у вас <load-on-startup>1</load-on-startup> стоит для всех сервлетов. Может, коннектор надо загружать вторым? Я не уверен, но возможно это тоже может влиять.

Этот ответ добавлен с нового Винграда - http://ru.vingrad.com/Tomcat-5-i-8-raznoye-povedeniye-webxml-id54c0a379ae2015ca708b4567#findElement_E7045_54c14efaae20157527e68313_0

Автор: aranea 23.1.2015, 08:41
спасибо за ответ!

покопал в сторону welcome-file и index.html
получилось, что если на вэлком поставить index.htm и его же положить в корень, то запросы со / обрабатываются корректно, так же открывается корень сайта через сервлет (index.htm не показывается никогда)
*.html файлы отдаются напрямую, минуя сервлет
чего и требовалось достичь

Код

<?xml version="1.0" encoding="Windows-1251"?>

<web-app>

  <display-name>....</display-name>
  <description>....</description>

  <context-param>
    <param-name>configFile</param-name>
    <param-value>/conf/wwww.xml</param-value>
  </context-param>

<!-- *** listeners *** -->
  <listener>
    <listener-class>ru.wwww.servlets.wwwwContextListener</listener-class>
  </listener>

<!-- *** servlets *** -->
    <servlet>
        <servlet-name>wwwwServlet</servlet-name>
        <servlet-class>ru.wwww.servlets.wwwwServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet>
        <servlet-name>Connector</servlet-name> 
        <servlet-class>net.fckeditor.connector.ConnectorServlet</servlet-class> 
        <load-on-startup>2</load-on-startup>
    </servlet>

<!-- *** servlet mappings *** -->
    <servlet-mapping>
        <servlet-name>Connector</servlet-name>
        <url-pattern>/fckeditor/editor/filemanager/connectors/*</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>wwwwServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>*.html</url-pattern>
        <url-pattern>*.css</url-pattern>
        <url-pattern>*.gif</url-pattern>
        <url-pattern>*.png</url-pattern>
        <url-pattern>*.jpg</url-pattern>
        <url-pattern>*.xml</url-pattern>
        <url-pattern>*.txt</url-pattern>
        <url-pattern>*.ico</url-pattern>
        <url-pattern>*.js</url-pattern>
    </servlet-mapping>

<!-- *** welcome files *** -->
  <welcome-file-list>
      <welcome-file>index.htm</welcome-file>
  </welcome-file-list>

<!-- *** error page *** -->
  <error-page>
      <error-code>500</error-code>
      <location>/error_500.html</location>
  </error-page>

  <error-page>
      <error-code>404</error-code>
      <location>/error_404.html</location>
  </error-page>
</web-app>


как это объяснить и надо ли - не знаю =)

спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)