什么是web.xml

web.xml是web项目的配置文件,一般的web工程都会用到web.xml来配置,方便大型开发。web.xml主要用来配置Filter,Listener,Servlet等。但是web.xml并不是必须的,一个web工程可以没有web.xml文件。

web工程加载web.xml过程

web容器的加载顺序ServletContext -> context-param -> listener -> filter -> servlet。并且这些元素可以配置在文件中的任意位置,不会因为filter在web.xml文件中写在listener前面就先加载filter。
加载过程顺序如下

启动一个web项目,web容器会读取它的配置文件web.xml,读取<listener>和<context-param>两个结点。
创建一个ServletContext(Servlet上下文),这个web项目的所有部分都将共享这个上下文
容器将<context-param>转换为键值对,并交给ServletContext
容器创建<listener>中的类实例,创建监听器

web.xml配置详解

1、schema
web.xml的模式文件是由Sun公司定义的,每个web.xml文件的根元素<web-app>中,都必须标明这个web.xml使用的是哪个模式文件。其他的元素都放在<web-app></web-app>中

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
</web-app>

2、<display-name>Web应用名称

用于标记这个特定的Web应用的名称

<display-name>Tomcat Example</display-name>

3、<discription>Web应用描述

<disciption>Tomcat Example servlets and JSP pages.</disciption>

4、<context-param>上下文参数

声明应用范围内的初始化参数。用于向Servlet+Context提供键值对,即应用程序上下文信息。后续的listener,filter在初始化时会用到这些上下文信息。在servlet里面可以通过getServletContext().getInitParameter(“context/param”)得到

 <context-param><param-name>log4jConfiguration</param-name><param-value>/WEB-INF/log4j2.xml</param-value></context-param>

5、<filter>过滤器
filter可以认为是servlet的一种加强版,主要用于对用户请求request进行预处理,也可以对response进行后处理,是个典型的处理链。使用filter的完整流程是,filter对用户请求进行预处理,接着将请求HttpServletRequest交给Servlet处理并生成响应。最后Filter再对服务器响应HttpServletResponse进行后处理。Servlet与Servlet具有完全相同的生命周期,而Filter也可以通过进行初始化参数的配置,并通过FilterConfig传送给filter
Filter的配置就是将此项目与一个实现javax.servlet.Filter接口的类相关联

<filter><filter-name>setCharacterEncoding</filter-name><filter-class>com.myTest.setCharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param>
</filter>
<filter-mapping><filter-name>setCharacterEncoding</filter-name><url-pattern>/*</url-pattern>
</filter-mapping>

6、监听器

<listener> <listerner-class>com.listener.SessionListener</listener-class>
</listener>

7、<servlet>

servlet老生常谈啦,是运行在服务器端的程序。传送门

<!-- 基本配置 -->
<servlet><servlet-name>snoop</servlet-name><servlet-class>SnoopServlet</servlet-class>
</servlet>
<servlet-mapping><servlet-name>snoop</servlet-name><url-pattern>/snoop</url-pattern>
</servlet-mapping>
<!-- 高级配置 -->
<servlet><servlet-name>snoop</servlet-name><servlet-class>SnoopServlet</servlet-class><init-param><param-name>foo</param-name><param-value>bar</param-value></init-param><run-as><description>Security role for anonymous access</description><role-name>tomcat</role-name></run-as>
</servlet>
<servlet-mapping><servlet-name>snoop</servlet-name><url-pattern>/snoop</url-pattern>
</servlet-mapping>
<!--
<servlet-name></servlet-name> 指定servlet的名称
<servlet-class></servlet-class> 指定servlet的类名称
<jsp-file></jsp-file> 指定web站台中的某个JSP网页的完整路径
<init-param></init-param> 用来定义参数,可有多个init-param。在servlet类中通过getInitParamenter(String name)方法访问初始化参数
<load-on-startup></load-on-startup>指定当Web应用启动时,装载Servlet的次序。当值为正数或零时:Servlet容器先加载数值小的servlet,再依次加载其他数值大的servlet。当值为负或未定义:Servlet容器将在Web客户首次访问这个servlet时加载它。
<servlet-mapping></servlet-mapping> 用来定义servlet所对应的URL,包含两个子元素
<servlet-name></servlet-name> 指定servlet的名称
<url-pattern></url-pattern> 指定servlet所对应的URL
-->

8、<session-config>会话超时配置

单位为秒

<session-config><session-timeout>120</session-timeout>
</session-config>

9、<welcome-file-list>欢迎文件页

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

关于欢迎页面:

访问一个网站时,默认看到的第一个页面就叫欢迎页,一般情况下是由首页来充当欢迎页的。一般情况下,我们会在web.xml中指定欢迎页。但web.xml并不是一个Web的必要文件,没有web.xml,网站仍然是可以正常工作的。只不过网站的功能复杂起来后,web.xml的确有非常大用处,所以,默认创建的动态web工程在WEB-INF文件夹下面都有一个web.xml文件。

当你只指定一个web的根名,没有指定具体页面,去访问时一个web时, 如果web.xml文件中配置了欢迎页,那么就返回指定的那个页面作为欢迎页,而在文中没有web.xml文件,或虽然有web.xml,但web.xml也没指定欢迎页的情况下,那么不同的应用服务器可能会有不同的行为,对于tomcat来说,它默认先查找index.html文件,如果找到了,就把index.html作为欢迎页还回给浏览器。如果没找到index.html,tomcat就去找index.jsp。找到index.jsp就把它作为欢迎页面返回。而如果index.html和index.jsp都没找到,又没有用web.xml文件指定欢迎页面,那此时tomcat就不知道该返回哪个文件了,它就显示The requested resource (/XXX) is not available的页面。其中XXX表示web的根名。但如果你指定了具体页面,是可以正常访问的。(如果web根名下存在index.html和index.jsp,而某些应用服务器在web.xml中没指定欢迎页的情况下默认先查找index.jsp的话,其行为跟tomcat就不一样了,因此可能造成没配置web.xml欢迎页的项目,部署到不同的应用服务器看到不一样的首页的现象)。

10、<jsp-config>设置jsp

<jsp-config> 包括 <taglib> 和 <jsp-property-group> 两个子元素。
<jsp-property-group> 元素主要有八个子元素,它们分别为:

<description>:设定的说明
<display-name>:设定名称
<url-pattern>:设定值所影响的范围,如: /CH2 或 /*.jsp
<el-ignored>:若为 true,表示不支持 EL 语法
<scripting-invalid>:若为 true,表示不支持 <% scripting %>语法
<page-encoding>:设定 JSP 网页的编码
<include-prelude>:设置 JSP 网页的抬头,扩展名为 .jspf
<include-coda>:设置 JSP 网页的结尾,扩展名为 .jspf
<jsp-config><taglib><taglib-uri>Taglib</taglib-uri><taglib-location>/WEB-INF/tlds/MyTaglib.tld</taglib-location></taglib><jsp-property-group><description>Special property group for JSP Configuration JSP example.</description><display-name>JSPConfiguration</display-name><url-pattern>/jsp/* </url-pattern><el-ignored>true</el-ignored><page-encoding>GB2312</page-encoding><scripting-invalid>true</scripting-invalid><include-prelude>/include/prelude.jspf</include-prelude><include-coda>/include/coda.jspf</include-coda></jsp-property-group>
</jsp-config>

对于Web 应用程式来说,Scriptlet 是个不乐意被见到的东西,因为它会使得HTML 与Java 程式码交相混杂,对于程式的维护来说相当的麻烦,必要的时候,可以在web.xml 中加上 标签,设定所有的JSP 网页都不可以使用Scriptlet。

11、指定错误处理页面,可以通过“异常类型”或“错误码”来指定错误处理页面。

<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>

12、Web应用图标:指出IDE和GUI工具用来表示Web应用的大图标和小图标

<icon>
<small-icon>/images/app_small.gif</small-icon>
<large-icon>/images/app_large.gif</large-icon>
</icon>

13、MIME类型配置

   <mime-mapping>    <extension>htm</extension>    <mime-type>text/html</mime-type>    </mime-mapping>

14、TLD配置

<taglib>    <taglib-uri>http://jakarta.apache.org/tomcat/debug-taglib</taglib-uri>    <taglib-location>/WEB-INF/jsp/debug-taglib.tld</taglib-location>    </taglib>    如果MyEclipse一直在报错,应该把<taglib> 放到 <jsp-config>中    <jsp-config>    <taglib>    <taglib-uri>http://jakarta.apache.org/tomcat/debug-taglib</taglib-uri>    <taglib-location>/WEB-INF/pager-taglib.tld</taglib-location>    </taglib>    </jsp-config>    

15、资源管理对象配置

   <resource-env-ref>    <resource-env-ref-name>jms/StockQueue</resource-env-ref-name>    </resource-env-ref>

16、资源工厂配置

   <resource-ref>    <res-ref-name>mail/Session</res-ref-name>    <res-type>javax.mail.Session</res-type>    <res-auth>Container</res-auth>    </resource-ref>   

配置数据库连接池就可在此配置:

    <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>  

17、安全限制配置

   <security-constraint>    <display-name>Example Security Constraint</display-name>    <web-resource-collection>    <web-resource-name>Protected Area</web-resource-name>    <url-pattern>/jsp/security/protected/*</url-pattern>    <http-method>DELETE</http-method>    <http-method>GET</http-method>    <http-method>POST</http-method>    <http-method>PUT</http-method>    </web-resource-collection>    <auth-constraint>    <role-name>tomcat</role-name>    <role-name>role1</role-name>    </auth-constraint>    </security-constraint>

18、登陆验证配置

   <login-config>    <auth-method>FORM</auth-method>    <realm-name>Example-Based Authentiation Area</realm-name>    <form-login-config>    <form-login-page>/jsp/security/protected/login.jsp</form-login-page>    <form-error-page>/jsp/security/protected/error.jsp</form-error-page>    </form-login-config>    </login-config>    

19、安全角色:security-role元素给出安全角色的一个列表,这些角色将出现在servlet元素内的security-role-ref元素的role-name子元素中。
分别地声明角色可使高级IDE处理安全信息更为容易。

<security-role>    <role-name>tomcat</role-name>
</security-role>    

20、配置DWR

<servlet>    <servlet-name>dwr-invoker</servlet-name>    <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
</servlet>
<servlet-mapping>    <servlet-name>dwr-invoker</servlet-name>    <url-pattern>/dwr/*</url-pattern>
</servlet-mapping>

Java web之web.xml配置详解相关推荐

  1. JavaWeb web.xml配置详解

    参考: XML 教程 Java web之web.xml配置详解 Javaweb三大组件是:Servlet,Filter,Listener. 1.Servlet Servlet作为中转处理的容器,连接了 ...

  2. web.xml配置详解

    往者不谏 来者可追 写作是最好的社交 新随笔 订阅 web.xml配置详解 Web.xml常用元素<web-app><display-name></display-nam ...

  3. Ehcache 中ehcache.xml 配置详解和示例

    EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider. Ehcache是一种广泛使用的开源Java分布式缓存.主要面向通用缓存 ...

  4. mybatis 同名方法_MyBatis(四):xml配置详解

    目录 1.我们将 数据库的配置语句写在 db.properties 文件中 2.在 mybatis-configuration.xml 中加载db.properties文件并读取 通过源码我们可以分析 ...

  5. SpringBoot—整合log4j2入门和log4j2.xml配置详解

    关注微信公众号:CodingTechWork,一起学习进步. 引言   对于一个线上程序或者服务而言,重要的是要有日志输出,这样才能方便运维.而日志的输出需要有一定的规划,如日志命名.日志大小,日志分 ...

  6. Maven的settings.xml配置详解

    Maven的settings.xml配置详解 1 基本介绍 maven的两大配置文件:settings.xml和pom.xml.其中settings.xml是maven的全局配置文件,pom.xml则 ...

  7. java JDK安装与环境配置详解(超超超级详细)

    点击以下链接获取详细图文教程! java JDK安装与环境配置详解 https://v.xiumi.us/board/v5/3QTAV/112689421

  8. Java web.xml 配置详解

    在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰. 首先可以肯定的是 ...

  9. java web工程web.xml配置详解

    转载自:http://blog.csdn.net/believejava/article/details/43229361 这篇文章主要是综合网上关于web.xml的一些介绍,希望对大家有所帮助,也欢 ...

最新文章

  1. linux 压缩 解压zip 命令
  2. 新闻发布系统java ee_Java EE 7发布–反馈和新闻报道
  3. 前端学习(3188):ant-design的icon图标
  4. java学习(129):hashmap的方法
  5. php 支付加密,关于支付时rsa加密解密的函数
  6. Pspice 使用指南(中文)
  7. mongodb 如何更改端口号_Centos7配置MongoDB以及端口修改
  8. iOS开发 利用Reachability判断网络环境
  9. Spring静态资源解决方案
  10. 机器人技术之Simulink仿真基础
  11. 射频卡读写器c#源码
  12. java持久层框架分析
  13. 最大子段和(动态规划算法)
  14. 如果在魔兽世界中,做一个合格野性德
  15. 使用Foxmail管理hotmail邮箱时,只能接收邮件而无法发送邮件的就解决办法
  16. uni-app的video禁止快进及seek()上的小坑
  17. expect结合scp实现文件上传
  18. MFC调用Opencv显示视频
  19. 如果看完这个,你没有热血沸腾的感觉,你就不要进csdn了
  20. c++define的用法

热门文章

  1. 我使用 html 反向输出自己打自己(7)
  2. solidity struct 结构体创建与使用浅学 (四)
  3. Android图片上倒计时,Android自定义照相机倒计时拍照
  4. mysql innodb 索引 延迟更新_Mysql覆盖索引与延迟关联
  5. linux命令行设置编码,编码样式-Linux命令行开关和参数是否有标准?
  6. linux进程上下文切换,Linux 性能分析总结之 CPU 上下文切换(二)
  7. CLion 中使用 C++ 版本的 OpenCV
  8. 为什么现在老师这么难,值得大家深思
  9. 可反复擦写5万次的手写板,竟然还能用橡皮擦能清除屏幕!
  10. 6计算机系统的组成是,计算机系统的组成(范文)(6页)-原创力文档