Spring MVC - HTTP-запросы GET для статических ресурсов обрабатываются пользовательским сервлетом - PullRequest
1 голос
/ 29 октября 2011

Я работаю над прокси сервлетом, который отображает все запросы.Я указал web.xml следующим образом:

<servlet>
    <servlet-name>appServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/admin/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>appServlet</servlet-name>
    <url-pattern>/home</url-pattern>
</servlet-mapping>

<servlet>
    <description>Servlet to proxy all requests.</description>
    <display-name>ProxyServlet</display-name>
    <servlet-name>ProxyServlet</servlet-name>
    <servlet-class>com.epam.alpha.servlets.ProxyServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>ProxyServlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

<welcome-file-list>
    <welcome-file>home</welcome-file>
</welcome-file-list>

Таким образом, все запросы обрабатываются моим прокси-сервлетом, кроме / home и / admin / *, которые зарезервированы для домашней страницы и страниц администратора.,Это прекрасно работает!

Теперь я хотел бы использовать файлы javascript и css на своих страницах jsp.Они находятся в папке ресурсов, поэтому они находятся в нужном месте.

В servlet-context.xml выдается следующее:

<resources mapping="/resources/**" location="/resources/" />

Проблема в том, что мой сервлет перехватывает всеПОЛУЧИТЬ запросы к статическим ресурсам.Ресурсы найдены и использованы, если я закомментирую отображение сервлета для ProxyServlet, конечно, в этом случае прокси-сервлет не работает.С другой стороны, если я не ссылаюсь на файл javascript из jsp, прокси-сервлет работает (запрос статического ресурса не произойдет).Помогите!

1 Ответ

0 голосов
/ 30 октября 2011

Мне удалось обработать страницу через контроллер Spring, и на эту страницу загружен JS-скрипт с использованием аналогичной конфигурации:

  • Сервлет-диспетчер
  • сервлетсопоставлен с / (прокси сервлетом)

Мне пришлось

  • сопоставить путь / resources / * с сервлетом диспетчера в web.xml (в дополнение кдругие сопоставления)
  • использовать следующий файл контекста пружины:

servlet-context.xml:

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">

    <context:component-scan base-package="fr.free.jnizet.springtest"/>
    <mvc:annotation-driven/>
    <mvc:resources location="/resources/**" mapping="/resources"/>
    <mvc:default-servlet-handler/>
</beans>

Ключевым моментом является элемент <mvc:default-servlet-handler/>,Без этого элемента Spring не находит сопоставления для файла JS в /resources/.

...