对于一个完整的javaweb项目,都会配置web.xml文件,这里简单介绍一下该配置文件在javaWeb项目中的作用!
1.JavaWeb项目执行过程在Web.xml配置文件中的体现
当启动一个WEB项目时,容器包括(JBoss、Tomcat等)首先会读取项目web.xml配置文件里的配置,当这一步骤没有出错并且完成之后,项目才能正常地被启动起来。
(1)启动WEB项目的时候,容器首先会去读取web.xml配置文件中的两个节点: 和
(2)容器创建一个ServletContext(application)对象,这个web项目的所有部分都将共享这个上下文(由容器自动创建,代表当前web应用)
扩展:1.ServletContext:Servlet上下文,又名application,对于一个web项目来说,只有全局唯一的一个ServletContext对象
1.1.获取ServletContext对象有3种方式
1.1.1. 从ServletConfig对象获得:ServletConfig.getServletContext()
1.1.2.从当前Servlet对象获得:this.getServletContext()
1.1.3.从会话对象获取到,这是常用的方式:HttpServletRequest.getSession().getServletContext()
2.ServletContext的用途:
2.1.多个web组件之间使用它实现数据共享,获取全局配置文件的参数(对应上面三种方式):getInitParameter()
2.1.1.ServletConfig.getServletContext().getInitParameter()
2.1.2.this.getServletContext().getInitParameter()
2.1.3.HttpServletRequest.getSession().getServletContext().getInitParameter()
2.2.获取web项目的绝对路径 :getRealPath(" ")
2.2.1.ServletConfig.getServletContext().getRealPath(" ")
2.2.2.this.getServletContext().getRealPath("/ ")
2.2.3.HttpServletRequest.getSession().getServletContext().getRealPath("/upload ")
2.3..用于获取WebRoot文件夹下的文件(.JSP,.PNG,.html,.doc,)资源
2.3.1.ServletConfig.getServletContext().getResourceAsStream("index.jsp")
(3)容器以 的name作为键,value作为值,将其转化为键值对,存入ServletContext(代码中使用getInitParameter()可以直接获取参数值)
(4)容器创建 中的类实例,根据配置的class类路径来创建监听,在监听中会有初始化方法(已封装好了)
扩展:启动Web应用时,系统调用Listener的该方法 contextInitialized(ServletContextEvent args),在这个方法中获得:
ServletContext application =ServletContextEvent.getServletContext();
context-param的值= application.getInitParameter("context-param的键");
得到这个context-param的值之后,你就可以做一些操作了!
(5)容器会读取 ,根据指定的类路径来实例化过滤器
注意:以上都是在WEB项目还没有完全启动起来的时候就已经完成了的工作!
(6)如果系统中有Servlet,则Servlet是在第一次发起请求的时候被实例化的,而且一般不会被容器销毁,可以服务于多个用户的请求。Servlet的初始化都要比上面提到的那几个要迟
扩展:在web.xml配置文件中 一般配置系统中的Servlet和SpringMVC.xml文件
1.如果系统中有类继承了HttpServlet,那么需要在web.xml中的标签中进行配置
2.正常情况下springmvc的xml文件应放在WEB-INF下(系统默认的),命名规则为 [name]-servlet.xml “-servlet”这个字段是必不可少的 [name]你可以随便命名
3.如果springmvc.xml文件放在src文件夹下,需要手动配置xml的路径,在标签中添加如下参数:
contextConfigLocation
classpath: [name]-servlet.xml
3.1.如果在src下再新建一个文件夹叫做config的话, 这里就应该是:
classpath:config[name]-servlet.xml
3.2.这样就可以随意配置路径了
**注意:3.3.手动配置路径不仅仅局限于src目录下**
(7)web.xml的加载顺序是: -> -> -> ,如果web.xml中出现了相同的元素,则按照在配置文件中出现的先后顺序来加载
(8)拦截资源是按照元素出现的顺序来依次调用doFilter()方法的。同类似
2.Web.xml配置文件中的标签详解
1.
1.1定义该文档(部署描述符)的根元素 ,该元素含23个子元素如下所示:
icon?, display-name?, description?,distributable?, session- config?, welcome-file-list?,
context-param*, listener*, filter*, filter-mapping*,servlet*, servlet-mapping*,mime-mapping*,error-page*,
taglib*, resource-env-ref*, resource-ref*,security-constraint*, security-role*,env-entry*,ejb-ref*, ejb-local-ref*
1.2.问号(?)表示子元素是可选的,而且只能出现一次
1.3.星号(*)表示子元素可在部署描述符中出现零次或多次
1.4.有些子元素还可以有它们自己的子元素
1.5.常用的有8个:< display-name>,,,,,,,< servlet-mapping>
2.
定义了web应用的名称。
3.
告诉servlet/JSP容器,Web容器中部署的应用程序适合在分布式环境下运行
4.
4.1.含有一对参数名和参数值,用作应用的Servlet上下文初始化参数
4.2.参数名在整个Web应用中必须是惟一的,在web应用的整个生命周期中上下文初始化参数都存在,任意的Servlet和jsp都可以随时随地访问它
4.3.子元素包含有参数名,子元素包含的是参数值(作为选择,可用子元素来描述参数)
4.4.通过这种办法,可以让其他开发人员更容易找到相关的参数,它是一个用于设置这种全局参数的标准位置
4.5..如果在web.xml中不写配置信息,默认的路径是/WEB-INF/applicationontext.xml,在WEB-INF目录下创建的xml文件的名称必须是applicationContext.xml
4.6.如果是要自定义文件名可以在web.xml里加入contextConfigLocation这个context参数:在里指定相应的xml文件名
注意:如果配置文件的路径不在/WEB-INF文件夹下并且自定义配置文件名,那么文件路径必须在src文件夹下,文件名可以随意命名!
4.7.如果web.xml中有contextConfigLocation参数指定的Spring配置文件,则会去加载相应的配置文件,而不会去加载/WEB-INF/下的文件
4.8..没有指定的话,默认会去/WEB-INF/下加载applicationContext.xml,如果/WEB-INF/下没有,系统会报错
5.
5.1.配置Spring,必须需要,而可有可无
5.2.为web应用程序定义监听器,监听器用来监听各种事件
5.3.监听器Listener就是在application,session,request三个对象创建,销毁,或者往其中添加修改删除属性时自动执行代码的功能组件
5.4.Listener是Servlet的监听器,可以监听客户端的请求,服务端的操作等
5.5.配置Listener只要向Web应用注册Listener实现类即可,无序配置参数之类的东西
5.6.监听器后面会专门写一篇博客,这里不做详细说明(https://blog.csdn.net/qq591009234/article/details/91544766)!
6.
6.1.Filter可认为是Servle的一种“加强版”,主要用于对用户请求request进行预处理,也可以对Response进行后处理,是个典型的处理链
6.2.Filter对用户请求进行预处理,接着将请求HttpServletRequest交给Servlet进行处理并生成响应,最后Filter再对服务器响应HttpServletResponse进行后处理
6.3.Filter与Servlet具有完全相同的生命周期,且Filter也可以通过来配置初始化参数
6.4.获取Filter的初始化参数则使用FilterConfig的getInitParameter()
6.5.用于指定Web容器中的过滤器,可包含、、、、、
6.5.1.用来定义过滤器的名称,该名称在整个程序中都必须唯一
6.5.2.元素指定过滤器类的完全限定的名称,即Filter的实现类
6.5.3为Filter配置参数,与具有相同的元素描述符和
6.5.4.元素用来声明Web应用中的过滤器映射,过滤器被映射到一个servlet或一个URL 模式
6.5.5.和必须具有相同的,指定该Filter所拦截的URL
6.5.6..过滤器后面会专门写一篇博客,这里不做详细说明
7.
7.1.Servlet通常称为服务端小程序,是服务端的程序,用于处理及响应客户的请求
7.2.Servlet是个特殊的java类,继承于HttpServlet
7.3.为了让Servlet能响应用户请求,还必须将Servlet配置在web应用中,配置Servlet需要修改web.xml文件
7.4.配置Spring MVC,指定处理请求的Servlet
8.
用于设置容器的session参数
举例:用来指定默认的会话超时时间间隔,以分钟为单位。该元素值必须为整数。如果 session-timeout元素的值为零或负数,则表示会话将永远不会超时。
8.1.默认时间设置在30分钟
8.2. 120 :可以自定义设置失效时间,这里设置失效时间为120分钟
9.
9.1.包含一个子元素用来指定首页文件名称
扩展:在
标签中主要配置继承了HttpServlet的类和SpringMVC.xml
1.SpringMVC.xml主要通过DispatcherServlet
2.ContextLoaderListener和DispatcherServlet初始化上下文关系和区别:
2.1.ContextLoaderListener:初始化的上下文加载的Bean是对于整个应用程序共享的,一般如:DAO层、Service层Bean
2.2.DispatcherServle:初始化的上下文加载的Bean是只对Spring MVC有效的Bean,如:Controller、HandlerMapping、HandlerAdapter等,该初始化上下文只加载Web相关组件