java技术--Web.xml配置文件详解

对于一个完整的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相关组件

你可能感兴趣的:(java技术--Web.xml配置文件详解)