JavaWeb学习——web.xml文件说明
JavaWeb学习——web.xml文件说明
摘要:本文主要学习了web.xml文件的作用以及如果配置。
是什么
web.xml文件是用来在JavaWeb项目里面初始化配置信息的,比如:访问的首页、Servlet信息、Filter信息、Listener信息、启动信息等。
如果项目用到了Servlet、Filter、Listener等组件,就需要配置web.xml,如果没有用到,也可以不需要web.xml。
标签说明
文档有效性检查
一般是xml文件的声明,定义了xml文件的版本和编码格式,指明xml文件遵循的约束,指明xsd文件的位置,xsd文件定义了xml可用使用的标签元素。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
...
</web-app>
项目图标
定义表示项目的大图标和小图标,可以没有。
<icon>
<small-icon>/images/app_small.gif</small-icon>
<large-icon>/images/app_large.gif</large-icon>
</icon>
项目名称
定义项目的名称,可以没有。
<display-name>HelloWorld</display-name>
欢迎页面
定义项目的欢迎页面,按照从上到下的优先级顺序,若没有配置将默认使用index.html作为欢迎页,若所有页面都不存在,将会提示“The requested resource (/XXX) is not available”。
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
错误页面
通过错误码指定错误处理页面。
<error-page>
<error-code>404</error-code>
<location>/error404.jsp</location>
</error-page>
通过异常类型指定错误处理页面。
<error-page>
<exception-type>java.lang.Exception<exception-type>
<location>/exception.jsp<location>
</error-page>
上下文参数
设置当前应用的初始化参数。
在Jsp页面中可以使用 ${initParam.param_name} 获取,在Servlet程序里可以使用 this.getServletConfig().getServletContext().getInitParameter(param_name); 获取。
<context-param>
<param-name>param_name</param-name>
<param-value>param_value</param-value>
</context-param>
会话参数
设置项目的session参数, session-timeout 元素用来指定会话超时时间,以分钟为单位,该元素值必须为整数,如果值为零或负数,则表示会话将永远不会超时。
<session-config>
<session-timeout>120</session-timeout>
</session-config>
Servlet
设置项目的Servlet。
可以使用 init-param 将初始化参数名和参数值传递给Servlet,访问Servlet配置参数可以通过 this.getServletConfig().getInitParameter(param_name); 获取。
ServletConfig获取配置参数的方法和ServletContext获取配置参数的方法完全一样,只是ServletConfig是取得当前Servlet的配置参数,而ServletContext是获取整个Web应用的配置参数。
使用 load-on-startup 元素可以控制容器在启动时是否要初始化Servlet,取值必须是整数。如果值大于或者等于0,表示在启动时间就加载并初始化Servlet,元素的值越小,启动的优先级越高。如果值为负数,则表示在用到的时候才去加载和初始化。
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>com.TestServlet</servlet-class>
<init-param>
<param-name>publishContext</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/TestServlet</url-pattern>
</servlet-mapping>
Filter
设置项目的Filter。
在 filter-mapping 元素里可以使用 url-pattern 或者 servlet-name 两种方式指定要过滤的访问路径,这两种方式使用一个即可。
版本规范在部署描述符中新增了 dispatcher 元素,这个元素有四个可能的取值,这四种方式可以组合使用,配置多个元素即可。需要注意的是, dispatcher 元素必须写在 filter-mapping 元素的最后。
四种可能的取值如下:
1)REQUEST:只要发起的操作是一次HTTP请求,比如请求某个URL、发起了一个GET请求或者POST请求。一次重定向则前后相当于发起了两次请求,这些情况下有几次请求就会走几次指定过滤器。
2)FOWARD:只有在当前页面是通过请求转发过来的情况下,才会走指定的过滤器。
3)INCLUDE:只要是通过 <jsp:include page="xxx.jsp" /> ,嵌入进来的页面,每嵌入的一个页面,都会走指定的过滤器。
4)ERROR:假如配置了 error-page 元素,并且触发了配置里的状态码,就会走指定的过滤器。需要注意的是,虽然把请求转发到error.jsp是一次转发的过程,但并不会走FORWARD指定的过滤器。
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
<servlet-name>TestServlet</servlet-name>
<dispatcher>INCLUDE</dispatcher>
</filter-mapping>
Listener
设置项目的Listener。
配置Listener只需要使用元素 listener-class 指定Listener的实现类即可。
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
路径的通配符匹配
配置方式
1)精确匹配
在 url-pattern 元素中配置的项必须与URL完全精确匹配。
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/test/show.html</url-pattern>
<url-pattern>/index.html</url-pattern>
<url-pattern>/demo</url-pattern>
</servlet-mapping>
2)路径匹配
在 url-pattern 元素中配置的项只匹配了一部分URL。
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/test/*</url-pattern>
</servlet-mapping>
3)扩展匹配
在 url-pattern 元素中配置的项只匹配了URL的扩展名。
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
优先顺序
当一个URL与多个Servlet的匹配规则可以匹配时,则按照“精确路径 > 最长路径 > 扩展名”这样的优先级匹配到对应的Servlet。
注意:不要既有路径匹配,又有扩展匹配,这样做会导致容器无法去判断匹配哪个,例如: <url-pattern>/*.action</url-pattern> 就是错误的写法。
/和/*的区别
/:会匹配到/login这样的路径型URL,不会匹配到*.jsp这样的后缀型URL。
/*:会匹配所有URL,包括路径型的和后缀型的。
文件加载过程
当启动一个Web项目容器时,首先会去读取web.xml配置文件里的配置,当这一步骤没有出错并且完成之后,项目才能正常的被启动起来。
启动Web项目的时候,容器首先会去读取web.xml配置文件中的两个元素: listener 和 context-param 。
紧接着,容器创建一个ServletContext,这个Web项目的所有部分都将共享这个上下文。容器以 context-param 元素的 name 作为键,以 value 作为值,将其转化为键值对,存入ServletContext。
容器创建 listener 元素中的类实例,根据 listener-class 元素里配置的class类路径来创建监听,在监听中会有初始化方法。
接着,容器会读取 filter 元素的内容,根据指定的类路径来实例化过滤器。
以上都是在WEB项目还没有完全启动起来的时候就已经完成了的工作。如果系统中有Servlet,则Servlet是在第一次发起请求的时候被实例化的,而且一般不会被容器销毁,它可以服务于多个用户的请求。所以,Servlet的初始化都要比上面提到的那几个要迟。
总的来说,web.xml的加载顺序是: context-param -> listener -> filter -> servlet 。
其中,如果web.xml中出现了相同的元素,则按照在配置文件中出现的先后顺序来加载。
JavaWeb学习——web.xml文件说明的更多相关文章
- javaweb web.xml文件详解
web.xml文件详解 前言:一般的web工程中都会用到web.xml,web.xml主要用来配置,可以方便的开发web工程.web.xml主要用来配置Filter.Listener.Servlet等 ...
- spring mvc学习笔记(一)web.xml文件配置的一点重要信息
通过这个web.xml文件可以看出,所有的*.shtml的请求,都会被springmvc这个servlet处理.这里如果没有指定contextConfigLocation这个参数,将会按照默认规则在c ...
- JavaWeb学习总结,文件上传和下载
在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...
- web.xml文件配置说明
web.xml作用: web.xml主要用来配置Filter.Listener.Servlet等,当我们去启动一个WEB项目时,容器(jetty.tomcat等)首先会读取项目web.xml配置文件里 ...
- Java Web中web.xml文件简单介绍
参考博客: https://www.cnblogs.com/Y-oung/p/8401549.html 1.XML 声明和根元素 <?xml version="1.0" en ...
- Web应用和web.xml文件
1.构建Web应用 手动构建一个Web应用: 在任意的目录小创建一个文件夹,例如webDemo 在第一步创建的文件夹中创建一个WEB-INF文件夹(注意大写); 随意找到一个Web应用,将其中的web ...
- 深入刨析tomcat 之---第11篇 how tomcat works( 第15章 ) 如何解析web.xml 文件
writedby 张艳涛 记得当年是学习jsp的时候,写过web.xml中的标签.在之后的springmvc中也是有关于配置mvc 过滤器 和dispatchServlet的标签,之前是看不懂呢!看到 ...
- web.xml文件加载顺序
1.启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取<listener>和<context-param>两个结点. 2.紧急着,容创建一个Servl ...
- Java Web的web.xml文件作用及基本配置(转)
其实web.xml就是asp.net的web.config一个道理. 说明: 一个web中完全可以没有web.xml文件,也就是说,web.xml文件并不是web工程必须的. web.xml文件是用来 ...
随机推荐
- alloc 和 init都做了什么验证。
结论: alloc负责分配内存和创建对象对应的isa指针: init只是返回alloc生成的对象. 所以alloc后,多次调用init,返回的对象是同一个! 代码如下: // // main.m / ...
- 带着canvas去流浪系列之六 绘制雷达图
[摘要] 用canvas原生API实现百度Echarts基本图表. 示例代码托管在:http://www.github.com/dashnowords/blogs 一. 任务说明 使用原生canvas ...
- 详细nginx配置SSL
1.nginx的ssl 让nginx实现用https来访问网站,http是80端口,https是443端口. https其实就是一种加密的http 2.为什么要加密 例子:在网上银行汇款,在你汇款的过 ...
- 洛谷 题解 P1842 【奶牛玩杂技】
本蒟蒻又双叒叕被爆踩辣! Solution: 我们先看数据,50000,那么O(n)或者O(n log(n))是可以过的,非严格O(n * sqrt(n))要卡卡常,说不定也可以过. 那么什么算法可以 ...
- SpringBoot-自动配置原理(七)
自动配置原理 本节内容分为三个部分 配置文件的写法 分析自动配置原理 @Conditional 一. 配置文件的写法 配置文件可以写什么? 是与/META-INF/spring.factories配置 ...
- 用C语言开发的19个经典项目,你会第几个?
前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:实验楼 C语言是我们大多数人的编程入门语言,对其也再熟悉不过了,不过很多 ...
- cs5642-v3各配置文件测试图片对比
寄存器功能强大,可以配置很多参数,每个参数出来的图像都不同 我们以cs5642-v3的两个配置进行了对比测试 测试准备 配置文件:ov5642_960p_RAW和OV5642_YUV_VGA 测试摄像 ...
- springboot使用api操作HBase之shell
HBase的基本读写流程写入流程读取流程HBase的模块与协作HBase启动RegionServer失效HMaster失效HBase常用的Shell命令进入shellhelp命令查询服务器状态查看所有 ...
- 详解 TCP 超时与重传机制——长文预警
上一篇介绍 TCP 的文章「TCP 三次握手,四次挥手和一些细节」反馈还不错,还是蛮开心的,这次接着讲一讲关于超时和重传那一部分. 我们都知道 TCP 协议具有重传机制,也就是说,如果发送方认为发生了 ...
- c#截取后台窗口的图片
c#截取后台窗口的图片,自测可用,据说性能很一般,用用吧 struct RECT { public int Left; // x position of upper-left corner publi ...