Tomcat: не добавляет завершающий «/» при поиске каталога

#tomcat

#tomcat

Вопрос:

Я развернул архив .war в Tomcat 7.0.22 (Java 1.6, macOS Lion). Война называется «myapp.war», и поэтому Tomcat обслуживает http://localhost/myapp (расширив войну в /webapps/myapp). Это обычное поведение

При доступе к URL-адресу, соответствующему каталогу, он должен добавлять «/» . Для корректной работы статических файлов (.css, .js ..) Это необходимо, Но в то время как с примерами сайтов, которые поставляются с Tomcat, это работает (например http://127.0.0.1:8080/examples , внезапное перенаправление на посещение http://127.0.0.1:8080/examples/ ), на моем сайте tomcat не добавляет никаких «/», что делает поиск статических файлов прерывистым. При вызове вручную localhost:8080/myapp/ (<— я добавляю косую черту) все работает нормально.

Что должно происходить? Имейте в виду, что я не касался никаких настроек Tomcat, я просто экспериментирую с тем, что выходит непосредственно из zip-файла Apache!

Спасибо

Комментарии:

1.Вы хотите сказать, что http://localhost/myapp это не генерирует перенаправление 302 на http://localhost/myapp/ ?

2. да, точно. спасибо, что заинтересовались

3. Привет, пистаччо! .war файл — это примерно переименованный zip-файл. Имея это в виду, если вы откроете его и проверите сопоставление URL-адресов в WEB-INF/web.xml файле внутри него, вы можете поэкспериментировать с тем, что у него есть. Этот пост о завершающей косой черте дает варианты того, что вы могли бы сделать, когда узнали, что у вас там было!

4. Я думаю, вам нужно опубликовать больше информации, в идеале ваш web.xml и / или сопоставления @Servlet. Вы удалили index.jsp? Попробуйте создать . война без добавления какого-либо сервлета и посмотреть, работает ли это (оставляя index.jsp неповрежденным).

Ответ №1:

Во-первых, вы должны подробнее рассказать о своей ситуации. Как сказал @mico, вот решение:

 <filter>
    <filter-name>Jersey Filter</filter-name>
     <filter-class>com.sun.jersey.spi.container.servlet.ServletContainer</filter-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>your package name(s)</param-value>
        </init-param>
    <init-param>
            <param-name>com.sun.jersey.config.property.WebPageContentRegex</param-name>
            <param-value>.*.jsp|.*.css|.*.png|.*.js|.*.gif|.*.jpg</param-value>
        </init-param>
</filter>

<filter-mapping>
    <filter-name>Jersey Filter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>INCLUDE</dispatcher>
</filter-mapping>

 <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
</welcome-file-list>
 

Идея решения, основанная на:

определение Jersey ServletContainer в качестве фильтра вместо сервлета

Здесь вы можете прочитать больше: http://jersey.576304.n2.nabble.com/Tomcat-trailing-slashes-and-welcome-files-td4684494.html

Здесь говорится, что: If you have a '/*' mapping, then Tomcat won't redirect

Еще одно: вы должны увидеть, как tomcat регистрирует ваш запрос, и решить основную проблему.