2013-02-16 60 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"/>