web.xml加载顺序

2023-11-19

web.xml加载顺序

应用服务器启动时web.xml加载过程,至于这些节点在xml文件中的前后顺序没有关系,不过有些应用服务器,我曾碰到过的 websphere就严格要求web.xml的节点顺序,否则部署不成功,所以还是赞成按照web.xml标准格式写
content-param --> listener --> filter --> servlet

1、启动WEB项目的时候,应用服务器会去读它的配置文件web.xml.读两个节点:<listener></listener> 和 <context-param></context-param>

2、紧接着,容器创建一个ServletContext(上下文),这个WEB项目所有部分都将共享这个上下文.

3、容器将<context-param></context-param>转化为键值对,并交给ServletContext.

4、容器创建<listener></listener>中的类实例,即创建监听.

5、在监听中会有contextInitialized(ServletContextEvent args)初始化方法,在这个方法中获得:
ServletContext = ServletContextEvent.getServletContext();
context-param的值 = ServletContext.getInitParameter("context-param的键");

6、得到这个context-param的值之后,你就可以做一些操作了.注意,这个时候你的WEB项目还没有完全启动完成.这个动作会比所有的Servlet都要早.换句话说,这个时候,你对<context-param>中的键值做的操作,将在你的WEB项目完全启动之前被执行.如果想在项目启动之前就打开数据库,那么这里就可以在<context-param>中设置数据库的连接方式,在监听类中初始化数据库的连接,这个监听是自己写的一个类,除了初始化方法,它还有销毁方法.用于关闭应用前释放资源.比如说数据库连接的关闭.


对于某类配置节而言,与它们出现的顺序是有关的。
以 filter 为例,web.xml 中当然可以定义多个 filter,与 filter 相关的一个配置节是 filter-mapping,这里一定要注意,对于拥有相同 filter-name 的 filter 和 filter-mapping 配置节而言,filter-mapping 必须出现在 filter 之后,否则当解析到 filter-mapping 时,它所对应的 filter-name 还未定义。
web 容器启动时初始化每个 filter 时,是按照 filter 配置节出现的顺序来初始化的,当请求资源匹配多个 filter-mapping 时,filter 拦截资源是按照 filter-mapping 配置节出现的顺序来依次调用 doFilter() 方法的。
servlet 同 filter 类似,此处不再赘述。

比如filter 需要用到 bean ,但加载顺序是: 先加载filter 后加载spring,则filter中初始化操作中的bean为null;所以,如果过滤器中要使用到 bean,可以将spring 的加载 改成 Listener的方式
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>



web.xml节点解析

根节点
1、 <web-app></web-app>


常用节点介绍
2、 <context-param /> 用来设定web站台的环境参数
它包含两个子元素:
<param-name></param-name> 用来指定参数的名称
<param-value></param-value> 用来设定参数值
在此设定的参数,可以在servlet中用 getServletContext().getInitParameter("my_param") 来取得
例子:
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>classpath*:/log4j.properties</param-value>
</context-param>

3、 <listener /> 用来设定Listener接口
它的主要子元素为
<listener-class></listener-class> 定义Listener的类名称
例子:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

4、 <filter /> 是用来声明filter的相关设定
<filter-name></filter-name> 这当然就是指定filter的名字
<filter-class></filter-class> 这是用来定义filter的类的名称
<init-param></init-param> 用来定义参数,它有两个子元素:
<param-name></param-name> 用来指定参数的名称
<param-value></param-value> 用来设定参数值
例子:
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>

5、 <servlet /> 用来声明一个servlet的数据,主要有以下子元素:
<servlet-name></servlet-name> 指定servlet的名称
<servlet-class></servlet-class> 指定servlet的类名称
<jsp-file></jsp-file> 指定web站台中的某个JSP网页的完整路径
<init-param></init-param> 用来定义参数,和前面的<init-param>差不多
同样,与<servlet></servlet>一起使用的是
<servlet-mapping></servlet-mapping> 用来定义servlet所对应的URL,包含两个子元素:
<servlet-name></servlet-name> 指定servlet的名称
<url-pattern></url-pattern> 指定servlet所对应的URL
<servlet>
<servlet-name>DemoServlet</servlet-name>
<servlet-class>com.test.DemoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DemoServlet</servlet-name>
<url-pattern>/demoServlet</url-pattern>
</servlet-mapping>


基本节点:

6、 <description/> 是对站台的描述
例子:<description>传道、授业、解惑</description>

7、 <display-name/> 定义站台的名称
例子:<display-name>我的站点</display-name>

8、 <icon>
icon元素包含small-icon和large-icon两个子元素.用来指定web站台中小图标和大图标的路径.
<small-icon>/路径/smallicon.gif</small-icon>
small-icon元素应指向web站台中某个小图标的路径,大小为16 X 16 pixel,但是图象文件必须为GIF或JPEG格式,扩展名必须为:.gif或.jpg.
<large-icon>/路径/largeicon-jpg</large-icon>
large-icon元素应指向web站台中某个大图表路径,大小为32 X 32 pixel,但是图象文件必须为GIF或JPEG的格式,扩展名必须为; gif或jpg.
例子:
<icon>
<small-icon>/images/small.gif</small-icon>
<large-icon>/images/large.gir</large-icon>
</icon>

9、 <distributable/> 是指定该站台是否可分布式处理

10、 <session-config/> 用来定义web站台中的session参数
包含一个子元素:
<session-timeout></session-timeout> 用来定义这个web站台所有session的有效期限,单位为 分钟


11、 <mime-mapping /> 定义某一个扩展名和某一个MIME Type做对应该
包含两个子元素:
<extension></extension> 扩展名的名称
<mime-type></mime-type> MIME格式
例子:
<mime-mapping>
<extension>doc</extension>
<mime-type>application/vnd.ms-word</mime-type>
</mime-mapping>
<mime-mapping>
<extension>xls</extension>
<mime-type>application/vnd.ms-excel</mime-type>
</mime-mapping>


12、 <error-page>
<error-page>
<error-code>500</error-code>
<location>/message.jsp</location>
</error-page>
<error-page>
<error-code>400</error-code>
<location>/message.jsp</location>
</error-page>
<error-page>
<error-code>403</error-code>
<location>/message.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/message.jsp</location>
</error-page>
<error-page>
<error-code>502</error-code>
<location>/index.jsp</location>
</error-page>

13、 <jsp-config/>
<jsp-config>
<taglib>
<taglib-uri>/struts-tags</taglib-uri>
<taglib-location>/WEB-INF/struts-tags.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/struts-dojo-tags</taglib-uri>
<taglib-location>/WEB-INF/struts-dojo-tags.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>/s</taglib-uri>
<taglib-location>/WEB-INF/struts-tags.tld</taglib-location>
</taglib>
</jsp-config>

14、 <welcome-file-list/>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

15、 <resource-ref></resource-ref> 定义利用JNDI取得站台可利用的资源
有五个子元素:
<description></description> 资源说明
<rec-ref-name></rec-ref-name> 资源名称
<res-type></res-type> 资源种类
<res-auth></res-auth> 资源经由Application或Container来许可
<res-sharing-scope></res-sharing-scope> 资源是否可以共享,有Shareable和Unshareable两个值,默认为Shareable

比如,配置数据库连接池就可在此配置
<resource-ref>
<description>JNDI JDBC DataSource of shop</description>
<res-ref-name>jdbc/sample_db</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

还有其他元素如果想更为详细的了解它可以到http://java.sun.com/xml/ns/j2ee/web-mapp_2_4.xsd网页
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

web.xml加载顺序 的相关文章

随机推荐

  • MySQL基础篇【第一篇】 数据库概述及数据准备、常用命令、查看表结构步骤

    作者简介 大家好我是 每天都要敲代码 一位材料转码农的选手 希望一起努力 一起进步 个人主页 每天都要敲代码的个人主页 系列专栏 MySQL专栏 推荐一款模拟面试 刷题神器 从基础到大厂面试题 点击跳转刷题网站进行注册学习 目录 一 数据库
  • Java课题笔记~ SpringBoot基础配置

    二 基础配置 1 配置文件格式 问题导入 框架常见的配置文件有哪几种形式 1 1 修改服务器端口 http localhost 8080 books 1 gt gt gt http localhost books 1 SpringBoot提
  • ELM:ELM基于近红外光谱的汽油测试集辛烷值含量预测结果对比—Jason niu

    ELM ELM基于近红外光谱的汽油测试集辛烷值含量预测结果对比 Jason niu load spectra data mat temp randperm size NIR 1 P train NIR temp 1 50 T train o
  • IDEA插件-CheckStyle的安装与使用

    目录 一 安装CheckStyle 二 配置CheckStyle 三 使用CheckStyle 一 安装CheckStyle 1 依次访问IDEA gt gt File gt gt Settings gt gt Plugins gt gt
  • 轻松在Firefox中禁用JavaScript

    Want a quick and easy way to toggle JavaScript on and off in Firefox Then you will definitely want to take a good look a
  • 【Linux中高级运维:云计算】第1章:云计算简介+kvm虚拟机安装+日常操作和管理+快照管理

    1 什么是云计算 云计算是一种按量付费的模式 云计算的底层是通过虚拟化技术来实现的 2 云计算的服务类型 2 1IAAS 基础设施即服务 虚拟机 ecs openstack 2 2PAAS 平台即服务 php java docker容器 2
  • 浏览器主页被篡改360篡改浏览器主页,官方四步最完美解决办法

    以前写过一篇浏览器主页被360篡改成他们的主页的文章 那时真的就是气的直接卸载了360 之后通过修改注册表的方式 将主页修改回来 方法很暴力 由于重做了系统 360又被重新安装了回来 结果和以往一样 我的主页还是被强制修改了 但是这次我冷静
  • 3.1-并发控制:互斥

    复习 状态机 状态机 状态机 本次课回答的问题 Q 如何在多处理器上实现线程互斥 本次课主要内容 自旋锁的实现 互斥锁的实现 一 共享内存上的互斥 在共享内存上实现互斥 失败的尝试 mutex bad py 部分 成功的尝试 peterso
  • 3dmax 保存慢 卡死

    解决3DMAX保存慢的方法 方法一 在MAX环境中 按F11会弹出一个编辑框 然后输入 t trackviewnodes n t Max MotionClip Manager deleteTrackViewController t n co
  • 基于tensorflow2.0+使用bert获取中文词、句向量并进行相似度分析

    本文基于transformers库 调用bert模型 对中文 英文的稠密向量进行探究 开始之前还是要说下废话 主要是想吐槽下 为啥写这个东西呢 因为我找了很多文章要么不是不清晰 要么就是基于pytorch 所以特地写了这篇基于tensorf
  • 请求后端返回的验证码显示的情况

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 一 情况一 数据是图片文件流 二 情况二 直接返回是图片 情况三 uni小程序的登录验证 最后 前言 在实际的项目中验证码登录几乎是每个开发人员的必备操作技能
  • [工具环境] pip&git lfs下载命令

    关键词 pip git lfs pip从git下载指定的提交版本 伴随着大模型的火热发展 PEFT和transformers也是更新频繁 常会看到requirements中安装的软件包来自github中的某个commit hash 比如re
  • 应用编排与管理:核心原理

    本节课程要点 K8s 资源的重要元信息 使用阿里云服务演示一下如何去修改或查看 K8s 重要元数据 详细分析控制器模式 总结控制器模式特点 资源元信息 1 Kubernetes 资源对象 首先 我们来回顾一下 Kubernetes 的资源对
  • g2o的基本使用

    参考 https www jianshu com p e16ffb5b265d 参考 https zhuanlan zhihu com p 36889150 图是一种数据结构 在图优化中 用顶点 vertex 表示优化变量 用边 edge
  • Smali--Dalvik虚拟机指令语言-->【android_smali语法学习一】

    最近一周在研究rom移植 所以就对Smali语言学习了一下 Smali语言其实就是Davlik的寄存器语言 Smali语言就是android的应用程序 apk通过apktool反编译出来的都有一个smali文件夹 里面都是以 smali结尾
  • 基于当前系统制作docker镜像

    1 通过tar 备份目录 tar cvpf home buildrpm tar directory exclude proc exclude sys exclude dev exclude run root localhost home l
  • 不能安装64位office提示已安装32位的

    问题描述 安装64位office办公软件的时候提示已经安装32位的office办公软件所以无法继续安装 但实际上之前安装的32位的office办公软件已经卸载了 问题现象截图如下 解决办法 从问题描述中 我们其实已经能够看出问题原因了 类似
  • React的超详细讲解

    React React的重点 webpack webpack 是一个现代 JavaScript 应用程序的静态模块打包器 module bundler 当 webpack 处理应用程序时 它会递归地构建一个依赖关系图 dependency
  • 虚幻引擎程序化资源生成框架PCG 之 UPCGBlueprintElement源码笔记(一)

    UPCGBlueprintElement是PCGGraph中自定义节点的基类 但官方目前还没有给出详细的文档 所以从源代码里找点答案 文章目录 可覆盖函数 Override Functions Excute 和 Excute with Co
  • web.xml加载顺序

    web xml加载顺序 应用服务器启动时web xml加载过程 至于这些节点在xml文件中的前后顺序没有关系 不过有些应用服务器 我曾碰到过的 websphere就严格要求web xml的节点顺序 否则部署不成功 所以还是赞成按照web x