一:一个servlet的访问顺序
访问顺序为1—>2—>3—>4,其中2和3的值必须相同。
url-pattern 标签中的值是要在浏览器地址栏中输入的 url,可以自己命名,这个 url 访问名为 servlet-name 中值的 servlet,两个 servlet-name 标签的值必须相同,因为通过 servlet 标签中的 servlet-name 标签映射到 servlet-class 标签中的值,最终访问 servlet-class 标签中的 class。
还有,web.xml 的 / 表示的是http://localhost:8080/ + 工程名
而.jsp页面的action,加了/表示绝对路径http://localhost:8080/ ,没有加 / 表示的是相对路径
这一部分转载自:http://blog.csdn.net/zhaizu/article/details/9897083
二:web.xml的加载过程
当我们去启动一个WEB项目时,首先会读取项目web.xml配置文件,当这一步骤没有出错并且完成之后,项目才能正常地被启动起来。
(1)启动WEB项目的时候,容器(一般Tomcat)首先会去它的配置文件web.xml读取两个节点<listener></listener>和<context-param></context-param>;
(2)紧接着,容器创建一个ServletContext(application),这个WEB项目所有部分都将共享这个上下文;
(3)<context-param>上下文参数,容器以<context-param></context-param>的name作为键,value作为值,将其转化为键值对,存入ServletContext,
故这些键值对会在这个项目中共享;
(4)<listener>监听器,容器创建<listener></listener>中的类实例,根据配置的class类路径<listener-class>来创建监听;
在监听中会有contextInitialized(ServletContextEvent args)初始化方法,启动Web应用时,系统调用Listener的该方法,在这个方法中获得:
ServletContext application =ServletContextEvent.getServletContext();
context-param的值= application.getInitParameter("context-param的键");
(5)<filter>过滤器,容器会读取<filter></filter>,根据配置的class类路径来实例化过滤器;
以上都是在WEB项目还没有完全启动起来的时候就已经完成了的工作。
(6)<servlet>,如果系统中有Servlet,则Servlet是在第一次发起请求的时候被实例化的,而且一般不会被容器销毁,它可以服务于多个用户的请求。
所以,Servlet的初始化都要比上面提到的那几个要迟。
总的来说,web.xml的加载顺序是: <context-param>-> <listener> -> <filter> -> <servlet>。如果web.xml中出现了相同的元素,则按照在配置文件中出现的先后顺序来加载。
平常看到的模板文件
schema,web.xml的模式文件是由Sun公司定义的,每个web.xml文件的根元素<web-app>中,都必须标明这个 web.xml使用的是哪个模式文件。其它的元素都放在<web-app></web-app>之中。其中<display-name></display-name>定义了web应用名称。
详细参考:(1)http://blog.csdn.net/believejava/article/details/43229361
(2)http://www.cnblogs.com/hellojava/archive/2012/12/28/2835730.html