tomcat、jboss、jetty等容器提供了一个默认的servlet:default,该servlet将静态资源的映射从/改为/static,该servlet在jboss中的定义位置为:${jboss_home}/server/default/deployers/jbossweb.deployer/web.xml;在tomcat中的定义位置:${tomcat_home}/conf/web.xml。那么DefaultServlet究竟是做什么用的呢?我们先看tomcat官方给出的解释:
简介 |
这里讨论不同的操纵默认servlet的方法。讨论的话题有: |
什么是DefaultServlet |
默认的servlet是既服务于静态资源又服务于目录列表(如果允许目录列表的话)的servlet。 |
它在什么地方被声明的? |
它在$CATALINA_HOME/conf/web.xml中被全局声明。默认形式的声明是这样的: $CATALINA_HOME/conf/web.xml |
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>
org.apache.catalina.servlets.DefaultServlet
</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
...
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
因此在默认的情况下,默认servlet在webapp启动时被装载,目录列表可被使用,日志调试功能被关掉。(笔者备注:在Tomcat 5.5.13之后的版本,已经将listings默认设置为false,默认是禁止目录列表了 参见http://issues.apache.org/bugzilla/show_bug.cgi?id=37150)
我能做什么样的改变? | ||||||||||||||||||||
DefaultServlet允许以下初始化参数: |
那么在实际应当当中,我们的应用的一些静态资源就可以交给该servlet去处理,以减轻服务器压力,节省资源。比如我们把对静态资源的访问路径从/变更为/static,如访问http://localhot/style.css改成http://localhost/static/style.css,然后再应用的web.xml文件中增加如下配置代码:
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/static/*</url-pattern>
</servlet-mapping>
关于目录列表功能,我在另一篇博客做了简单的介绍,见: http://blog.csdn.net/zdhcumt/article/details/6869381