2014-01-13 65 views
0

春3.1.4 的Java 1.7春季調度servlet的靜態HTML文件,默認路徑

我有配置的所有URL的DispatcherServlet的web應用程序。他們中的大多數將有映射。有些情況下,當我訪問使用http://host:port/myapp/index.html正確顯示網頁目錄下的index.html的內容的應用程序的一些靜態文件。我用下面的代碼片斷中的myapp-servlet.xml中

<mvc:default-servlet-handler/> 

預期當URL http://host:port/myapp被訪問默認的index.html將呈現,因爲我有我的web.xml中有以下實現這一目標

<servlet-mapping> 
    <servlet-name>myapp</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 
<welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
</welcome-file-list> 

然而,這似乎並沒有這樣的情況,即,除非在URL中的DispatcherServlet不能妥善解決它指定的index.html。誰能告訴我如何可以做到這一點?服務器日誌告訴我下面的

o.a.c.c.C.[.[.[/myapp] - servletPath=null, pathInfo=null, queryString=null, name=default 
o.a.c.c.C.[.[.[/myapp] - Named Dispatcher Forward 
o.a.c.c.C.[.[.[/myapp] - Disabling the response for futher output 
o.s.web.servlet.DispatcherServlet - Null ModelAndView returned to DispatcherServlet with name 'myapp': assuming HandlerAdapter completed request handling 
o.s.web.servlet.DispatcherServlet - Successfully completed request 

回答

2

該servlet優先於<welcome-file-list>,所以在這種情況下,<welcome-file-list>將不起作用,因爲DispatcherServlet恐怕會消耗所有請求。

該解決方案很簡單,但只需在Spring中添加默認路徑的映射以及將視圖發送到index.html的控制器操作即可。

1

如果你已經正確配置Spring MVC的,那麼就應該是這樣的,

<servlet> 
    <servlet-name>myapp</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>myapp</servlet-name> 
    <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

現在你應該有一個文件的myapp-servlet.xml中的你應該做什麼對於請求URL模式提供映射,或者你可以去註解基於Java的映射文件直接。

在這種情況下,你的歡迎,文件將無法播放規則爲您的第一個請求「APPNAME /」

將通過MVC映射「/ *」,並會去Spring MVC中搜索文件映射。

就可以實現通過這種方式映射你的需要,

<servlet> 
    <servlet-name>myapp</servlet-name> 
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>myapp</servlet-name> 
    <url-pattern>/mvc/*</url-pattern> 
    </servlet-mapping> 

現在MVC將進入畫面只有在模式遵循「/ MVC /」否則會在正常流程工作。