`

web.xml中出现<servlet-name>default</servlet-name>是什么意思?

    博客分类:
  • web
web 
阅读更多

 来源: http://blog.csdn.net/hello5orld/article/details/9407905

在web.xml文件中经常看到这样的配置<servlet-name>default</servlet-name>,这个配置的作用是:对客户端请求的静态资源如图片、JS文件等的请求交由默认的servlet进行处理,如下所示:

<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.png</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.gif</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.ico</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.gif</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>

下面是从http://elf8848.iteye.com/blog/875830中摘录的一些资料

 

如何你的DispatcherServlet拦截"*.do"这样的有后缀的URL,就不存在访问不到静态资源的问题。

如果你的DispatcherServlet拦截"/",为了实现REST风格,拦截了所有的请求,那么同时对*.js,*.jpg等静态文件的访问也就被拦截了。

我们要解决这个问题。

 

目的:可以正常访问静态文件,不可以找不到静态文件报404。

 
方案一:激活Tomcat的defaultServlet来处理静态文件

 

<!-- 当需要用jetty做服务时,需要注释一下的servlet,jetty和tomcat的servlet配置不能共存 -->
 <servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>/public/*</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>/spec/*</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>/components/*</url-pattern>
 </servlet-mapping>
 <servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>*.html</url-pattern>
 </servlet-mapping>

要写在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" 

 

 


方案二: 在spring3.0.4以后版本提供了mvc:resources ,  使用方法:

<!-- 对静态资源文件的访问 -->    

<mvc:resources mapping="/images/**" location="/images/" />  

 

/images/**映射到ResourceHttpRequestHandler进行处理,location指定静态资源的位置.可以是web application根目录下、jar包里面,这样可以把静态资源压缩到jar包中。cache-period 可以使得静态资源进行web cache 
 
如果出现下面的错误,可能是没有配置<mvc:annotation-driven />的原因。 
报错WARNING: No mapping found for HTTP request with URI [/mvc/user/findUser/lisi/770] in DispatcherServlet with name 'springMVC'

 

使用<mvc:resources/>元素,把mapping的URI注册到SimpleUrlHandlerMapping的urlMap中,
key为mapping的URI pattern值,而value为ResourceHttpRequestHandler,
这样就巧妙的把对静态资源的访问由HandlerMapping转到ResourceHttpRequestHandler处理并返回,所以就支持classpath目录,jar包内静态资源的访问.
另外需要注意的一点是,不要对SimpleUrlHandlerMapping设置defaultHandler.因为对static uri的defaultHandler就是ResourceHttpRequestHandler,
否则无法处理static resources request.

 

 

方案三 ,使用<mvc:default-servlet-handler/>

<mvc:default-servlet-handler/>  

 

会把"/**" url,注册到SimpleUrlHandlerMapping的urlMap中,把对静态资源的访问由HandlerMapping转到org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler处理并返回.
DefaultServletHttpRequestHandler使用就是各个Servlet容器自己的默认Servlet.

 

 

补充说明:多个HandlerMapping的执行顺序问题:

DefaultAnnotationHandlerMapping的order属性值是:0

< mvc:resources/ >自动注册的 SimpleUrlHandlerMapping的order属性值是: 2147483646

 

<mvc:default-servlet-handler/>自动注册 的SimpleUrlHandlerMapping 的order属性值是: 2147483647

 

 

spring会先执行order值比较小的。当访问一个a.jpg图片文件时,先通过 DefaultAnnotationHandlerMapping 来找处理器,一定是找不到的,因为我们没有叫a.jpg的Action。然后再按order值升序找,由于最后一个 SimpleUrlHandlerMapping 是匹配 "/**"的,所以一定会匹配上,就可以响应图片。

 

 

访问一个图片,还要走层层匹配。不知性能如何?

最后再说明一下,方案二、方案三 在访问静态资源时,如果有匹配的(近似)总拦截器,就会走拦截器。如果你在拦截中实现权限检查,要注意过滤这些对静态文件的请求。

如何你的DispatcherServlet拦截 *.do这样的URL后缀,就不存上述问题了。还是有后缀方便。

 

 

 

 

 

分享到:
评论

相关推荐

    FCK在线编辑器源码及部署项目引用示例

    4.将以下代码添加到web.xml配置文件中: &lt;servlet&gt; &lt;servlet-name&gt;Connector&lt;/servlet-name&gt; &lt;servlet-class&gt; com.FCKeditor.connector.ConnectorServlet &lt;/servlet-class&gt; &lt;init-param&gt; &lt;param-name&gt;baseDir...

    基于MyEclipse搭建maven+springmvc整合图文教程(含源码0

    &lt;param-value&gt;/WEB-INF/dispatcher-servlet.xml&lt;/param-value&gt; &lt;/init-param&gt; &lt;load-on-startup&gt;1&lt;/load-on-startup&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;dispatcher&lt;/servlet-name&gt; &lt;url-...

    一个在线报名系统

    &lt;servlet-name&gt;registerServlet&lt;/servlet-name&gt; &lt;servlet-class&gt;servlet.registerServlet&lt;/servlet-class&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;registerServlet&lt;/servlet-name&gt; &lt;url-pattern&gt;/...

    Axsis and XFire Demo src code

    &lt;servlet-name&gt;AxisServlet&lt;/servlet-name&gt; &lt;servlet-class&gt; org.apache.axis.transport.http.AxisServlet &lt;/servlet-class&gt; &lt;/servlet&gt; &lt;servlet&gt; &lt;servlet-name&gt;AdminServlet&lt;/servlet-name&gt; ...

    WMS仓库管理系统SSM.zip

    &lt;servlet-name&gt;default&lt;/servlet-name&gt; &lt;url-pattern&gt;*.svg&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;default&lt;/servlet-name&gt; &lt;url-pattern&gt;*.eot&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; ...

    基于SSM(spring+springMVC+MyBatis)开发的仓库管理系统

    &lt;servlet-name&gt;default&lt;/servlet-name&gt; &lt;url-pattern&gt;*.svg&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;default&lt;/servlet-name&gt; &lt;url-pattern&gt;*.eot&lt;/url-pattern&gt; &lt;/servlet-...

    t淘淘商城项目 商城项目 视频和源码教程 详细

    &lt;servlet-api.version&gt;2.5&lt;/servlet-api.version&gt; &lt;jsp-api.version&gt;2.0&lt;/jsp-api.version&gt; &lt;joda-time.version&gt;2.5&lt;/joda-time.version&gt; &lt;commons-lang3.version&gt;3.3.2&lt;/commons-lang3.version&gt; &lt;commons-io....

    SSM实现跨服务器上传图片,并用Ajax实现图片回显,以及商品的的修改、查询和删除功能

    6.需要将Tomcat7.0,及ssmImage19项目所在的Tomcat的web.xml中的DefaultServlet的只读权限改为false。 &lt;servlet-class&gt;org.apache.catalina.servlets.DefaultServlet&lt;/servlet-class&gt; &lt;init-param&gt; &lt;param-name&gt;...

    spring_MVC源码

    14. &lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet&lt;/servlet-class&gt; 15. &lt;load-on-startup&gt;1&lt;/load-on-startup&gt; 16. &lt;/servlet&gt; 17. &lt;servlet-mapping&gt; 18. &lt;servlet-name&gt;spring&lt;/servlet...

    SpringMVC-Mybatis-Shiro-redis-master 权限集成缓存中实例

    &lt;param-name&gt;spring.profiles.default&lt;/param-name&gt; &lt;param-value&gt;dev&lt;/param-value&gt; &lt;/context-param&gt; &lt;context-param&gt; &lt;param-name&gt;spring.liveBeansView.mbeanDomain&lt;/param-name&gt; &lt;param-value&gt;dev&lt;/param...

    拦截器和控制器的区别

    &lt;default-interceptor-ref name="myStack"&gt;&lt;/default-interceptor-ref&gt; 拦截错误跳转的页面 &lt;global-results&gt; &lt;result name="error"&gt;/demo01/error.jsp&lt;/result&gt; &lt;/global-results&gt; &lt;/package&gt; ...

    freemarker总结

    &lt;tr&gt;&lt;td&gt;${being.name}&lt;td&gt;${being.price} Euros &lt;/#list&gt; &lt;/table&gt; 输出为: &lt;p&gt;We have these animals: &lt;table border=1&gt; &lt;tr&gt;&lt;th&gt;Name&lt;th&gt;Price &lt;tr&gt;&lt;td&gt;mouse&lt;td&gt;50 Euros &lt;tr&gt;&lt;td&gt;...

    jwchat源码

    3 &lt;url-pattern&gt;/JHB/&lt;/url-pattern&gt; &lt;!--这里的修改主页是对应上面的config.js,如果config.js的httpbase配置是/jwchat/,那这里的就不用修改了 --&gt; 4 &lt;/servlet-mapping&gt; (黄色表示要修改的部分) 5.启动...

    cms后台管理

    &lt;param-value&gt;/WEB-INF/config/jeecms-servlet-front.xml&lt;/param-value&gt; &lt;/init-param&gt; &lt;load-on-startup&gt;2&lt;/load-on-startup&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;JeeCmsFront&lt;/servlet-name&gt; &lt;url-...

    Java 实时社区论坛.zip

    WEB-INF/cron.xml 中注释掉的部分打开如果部署在非 Jetty 容器中,需要把 WEB-INF/web.xml 中如下配置注释掉: &lt;servlet&gt;  &lt;servlet-name&gt;default&lt;/servlet-name&gt;  &lt;servlet-class&gt;org.eclipse.jetty.servlet....

    SpringMVC-SSH全注解

    &lt;property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /&gt; &lt;property name="prefix" value="/jsp/" /&gt; &lt;property name="suffix" value=".jsp" /&gt; &lt;/bean&gt; &lt;!-- 配置jdbc -...

    Spring3中配置DBCP,C3P0,Proxool,Bonecp数据源

    &lt;mvc:default-servlet-handler /&gt; &lt;aop:config proxy-target-class="true"/&gt; &lt;tx:annotation-driven transaction-manager="txManager"/&gt; &lt;!-- 采用单数据源事务控制方式,通过注解来定义事务--&gt; &lt;bean ...

    jpivot学习总结.doc

    &lt;jp:mondrianQuery dataSource="feeDS" id="query01" catalogUri="/WEB-INF/queries/feeSchema.xml"&gt; 例子在tomcat中定义了数据源feeDS 2.2. 各种维度类型  一般维度 例子中定义了维度:[term].[所有终端] 按终端...

    解决struts2下载异常的jar包 struts2-sunspoter-stream-1.0.jar

    &lt;package name="default" extends="struts-default"&gt; &lt;global-results&gt; &lt;result name="client-abort-exception"&gt;/ignored.jsp&lt;/result&gt; &lt;/global-results&gt; &lt;/package&gt; &lt;package name="main" extends="struts-default...

Global site tag (gtag.js) - Google Analytics