天天看點

關于使用"/"來 dispatcherServlet 的url-pattern帶來的問題

1

2

3

4

5

6

7

8

9

10

<code>&lt;</code><code>servlet</code><code>&gt;</code>

<code>     </code><code>&lt;</code><code>servlet-name</code><code>&gt;dispatcherServlet&lt;/</code><code>servlet-name</code><code>&gt;</code>

<code>     </code><code>&lt;</code><code>servlet-class</code><code>&gt;org.springframework.web.servlet.DispatcherServlet&lt;/</code><code>servlet-class</code><code>&gt;</code>

<code>     </code><code>&lt;</code><code>load-on-startup</code><code>&gt;1&lt;/</code><code>load-on-startup</code><code>&gt;</code>

<code> </code><code>&lt;/</code><code>servlet</code><code>&gt;</code>

<code> </code><code>&lt;</code><code>servlet-mapping</code><code>&gt;</code>

<code>     </code><code>&lt;</code><code>url-pattern</code><code>&gt;/&lt;/</code><code>url-pattern</code><code>&gt;</code>

<code> </code><code>&lt;/</code><code>servlet-mapping</code><code>&gt;</code>

但是帶來的問題是如何通路到靜态的檔案,如jpg,js,css?

如果你的DispatcherServlet攔截"*.do"這樣的有字尾的URL,就不存在通路不到靜态資源的問題。

如果你的DispatcherServlet攔截"/",為了實作REST風格,攔截了所有的請求,那麼同時對*.js,*.jpg等靜态檔案的通路也就被攔截了。

我們要解決這個問題。

目的:可以正常通路靜态檔案,不可以找不到靜态檔案報404。

方案一:激活Tomcat的defaultServlet來處理靜态檔案

11

12

<code>&lt;</code><code>servlet-mapping</code><code>&gt;  </code>

<code>    </code><code>&lt;</code><code>servlet-name</code><code>&gt;default&lt;/</code><code>servlet-name</code><code>&gt; </code>

<code>    </code><code>&lt;</code><code>url-pattern</code><code>&gt;*.jpg&lt;/</code><code>url-pattern</code><code>&gt;    </code>

<code>&lt;/</code><code>servlet-mapping</code><code>&gt;   </code>

<code>&lt;</code><code>servlet-mapping</code><code>&gt;      </code>

<code>    </code><code>&lt;</code><code>servlet-name</code><code>&gt;default&lt;/</code><code>servlet-name</code><code>&gt;   </code>

<code>    </code><code>&lt;</code><code>url-pattern</code><code>&gt;*.js&lt;/</code><code>url-pattern</code><code>&gt;   </code>

<code>&lt;</code><code>servlet-mapping</code><code>&gt;       </code>

<code>    </code><code>&lt;</code><code>servlet-name</code><code>&gt;default&lt;/</code><code>servlet-name</code><code>&gt;      </code>

<code>    </code><code>&lt;</code><code>url-pattern</code><code>&gt;*.css&lt;/</code><code>url-pattern</code><code>&gt;     </code>

<code>&lt;/</code><code>servlet-mapping</code><code>&gt;</code>

  

要寫在DispatcherServlet的前面, 讓 defaultServlet先攔截請求,這樣請求就不會進入Spring了,我想性能是最好的吧。

Tomcat, Jetty, JBoss, and GlassFish 自帶的預設Servlet的名字 -- "default"

Google App Engine 自帶的 預設Servlet的名字 -- "_ah_default"

Resin 自帶的 預設Servlet的名字 -- "resin-file"

WebLogic 自帶的 預設Servlet的名字  -- "FileServlet"

WebSphere  自帶的 預設Servlet的名字 -- "SimpleFileServlet" 

==============================================================================

本文轉自被遺忘的部落格園部落格,原文連結:http://www.cnblogs.com/rollenholt/archive/2012/12/26/2834209.html,如需轉載請自行聯系原作者