Java笔记_web.xml文件


  在JavaEE工程中,web.xml文件是用来初始化配置信息:比如Welcome页面、servlet、servlet-mapping、filter、listener、启动加载级别等,但并不是必须的,一个Java Web项目没有web.xml文件也是照样能跑起来的。

  当web项目启动时,web.xml文件里的各个节点的加载顺序是:->->->
其中,如果web.xml中出现了相同的元素,则按照在配置文件中出现的先后顺序来加载。

  web.xml的模式文件中定义的标签并不是定死的,模式文件也是可以改变的,一般来说,随着web.mxl模式文件的版本升级,里面定义的功能会越来越复杂,标签元素的种类肯定也会越来越多,但有些不是很常用的,我们只需记住一些常用的并知道怎么配置就可以了。

1、设置默认访问首页

1 <welcome-file-list>
2     <welcome-file>/pages/front/index.jspwelcome-file>
3 welcome-file-list>

2、配置servlet和servlet-mapping

Servlet:常称为服务器端小程序,即运行在服务器端的程序,用于处理及响应客户的请求
Servlet类是个特殊的java类,继承于HttpServlet。

 1 <servlet>
 2     
 3     <servlet-name>ServletDemo1servlet-name>
 4     
 5     <servlet-class>lm.package.ServletDemo1servlet-class>
 6 servlet>
 7 
 8 
 9 <servlet-mapping>
10     
11     <servlet-name>ServletDemo1servlet-name>
12     
13     <url-pattern>/ServletDemo1url-pattern>
14 servlet-mapping>

注意:上面的servlet映射路径一定要加上/,否则会出错。

上面设置的映射路径可以通过地址栏来访问:http://localhost/servlet

补充1:url-pattern: *.xxx 以*.字符串的请求都可以访问 注:不要加/
   url-pattern: /* 任意字符串都可以访问
   url-pattern: /xxx/* 以/xxx开头的请求都可以访问

补充2:servlet配置load-on-startup的作用

  如果我们在web.xml中设置了多个servlet的时候,可以使用load-on-startup来指定servlet的加载顺序,

  服务器会根据load-on-startup的大小依次对servlet进行初始化。

  不过即使我们将load-on-startup设置重复也不会出现异常,服务器会自己决定初始化顺序。

  当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;

  当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。

  正数的值越小,启动该servlet的优先级越高。

PS:一般我们在开发web应用时,都会配置这个参数,有两个好处:

  1、如果初始化过程失败,则容器会提示启动失败,此时我们能够提前知道相关错误;

  2、配置该参数相当于将初始化servlet的工作转移到容器启动过程,使得容器只要启动成功后,就可立即响应web请求。

3、定制初始化参数

  可以定制servlet、JSP、Context的初始化参数,然后可以再servlet、JSP、Context中获取这些参数值。

 1 <servlet> 
 2     <servlet-name>ServletDemo1servlet-name> 
 3     <servlet-class>Test.ServletDemo1servlet-class> 
 4     <init-param> 
 5           <param-name>userNameparam-name> 
 6           <param-value>Danielparam-value> 
 7     init-param> 
 8     <init-param> 
 9           <param-name>E-mailparam-name> 
10           <param-value>123456@qq.comparam-value> 
11     init-param> 
12 servlet> 

经过上面的配置,在servlet中能够调用getServletConfig().getInitParameter("param1")获得参数名对应的值。

4、设置过滤器:比如配置处理中文乱码的过滤器类:CharacterEncodingFilter

 1 <filter>
 2     <filter-name>characterEncodingFilterfilter-name>
 3     <filter-class>org.springframework.web.filter.CharacterEncodingFilterfilter-class>
 4     <init-param>
 5         <param-name>encodingparam-name>
 6         <param-value>UTF-8param-value>
 7     init-param>
 8 filter>
 9 
10 <filter-mapping>
11     <filter-name>characterEncodingFilterfilter-name>
12     
13     <url-pattern>/*url-pattern>
14 filter-mapping>

5、配置监听器

其实就是一个类,读取applicationContext.xml文件:ContextLoaderListener

1 <context-param>
2     <param-name>contextConfigLocationparam-name>
3     <param-value>classpath:applicationContext.xmlparam-value>
4 context-param>
5 <listener>
6     <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
7 listener>

6、配置会话(Session)过期时间,时间以分钟为单位,假如设置60分钟超时

1 <session-config> 
2     <session-timeout>60session-timeout> 
3 session-config>

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

 1 <error-page> 
 2     
 3     <error-code>404error-code> 
 4     <location>/error404.jsplocation> 
 5 error-page> 
 6 ----------------------------- 
 7 <error-page> 
 8     
 9     <exception-type>java.lang.Exception<exception-type> 
10     <location>/exception.jsp<location> 
11 error-page> 

8、配置log4j日志

1 <context-param>
2     <param-name>log4jConfigLocationparam-name>
3     <param-value>classpath:properties/log4j.propertiesparam-value>
4 context-param>
5 <listener>
6     <description>log4j配置加载器description>
7     <listener-class>org.springframework.web.util.Log4jConfigListenerlistener-class>
8 listener>

9、配置springmvc的核心类:DispatcherServlet,读取springmvc.xml

 1 <servlet>
 2     <servlet-name>dispatcherServletservlet-name>
 3     <servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
 4     <init-param>
 5         <param-name>contextConfigLocationparam-name>
 6         <param-value>classpath:springmvc.xmlparam-value>
 7     init-param>
 8     
 9     <load-on-startup>1load-on-startup>
10 servlet>
11 <servlet-mapping>
12     <servlet-name>dispatcherServletservlet-name>
13     <url-pattern>*.dourl-pattern>
14 servlet-mapping>