2013-02-16 61 views
1

我有一个使用瓷砖作为UI框架的春天项目。我想提供一个处理静态html文件的通用控制器(没有动态内容 - 所以没有自定义控制器)。通用控制器是org.springframework.web.servlet.mvc.UrlFilenameViewController。如果我在.jsp扩展文件中添加静态内容,整个事情就会起作用。只要我尝试将它们放入.html - 我收到404错误,我想弄清楚原因。春天和瓷砖 - 包括.html文件

web.xml中:

<display-name> 
    lyricsBase 
</display-name> 
<servlet> 
    <servlet-name>lyricsBaseApp</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>lyricsBaseApp</servlet-name> 
    <url-pattern>*.html</url-pattern> 
</servlet-mapping> 
<welcome-file-list> 
    <welcome-file>list.html</welcome-file> 
</welcome-file-list> 
<error-page> 
    <error-code>404</error-code> 
    <location>/WEB-INF/jsp/404.jsp</location> 
</error-page> 

lyricsBaseApp-servlet.xml中:

<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer"> 
    <property name="definitions"> 
     <list> 
      <value>/WEB-INF/tiles.xml</value> 
     </list> 
    </property> 
</bean> 

<bean id="tilesViewResolver" class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
    <property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView" /> 
</bean> 

<bean id="staticViewController" class="org.springframework.web.servlet.mvc.UrlFilenameViewController"> 
    <property name="prefix" value="t." /> 
</bean> 

<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
    <property name="mappings"> 
     <props> 
      <prop key="/list.html">jukeboxController</prop> 
      <prop key="/display.html">songController</prop> 
      <prop key="/static/about.html">staticViewController</prop> 
     </props> 
    </property> 
</bean> 

tiles.xml:

<definition name="t.base" template="/WEB-INF/tiles/base.jsp"> 
    <put-attribute name="title" value="SomeTitle"/> 
</definition> 

<definition name="t.static/about" extends="t.base"> 
    <put-attribute name="body" value="/WEB-INF/static/about.jsp"/> 
    <put-attribute name="title" expression="about"/> 
</definition> 

这是我访问的静态页面的URL:http://localhost:8084/lyricsBase/static/about.html

我已经得到了适当的目录都about.htmlabout.jsp文件。如果

<put-attribute name="body" value="/WEB-INF/static/about.jsp"/> 

<put-attribute name="body" value="/WEB-INF/static/about.html"/> 

我开始变得在Tomcat中警告:

2013-02-16 18:21:45 org.springframework.web.servlet.DispatcherServlet noHandlerFound 
WARNING: No mapping found for HTTP request with URI [/lyricsBase/WEB-INF/static/about.html] in DispatcherServlet with name 'lyricsBaseApp' 

为什么?

回答

0

我知道这个问题是在2年前问过的,但是我遇到了同样的问题,也许某个时候是别人。

我认为瓷砖只支持JSP,Freemarker或Velocity。我可以找到解决方法。定义静态处理,像这样:

@Configuration 
@EnableWebMvc 
@ComponentScan(value = "com.xy")) 
public class WebConfig extends WebMvcConfigurerAdapter { 
@Override 
public void addResourceHandlers(final ResourceHandlerRegistry registry) { 
    registry.addResourceHandler("/lyricsBase/static/**") 
      .addResourceLocations("/WEB-INF/static/"); 
    } 
} 

现在你应该可以通过地砖使用您的HTML模板:

<put-attribute name="body" value="/lyricsBase/static/about.html"/>