Конфигурация отображения контроллера Spring и статические ресурсы

У меня проблема с перехватом запроса к статическим ресурсам контроллером.

Вот web.xml (часть, связанная с проблемой):

<servlet>
    <servlet-name>testing</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>testing</servlet-name>
    <url-pattern>/testing/*</url-pattern>
</servlet-mapping>

Вот тестирование-servlet.xml:

<mvc:annotation-driven />
<mvc:resources mapping="/resources/**" location="/WEB-INF/resources/" />

<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
    <property name="prefix" value="/WEB-INF/jsp/" />
    <property name="suffix" value=".jsp" />
</bean>

Вот исходный код класса контроллера:

@Controller
@RequestMapping(value = "/testing")
public class TestingController {
    @RequestMapping(method = RequestMethod.GET)
    public String doSomething() {
        return "doView";
    }

    @RequestMapping(value = "/getSomething", method = RequestMethod.GET)
    public String getSomething(@RequestParam String id) {
        return "getView";
    }
}

И последний фрагмент файлов doView.jsp и getView.jsp с объявлением статического файла с помощью JavaScript:

<script src="testing/resources/js/jquery.js"></script>

Есть одна вещь, которую я не понимаю - почему я получаю doView.jsp, вводя только http://localhost:8080/app/testing но чтобы получить getView.jsp мне нужно войти http://localhost:8080/app/testing/testing/getSomething ("Тестирование" набирается дважды).

А теперь главная причина этой темы - когда я удаляю аннотацию отображения запроса из определения класса (@RequestMapping(value = "/testing") и оставить эти методы, тогда я не могу получить файл jquery.js вообще. Когда я печатаю http://localhost:8080/app/testing/resources/js/jquery.js Я получаю doView.jsp. Нет никаких проблем, о которых сообщает инструмент разработчика в браузере (отсутствует файл jquery.js или что-то в этом роде) - этот запрос только что перехвачен диспетчером Spring. Единственное преимущество в этой конфигурации состоит в том, что мне не нужно дважды вводить "тестирование", чтобы открыть getView.jsp.;)

Кто-нибудь знает решение, как сделать mvc:resources тег работает в такой ситуации? И нет, я не могу установить URL-адрес всего тестового сервлета в "/".;)

2 ответа

Первая первая часть вопроса, это нормальное поведение. ты объявил /testing/* как шаблон url для вашего сервлета Dispatcher, что означает, что все "вещи", появляющиеся после / testing /, рассматриваются весной и поэтому перехватываются. Затем вы должны были добавить @RequestMapping аннотации, и вы заполняете значение параметра этого testing что может привести к путанице. Вы можете использовать /ANOTHER_NAME как url-pattern вместо того, чтобы тестировать и поддерживать отображение запроса на определение вашего контроллера как тестирование.

для второй части, мне кажется, вы помещаете свой js-файл в / src / main / resources, который является защищенной папкой, вы можете подумать о том, чтобы поместить его в / src / webapp / public-resources, а затем настроить следующим образом:

<mvc:resources mapping="/resources/**"
           location="/, classpath:/WEB-INF/public-resources/"
           cache-period="10000" />

Пожалуйста, добавьте эту банку

<mvc:resources mapping="/resources/**" location="/resources/"/>
<mvc:annotation-driven/>

этот jar-файл будет автоматически загружен в структуру maven/pom.xml, но в случае с вашей собственной lib вы должны будете поставить этот jar-файл hamcrest-core-1.3.jar

Другие вопросы по тегам