我们在启动Javaweb项目时,首先需要启动一个容器(如Tomcat,JBoss)
WEB加载web.xml过程如下:
1、在启动Web项目时,容器(如Tomcat,JBoss)会读web.xml配置文件中的两个节点
2、接着容器会创建一个ServletContext(上下文),应用范围内即整个WEB项目都能够使用这个上下文
3、接着容器以
4、容器创建
5、监听器的类中会有一个 contextInitialized(servletContextEvent event)初始化的方法
在这个方法中可以通过event.getServletContext().getInitParameter("contextConfigLocation")来获得context-param设定的值
在这个类中还必须有一个contextDestroyed(ServletContextEvent event)销毁方法,用于关闭资源应用前释放资源,比如数据库的连接关闭
6、接着,容器会读取
以上步骤都是在WEB项目还没有完全启动起来的时候就已经完成了的工作。
如果系统中有Servlet,则Servlet是在第一次发起请求的时候被实例化的,而且一般不会被容器销毁,它可以服务于多个用户的请求。所以,Servlet的初始化都要比上面提到的那几个要迟。
总的来说,Web容器加载web.xml的顺序是
ServletContext ---->
注:如果web.xml中出现了相同的元素,则按照在配置文件中出现的先后顺序来加载
新建一个web项目时,默认创建的web.xml文件如下
web.xml的学名叫做部署描述文件(DD),它不是Spring所特有的,而是在Servlet规范中定义的,是web应用的配置文件
Javaweb项目中并不是必须需要web.xml文件。它主要的作用:
配置欢迎页、servlet、filter、listener等以及定制servlet、JSP、Context初始化参数
部署描述文件就像所有XML文件一样,必须以一个XML头开始。这个头声明可以使用的XML版本并给出文件的字符编码
DOCYTPE声明必须立即出现在此头之后。这个声明告诉服务器适用的servlet规范的版本(如2.2或2.3)并指定管理此文件其余部分内容的语法的DTD(Document Type Definition,文档类型定义)
部署描述文件的顶层(根)元素为web-app
注:
XML元素不像HTML,他是大小写敏感的。因此,web-App和WEB-APP都是不合法的,web-app必须小写
1、web-app:表示根元素
2、PUBLIC:表示DTD文件可以被公开使用
3、-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN:表示DTD由Sun Microsystems, Inc.维护
该信息也表示它描述的文档类型是DTD Web Application 2.3,而且DTD是用英文书写的
4、URL"http://java.sun.com/dtd/web-app_2_3.dtd"表示DD文件的位置
DTD文件规定
该元素含23个子元素。而且子元素都是可选的。问号(?)表示子元素是可选的,而且只能出现一次
星号(*)表示子元素可在部署描述符中出现零次或多次。有些子元素还可以有它们自己的子元素
web.xml文件中
在Servlet2.3中,子元素必须按照DTD文件描述中指定的顺序出现。比如:如果部署描述符中的
指出IDE和GUI工具用来表示Web应用的大图标和小图标
/images/app_small.gif
/images/app_large.gif
Javaweb项目的相关应用名称
Tomcat Example
Tomcat Example servlets and JSP pages.
ContextParameter
test
It is a test parameter.
filter元素用来设定web应用的过滤器,它的两个主要子元素filter-name和filter-class用来定义Filter所对应的class
filter-mapping 元素的两个主要子元素filter-name和url-pattern 用来定义Filter所对应的URL.
setCharacterEncoding
com.myTest.setCharacterEncodingFilter
encoding
UTF-8
setCharacterEncoding
/*
listener元素用来定义Listener接口,它的主要子元素为
com.listener.SessionListener
Servlet通常称为服务端小程序,是服务端的程序,用于处理及响应客户的请求。Servlet是一个特殊的Java类,创建Servlet类自动继承HttpServlet。客户端通常只有GET和POST两种请求方式,Servlet为了响应这两种请求,必须重写doGet()和doPost()方法。大部分时候,Servlet对于所有的请求响应都是完全一样的,此时只需要重写service()方法即可响应客户端的所有请求。另外HttpServlet有两个方法:
init(ServletConfig config):创建Servlet实例时,调用该方法初始化Servlet资源。
destory():销毁Servlet实例时,自动调用该方法回收资源。
通常无需重写init()和destory()两个方法,除非需要在初始化Servlet时,完成某些资源初始化的方法,才考虑重写init()方法。如果重写了init()方法,应该在重写该方法的第一行调用super.init(config),该方法将调用HttpServlet的init()方法。如果需要在销毁Servlet之前,先完先完成某些资源的回收,比如关闭数据库链接,才需要重写destory()方法。
创建Servlet实例有两个时机:
客户端第一次请求某个Servlet时,系统创建该Servlet的实例,大部分Servlet都是这种Servlet;
web应用启动时立即创建Servlet实例,即
每个Servlet的运行都遵循如下生命周期:
(1)创建Servlet实例。
(2)Web容器调用Servlet的init()方法,对Servlet进行初始化。
(3)Servlet初始化之后,将一直存在与容器之中,用于响应客户端请求,如果客户端发送GET请求,容器调用Servlet的doGet()方法处理并响应请求;如果客户端发送POST请求,容器调用Servlet的doPost()方法处理并响应请求。或者统一使用service()方法处理来响应用户请求。
(4)Web容器决定销毁Servlet时,先调用Servlet的destory()方法,通常在关闭Web应用时销毁Servlet实例
snoop
SnoopServlet
snoop
/snoop
snoop
SnoopServlet
foo
bar
Security role for anonymous access
tomcat
snoop
/snoop
定义这个web站台所有session的有效期限,单位为分钟
120
mime-mapping包含两个子元素extension和mime-type;定义某一个扩展名和某一MIME Type做对映.
htm
text/html
welcome-file-list包含一个子元素welcome-file.用来定义首页列单
welcome-file用来指定首页文件名称.我们可以用
index.jsp
index.html
index.htm
error-page元素包含三个子元素error-code,exception-type和location.将错误代码(Error Code)或异常(Exception)的种类对应到web应用资源路径.
404
/NotFound.jsp
java.lang.NullException
/error.jsp
Taglib
/WEB-INF/tlds/MyTaglib.tld
Special property group for JSP Configuration JSP example.
JSPConfiguration
/jsp/*
true
GB2312
true
/include/prelude.jspf
/include/coda.jspf
参考链接
https://www.jb51.net/article/193081.htm
https://www.cnblogs.com/Im-Victor/p/9598154.html