Интеграция Spring MVC и плиток

#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>