web.xml配置详解

来源:互联网 发布:淘宝店详情图片尺寸 编辑:程序博客网 时间:2024/06/06 15:42
  主要功能:web.xml是用来初始化配置信息,比如:welcome页面(一般请款下是工程的首页登录页面),servlet , servlet-mapping, filter,listener,启动加载级别等等。
      1. welcome页面,在web.xml中配置
          <welcome-file-list >
           <welcome-file> index.jsp</welcome-file >
       </welcome-file-list >
   浏览器端访问工程时,直接请求项目名即可,欢迎页面是在web.xml中自动加载。
   注:指定了2个欢迎页面,显示时按顺序从第一个找起,如果第一个存在,就显示第一个,后面的不起作用。如果第一个不存在,就找第二个,以此类推。
   2.一个web.xml的创建需要表注明应用了那种模式,即: 
         schema英 [ˈski:mə]   web-app 后面一大串就是XML的schema

     <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns= "http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
                              http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
      id= "webapp" version ="2.5">
    随着web.xml的version版本的升级,会有新增更多的复杂的标签,只要记住常用的即可。引入模式,会像如下用很多标签。

       3.web.xml中servlet配置理解
        以下是servlet在web.xml中的配置,必须设定servlet-name 和 setvlet-mapping,并且名字必须一致。
        疑问??servlet必须在web.xml中配置么?
             理解:不一定。如果程序中要用servlet,1是需要在web.xml中配置2.类要继承servlet的父类。
                 在servlet3.0后,增加了新的特性,用注解的形式去应用servlet的。
         

    扩展:<load-on-startip> 1 </load-on-startip> 
在servlet的配置当中,<load-on-startup>1</load-on-startup>的含义是:
标记容器是否在启动的时候就加载这个servlet。
1 当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;
2 当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。正数的值越小,启动该servlet的优先级越高。
3 为什么不是true和false呢?这是因为如果我们在web.xml中设置了多个servlet的时候,可以使用load-on-startup来指定 servlet的加载顺序,服务器会根据load-on-startup的大小依次对servlet进行初始化。不过即使我们将load-on- startup设置重复也不会出现异常,服务器会自己决定初始化顺序。

      下面代码应用的spring带的setvlet类。url设置 ‘/’ 可拦截所有带/的 mapping调转。在action中用注解的形式进行控制跳转路径。例如:@RequestMapping ( "/userAndPic")  @RequestMapping ("/hallshow")



   注明:理解还有些浅,有带深入了解。

4. <error-page>的应用
指定错误处理页面,可以通过“异常类型”或“错误码”来指定错误处理页面。
<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>
在项目程序中,通常会出现404,500一些异常页面,当用户体验时,如报一下错误,不能给用户一个有错误页面,这时,就可以自己定义一些异常页面的jsp。在web.xml中配置,程序中调用即可。

注明:有待实施。

5、设置过滤器:比如设置一个编码过滤器,过滤所有资源
<filter>
    <filter-name>XXXCharaSetFilter</filter-name>
    <filter-class>net.test.CharSetFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>XXXCharaSetFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping> 

Spring项目配置编码过滤器 过滤所有类型
     <!-- 过滤字符编码 -->
     <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>
     </filter-mapping >

疑问:为什么要配置过滤器?
 理解:当客户端发送request请求,就会经过过滤器,进行过滤掉一些不必要的信息,进入action,直行操作。
       动作结束后,会进行清除request请求的痕迹,例如,你进行用自己的用户名和密码登录本系统,经过一系列
的校验才能进行登录,如果不进行过滤,清除request,谁都可以进行登录。没有进行清除处理。

      定义需要过滤的文件!


过滤器的应用场合

简洁的说法:
 1.认证过滤:对用户请求进行统一认证。
 2.登录和审核过滤:对用户的访问请求进行审核和对请求信息进行日志记录。
 3,数据过滤:对用户发送的数据进行过滤,修改或替换
 4.图像转换过滤 :转换图像的格式。
 5.数据压缩过滤 :对请求内容进行解压,对响应内容进行压缩。
 6.加密过滤 :对请求和响应进行加密处理。
 7.令牌过滤 :身份验证
 8.资源访问触发事件过滤 :
 9.XSL/T过滤
 10.Mime-type过滤


复杂的说法:
在适合使用装饰过滤器模式或者拦截器模式的任何地方,都可以使用过滤器:


加载:对于到达系统的所有请求,过滤器收集诸如浏览器类型、一天中的时间、转发 URL 等相关信息,并对它们进行日志记录。

性能:过滤器在内容通过线路传来并在到达 servlet 和 JSP 页面之前解压缩该内容,然后再取得响应内容,并在将响应内容发送到客户机机器之前将它转换为压缩格式。

安全:过滤器处理身份验证令牌的管理,并适当地限制安全资源的访问,提示用户进行身份验证和/或将他们指引到第三方进行身份验证。
 过滤器甚至能够管理访问控制列表(Access Control List,ACL),以便除了身份验证之外还提供授权机制。
 将安全逻辑放在过滤器中,而不是放在 servlet 或者 JSP 页面中,这样提供了巨大的灵活性。
 在开发期间,过滤器可以关闭(在 web.xml 文件中注释掉)。
 在生产应用中,过滤器又可以再次启用。此外还可以添加多个过滤器,以便根据需要提高安全、加密和不可拒绝的服务的等级。

会话处理:将 servlet 和 JSP 页面与会话处理代码混杂在一起可能会带来相当大的麻烦。
 使用过滤器来管理会话可以让 Web 页面集中精力考虑内容显示和委托处理,而不必担心会话管理的细节。

XSLT 转换:不管是使用移动客户端还是使用基于 XML 的 Web 服务,无需把逻辑嵌入应用程序就在 XML 语法之间执行转换的能力都绝对是无价的。


MVC 体系结构中的Servlet过滤器

 

 不管过滤器处于什么位置,过滤器在处理流中的应用都是相同的。过滤器旨在扩充 MVC 体系结构的请求/响应处理流。
 从 MVC 的观点看,调度器组件(它或者包括在控制器组件中,或者配合控制器组件工作)把请求转发给适当的应用程序组件以进行处理。
 这使得控制器层成为包括 Servlet 过滤器的最佳位置。通过把过滤器放在控制器组件本身的前面,过滤器可以应用于所有请求,
 或者通过将它放在控制器/调度器与模型和控制器之间,它可以应用于单独的 Web 组件。

 

应用示例或说明


 1,使用过滤器认证用户:
 每个过滤器也可以配置初始化参数,可以将不需要过滤的地址配置到这个Filter的配置参数中,
 过滤时,如果请求地址在配置参数中,则放行,这样就避免了在程序中硬编码。
 每个Filter中初始化时,都可以得到配置对象,在Filter中配置二个不需要过滤的地址,一个是登陆页面,一个是执行登陆认证的servlet;

 2,登录和审核过滤的示例:使用 servlet 过滤器来控制终端用户对应用程序特性的访问:
 通过显示基于用户角色的用户界面来控制对应用程序特性的访问。企业用户能够访问特定页面,但个人用户不能访问这样的页面。
 应用一个过滤器来处理用户请求并返回合适的页面。通过使用过滤器,您能够向一个基于 JSP 的应用程序添加这种类型的访问控制而无需更改现有的代码。
 
 这种基于过滤器的访问控制模型也很灵活,因为把用户角色映射到特定 JSP 的数据存储在一个 XML 文件中。
 因此,您可以修改映射而不用修改应用程序 — 不需要重新编译或重新部署。

实施:
     每当用户从一个包含 /controllerservlet模式的 URI 请求资源时就会调用AccessControlFilter的实例
 当访问控制过滤器被初始化后,从映射文件读取数据,而 AccessControlFilter.doFilter 方法负责处理过滤事务。
 在获取了用户角色和所请求页面的 URL 之后,doFilter 把这些值与映射数据对比。
 如果所请求的页面对用户角色是合适的,那么代码将调用 chain.doFilter 方法来调用该页面并继续正常的处理。
 否则,代码将在 chain.doFilter 之前调用 request.setAttribute,结果是 Controller Servlet 使用户重新进入到登录页面。






6、设置监听器:
<listener>
<listener-class>net.test.XXXLisenet</listener-class>
</listener>

       监听器的原理:被监听对象→对象拥有的事件→捕获到事件变化→监听器捕捉事件→监听器处理该事件

        Web服务器上有4个范围,抛开page范围,还有request范围,session范围,application范围。这些范围的对象什么时候创建,什么时候销毁,什么时候往范围中存放了数据,什么时候替换了存放的数据,都可以使用监听器来监听到。

        servlet监听主要有1,监听servletContext域对象 2,监听HttpSession域3,监听HttpRequest域对象。这里面又有8大监听接口。

        作用:监听器是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将立即执行。


     监听程序是1个特殊的servlet,他每时每刻都在注意着系统用户的1举1动,当你想要监听的事件(动作)产生的时候就进行相应的处理。最典型的例子,有些论坛或网站会实时的在帖子最下面显示在线人员的列表名单,实际上服务器是将登录的用户(或说session活动的用户)的相干信息寄存到application中,然后显示在想要显示的页面中,为了到达这样的目的,我们就能够使用监听程序,使得当用户登录或session创建的时候将对应的用户信息寄存到application中,而当用户登出或session烧毁(session1般都会有超时时间,自动烧毁)的时候将用户相干信息从application移除,这样就到达了统计在线人员的目的。




7、设置会话(Session)过期时间,其中时间以分钟为单位,假如设置60分钟超时:
<session-config>
<session-timeout>60</session-timeout>
</session-config>

当浏览器端没有任何请求超过60分钟后,session自动销毁。

0 0
原创粉丝点击