Servlet的生命周期
<servlet-mapping>和<servlet>
- Web应用的用户是通过指定浏览器中URL地址来访问Web应用提供的静态或者是动态资源,如果Servlet想被客户访问,必须配置特定Servlet的访问路径,这个工作在web.xml里通过配置servlet和servlet-mapping来实现。<servlet>用来指定工程中class的位置,<servlet-mapping>指定特定名字servlet的访问路径。
- 如果某个Servlet的url-pattern是"/",该Servlet就是缺省servlet,否则系统会默认展示index.jsp, 如果index.jsp也没有启动该应用就会报找不到资源(没有默认的缺省文件)。配置了缺省路径的情况下,如果用户请求一个系统不存在的URL,会自动的调用缺省的url对应的servlet进行处理。
- 除了用户自定义的缺省Servlet,Tomcat还提供一个缺省Servlet帮助查找静态资源,访问Web应用中某个静态文件,本质上也是通过访问Tomcat缺省Servlet来查找和展示的,这个缺省的Servlet在<tomcathome>\conf\web.xml中配置,对应的类是org.apache.catalina.servlets.DefaultServlet.
- 同一个Servlet可以被映射到多个URL上,即多个<servlet-mapping>引用同一个<servlet>。
- <url-pattern>可以有扩展名也可以没有,这就是为什么有的网页带.html, 有的网页不带.html
- <url-pattern>可以使用*通配符,但是只能有两种固定格式,一种是“ *.扩展名”结束(eg: *.do, /XXX/*.html),一种是以“/开头,以/*结尾”(eg:/XXX/*, /XXX/XXX/*)。当有通配符时,如果用户输入的路径有多个对应的url-pattern, 会自动寻找最精确匹配的url-pattern, 并调用相应的servlet进行处理。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> <servlet> <servlet-name>FirstHttpServlet</servlet-name> <servlet-class>servlet.basic.FirstHttpServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>FirstHttpServlet</servlet-name> <url-pattern>/helloServlet</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>FirstHttpServlet</servlet-name> <url-pattern>/helloServlet/</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>FirstHttpServlet</servlet-name> <url-pattern>/helloServlet.html</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>FirstHttpServlet</servlet-name> <url-pattern>/helloWeb/*</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>FirstHttpServlet</servlet-name> <url-pattern>*.html</url-pattern> </servlet-mapping> </web-app>
路径匹配很重要, 多少一个字符("/")都可能导致查找不到对应的资源