做web后端工程师,逃不过的web.xml,我们都知道配置这个文件是日常工作了,那么我们来把一些必须知道知识点梳理下。

我们把web项目启动的时候,首先加载的就是web.xml这个文件,只有这个文件所有的配置信息没错之后,web项目才算真正地跑起来。

那么我们一起打开web.xml的配置信息的大门吧。

首先,我们需要肯定一个整体的信息的就是,无论的web.xml里面的配置信息顺序是怎么样,我们的执行顺序是不会按照你写在文件中的配置顺序执行的,web.xml有自己的执行顺序

初始化过程:

  1. 在启动Web项目时,容器(比如Tomcat)会读web.xml配置文件中的两个节点<listener>和<contex-param>。
  2. 接着容器会创建一个ServletContext(上下文),应用范围内即整个WEB项目都能使用这个上下文。
  3. 接着容器会将读取到<context-param>转化为键值对,并交给ServletContext。
  4. 容器创建<listener></listener>中的类实例,即创建监听(备注:listener定义的类可以是自定义的类但必须需要继承ServletContextListener)。
  5. 在监听的类中会有一个contextInitialized(ServletContextEvent event)初始化方法,在这个方法中可以通过event.getServletContext().getInitParameter("contextConfigLocation") 来得到context-param 设定的值。在这个类中还必须有一个contextDestroyed(ServletContextEvent event) 销毁方法.用于关闭应用前释放资源,比如说数据库连接的关闭。
  6. 得到这个context-param的值之后,你就可以做一些操作了.注意,这个时候你的WEB项目还没有完全启动完成.这个动作会比所有的Servlet都要早。

而同个类型下的执行顺序是根据对应的mapping的信息执行的

依照xml的执行顺序,我们来依次了解一下各个执行顺序的标签是什么意思

值得我们注意的是,web项目在启动的时候,容器(Tomcat)会创建一个域对象ServletContext,我们先简单介绍一下

ServletContext

这个官方的解释是servlet上下文,启动的时候,服务器会给每一个工程创建一个对象,这个对象就是ServletContext对象,且这个对象是全局唯一。而且整个工程内的servlet都共享这个对象。

首先我们先记住,ServletContext是一个域对象,不要急,这就给你介绍一下域对象

通过上图,相信你可以明白域对象是在这次充当什么角色的

那么究竟域对象究竟是什么呢

域对象是服务器在内存上创建的存储空间,用于不同动态资源(servlet)之间传递与共享数据

凡是域对象都有以下的三个方法

SetAttribute(name,value)

往域对象里面添加数据,添加时以key-value形式添加

GetAttribute(name);

根据指定的key读取域对象里面的数据

RemoveAttribute(name)

根据指定的key从域对象里面删除数据

相信看到这里,不少打过代码的童鞋已经了解到了域对象究竟是啥东西了,SetAttribute这些方法,我们在往域对象传数据的时候,是经常使用的。

那么接下来我们就可以来了解一下

context-param 

作用:该元素用来声明应用范围(整个WEB项目)内的上下文初始化参数。

在里面有param-name跟param-value

param-name 设定上下文的参数名称。必须是唯一名称

param-value 设定的参数名称的值

把这个信息读取完成之后,我们是转化为键值对的,交给了ServletContext

按照顺序,我们接下来需要了解的是Listener

 

Listener翻译过来就是监听器,顾名思义就是用来监听我们web活动的,这个很好理解,servlet一共提供了八个监听器

三个域对象的创建和销毁监听器

对象类型

对应的监听器

ServletContext

ServletContextListener

HttpSession

HttpSessionListener

HttpServletRequest

HttpServletRequestListener

监听三个对象的属性变更的监听器(属性添加,属性移除,属性替换

对象类型

对应的监听器

ServletContext

ServletContextAttributeListener

HttpServletRequest

ServletRequestAttributeListener

HttpSession

HttpSessionAttributeListener

监听HttpSession对象中的JavaBean的状态的改变(绑定,解除绑定,钝化和活化)

对象类型

对应的监听器

HttpSession

HttpSessionBindingListener(绑定,解除绑定)

HttpSession

HttpSessionActivationListener(钝化和活化)

那么关于监听的介绍就到这里,深入的内容我会写另外一篇博客给大家深入介绍

接下来是关于filter也就是过滤器,过滤器顾名思义就是用来过滤一些需要的信息

filter

过滤器实际上就是对web提交过来的数据,对服务器处理的信息,进行再交付给对方。你可以理解为一个中间加工处理的地方。

通常都是用来拦截request,和response进行拦截过滤处理

通过上图,我们可以更直观地了解到过滤器的工作角色,值得我们注意的是,过滤器可能会有多个,经过过滤器一过滤完之后,还需要通过滤器二进行过滤处理,因为每个过滤器都有自己特定的过滤功能

关于多个过滤器的执行顺序,我们请求到达Servlet之间是可以经过多个过滤器的,这些过滤器的执行顺序是依赖于<filter-mapping>里面配置的顺序。

servlet 

servlet全称Java Servlet,是用Java编写的服务端程序,其主要功能在于交互式地浏览和修改数据,生成动态Web内容。

在web.xml这里主要是将你所写的servlet对应的类配置到当中去,具体的servlet的详解可以看我关于servlet详解的文章

一文懂SSM项目中的web.xml常用配置项的更多相关文章

  1. 转 web项目中的web.xml元素解析

    转 web项目中的web.xml元素解析 发表于1年前(2014-11-26 15:45)   阅读(497) | 评论(0) 16人收藏此文章, 我要收藏 赞0 上海源创会5月15日与你相约[玫瑰里 ...

  2. SSM搭配中的web.xml的配置信息

    最近一段时间在自己学着搭建SSM框架的项目,其实这个项目自由自己不断尝试,不断失败,才能印象更深刻. 下面就说一下在项目中的web.xml的相关配置信息: <?xml version=" ...

  3. tomcat下的web.xml和项目中的web.xml

    Tomcat 服务器中存在一个web.xml文件 在项目文件夹中同样存在一个web.xml文件 那这两个文件有什么区别呢? tomcat中的web.xml是通用的,如果不设置,那么就会默认是同tomc ...

  4. 分析helo1项目中的 Web.xml

    web.xml文件位于hello1 中target/WEB-INF/classes/javaeetutorial目录下. 这个web.xml文件包含Facelets应用程序所需的几个元素: 其中(1) ...

  5. java web项目中的web.xml标签之context-param

    WEB项目初始化过程: 在启动Web项目时,容器(比如Tomcat)会读web.xml配置文件中的两个节点<listener>和<contex-param>. 接着容器会创建一 ...

  6. 当你的SSM项目中的springmvc.xml发生第一行错误解决方案

    当你新建了一个SSM项目,你复制网上的xml文件来配置或者你下载了一个SSM项目打开发现xml文件错误,打开是第一行报错的时候你是不是很懵逼 或者是这样 总之就是xml文件中<?xml vers ...

  7. eclipse : java项目中的web.xml( Deployment Descriptor 部署描述文件 )配置说明

    context-param.listener.filter.servlet  首先可以肯定的是,加载顺序与它们在 web.xml 配置文件中的先后顺序无关.即不会因为 filter 写在 listen ...

  8. 在eclipse中创建Web项目中没有web.xml的解决方法

      右键点击项目 → “Java EE Tool” → “Generate Deployment descriptor stub” 即可生成web.xml文件

  9. 在eclipse动态网页项目中,编写web.xml时,servlet标签报错.

    cvc-complex-type.2.4.b: The content of element 'servlet' is not complete. One of '{"http:// jav ...

随机推荐

  1. VS中关于数据库的操作

    1.数据库迁移 第一步: 第二步: 在窗口中选择项目中的EntitiyFramwork项目(与数据库连接的文件集) 第三步: 输入update-database 二:数据对比 第一步: 第二步:选择需 ...

  2. defender 月考总结

    今天是2019年5月28日,昨天月考了,也是C**生日.昨天考完之后,还是那种考完试的释然感.目前,已经批出来了数学.英语.物理三门学科的成绩,语文还没有批出来.应该明天就能够批出来吧.现在趁着休息, ...

  3. java读取解析application.yml

    java读取解析application.yml 不用依赖spring容器,可单独使用. bug已修改... 第一步.首先要2个jar <!-- properties和yaml格式化 --> ...

  4. 0005 uwsgi配置

    在配置文件目录Configurations下创建一个名为uwsgi.ini的文件,用于uwsgi服务配置. uwsgi在服务器上使用,接收nginx的转发请求. 内容如下: # 配置文件:这一行必须有 ...

  5. 针对wordpress CMS的信息收集

    如果发现一个站点用的是wordpress管理系统的话, 可以试试默认的后台地址:/wp-admin/ 访问后自动跳转置 后台登录界面 用户名收集 :/?author=1 依次访问/author=1 , ...

  6. 《深入理解java虚拟机》读书笔记九——第十章

    第十章 早期(编译期)优化 1.Javac的源码与调试 编译期的分类: 前端编译期:把*.java文件转换为*.class文件的过程.例如sun的javac.eclipseJDT中的增量编译器. JI ...

  7. 类的成员和属性_python

    一.字段和方法分类 方法分类: 二.属性(将方法伪装成字段) 三种伪装方式:@property  @perr.setter @perr.deleter 属性使用的场景:分页 三.公有成员和私有成员 私 ...

  8. cmd 下sql语句及结果

    Microsoft Windows [版本 10.0.14393](c) 2016 Microsoft Corporation.保留所有权利. C:\Users\李长青>mysql -uroot ...

  9. ++i、i++、+=、-=的区别

    要分清这个区别,先要掌握赋值的顺序,赋值语句是从右往左执行的, 计算的顺序从左至右. 那么++i第一步是把自身i+1后才赋值给自身,即先加后赋值. i++第一步是先把自身赋值给自身,即先赋值后再加减. ...

  10. jenkins pipline 如何禁止任务并行

    背景: 我测试的一个项目CI包括好几个步骤,但是有的步骤是不能并行的,否则会互相影响 处理过程: [方案一]:不推荐此方案 在每个步骤里面的shell脚本中加进程判断 示例:比如本任务有4个步骤,第2 ...