#spring-mvc #tiles #tiles2
#spring-mvc #плитки #tiles2
Вопрос:
Во-первых, я знаю, что Spring MVC имеет хорошую интеграцию с плитками. Но моя проблема заключается в следующем:
Я настроил свой web.xml как
<servlet>
<description>Spring Dispatcher Servlet</description>
<servlet-name>Dispatcher</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Dispatcher</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
И мой Dispatcher-servlet.xml настраивается следующим образом:
<bean class="org.springframework.web.servlet.view.tiles2.TilesConfigurer">
<property name="definitions">
<list>
<value>
/WEB-INF/tiles-defs/base-layout.xml
</value>
<value>
/WEB-INF/tiles-defs/application-layout.xml
</value>
</list>
</property>
</bean>
<bean id="tilesViewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.tiles2.TilesView" />
<property name="order" value="1" />
</bean>
Пожалуйста, обратите внимание, что сервлет диспетчера настроен для обработки всех запросов. Я не хочу настраивать его таким образом, чтобы он мог обрабатывать только определенные запросы, скажем, например, *.hmtl или *.do или *.form, потому что я хочу, чтобы мой URL был аккуратным, это требование.
У меня есть определение плиток, как показано ниже
<tiles-definitions>
<definition name="publicLayout" .
template="/WEB-INF/tiles-layouts/publicLayout.jsp">
<put-attribute name="title" value="Home Page" />
<put-attribute name="body" value="" />
</definition>
<definition name="home" extends="publicLayout">
<put-attribute name="body" value="/WEB-INF/jsp/home.jsp" />
</definition>
</tiles-definitions>
Теперь, когда я делаю HTTP-запрос, чтобы указать URL «http://localhost:8080/myapp/home «, аннотированный контроллер, сопоставленный с отображением запроса «/home», обрабатывает запрос и, наконец, возвращает ModelAndView с именем представления «home».
Наконец, когда сервлет диспетчера пытается отобразить страницу, он говорит
Не найдено сопоставления для HTTP-запроса с URI [/myapp/WEB-INF/tiles-layouts/publicLayout.jsp]
Но когда я меняю отображение моего диспетчерского сервлета таким образом, чтобы *.html, он работает нормально, чего я не хочу делать.
Что здесь можно сделать.?? я думаю, что это очень распространенная проблема.
Ответ №1:
Для обработки всех запросов, за исключением запросов для JSP, вам необходимо использовать
<url-pattern>/</url-pattern>