使用Servlet激活器... 5
缺省Servlet 6
Tomcat中的类装载器... 6
Servlet 8
Servlet路径映射... 8
ServletConfig接口... 9
获取ServletContext对象(getServletContext)... 9
获取Servlet的注册名(getServletName)... 9
获取Servlet初始化参数(getInitParameter)... 9
GenericServlet与HttpServlet类... 10
init方法... 10
service方法... 10
getServletInfo方法... 11
doXxx方法... 11
浏览器缓存与getLastModified方法... 13
ServletContext 16
获取web应用的初始化参数(getInitParameter)... 16
记录日志(log)... 17
访问资源文件(getResourcePaths)... 17
将虚拟路径转换成本地路径(getRealPath)... 18
Web应用程序之间的访问(getContext)... 19
其他方法(getMajorVersion、getMimeType、getServerInfo)... 19
使用Servlet激活器配置一个Servlet时,一般要在自己项目中的web.xml配置<servlet>与<servlet-mapping>两个元素,但con/web.xml中为我们提供了一个名叫invoker的Servlet(5.5.30中已被注释掉,我们需要去掉),如下:
<servlet>
<servlet-name>invoker</servlet-name>
<servlet-class>
org.apache.catalina.servlets.InvokerServlet
</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
它可以根据URL中提供的Servlet类信息而自动激活这个Servlet,而不需要我们再在自己的应用中的web.xmlj里另外配置一<servlet>,只需要配置<servlet-mapping>即可,配置如下:
<servlet-mapping>
<servlet-name>invoker</servlet-name>
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
如现在有这样一个Servlet:mypak.HelloWorldServlet,则这样可以访问http://localhost:8080/myapp/servlet/mypak.HelloWorldServlet。注意,每个Web应用程序中为Servlet激活器所映射的访问路径可以各不相同,但必须以“/*”结尾(比如这里去掉前面的/servlet也可以)。经过这样的设置以后,即使某个Servlet程序没有在web.xml文件中进行注册,我们只需要将Servlet激活器所映射的访问路径中的通配符(*)替换为这个Servlet的完整类名,就可以通过Servlet激活器来调用这个Servlet程序。
缺省Servlet如果某个Servlet的映射路径(<servlet-mapping>元素中的<url-pattern>元素的值)仅仅为一个正斜杠(/),那么这个Servlet就成为当前Web应用程序的缺省Servlete。凡是在web.xml文件中找不到匹配的<servlet-mapping>元索的URL,它们的访问请求都将交给缺省Servlet处理,也就是说,缺省Servlet用于处理所有其他Servlet都不处理的访问请求。在<tomcat的安装目录>/conf/web.xml文件中,注册了一个名称为org.apache.catalina.servlets.DefaultServlet的Servlet,并将这个Servlet设置为缺省Servlet。由于<tomcat的安装目录>/conf/web.xml文件的设置信息对该服务器上的所有Web应用程序都起作用,所以,服务器上的所有Web应用程序的缺省Setvlet都是org.apacbe.catalina.servlets.DefaultServlet。
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
…
</servlet>
当访问Tomcat服务器中的某个静态HTML文件和图片时,实际上是在访问这个缺省Setvlet,而这个缺省Servlet的处理方式通常是把静态资源中的内容按字节原封不动地读出来,然后再按字节流原封不动传递给客户端,并且生成一些响应消息头字段,例如,根据静态资源的扩展名所映射的MIME类型生成Content-Type头字段,根据静态资源的大小生成Content-Length头字段。
如果将conf/web.xml下的默认Servlet注释掉,则非Servlet与Jsp资源将不能访问:
<!--servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping-->
注意,
新闻热点
疑难解答