Servlet配置(二)

本文详细介绍了Servlet的配置,包括设置启动优先级、Servlet映射、配置Servlet监听器和过滤器。通过设置不同的数字决定Servlet加载顺序,使用`<servlet-mapping>`定义Servlet与URL的映射。Servlet监听器能监听Web应用的上下文、会话和请求信息。过滤器如HeaderFilter用于防止页面缓存,而权限过滤器则用于判断用户登录状态,确保安全访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

配置启动优先级

<servlet>
   <servlet-name>LoginServlet</servlet-name>
   <servlet-class>com.examp.authentication.LoginServlet</servlet-class>
  <load-on-startup>10/load-on.startup>  设置加载优先级
</servlet>
<servlet>
   <servlet-name>LogoutServlet</servlet-name>
   <servlet-class>com.examp.authentication.LogoutServlet</servlet-class>
   <load-on-startup>20</load-on-startup>
</servlet>

在上面的代码中,通过设置大小不同的数字实现Servlet被加载的先后次序

映射
Servlet的映射是将该Servlet与访问她的URL地址建立对应关系。可以作为同一个Servlet建立多个映射,这样就可以通过URL调用该Servlet,在配置文件中,建立映射的格式如下:

<servlet-mapping>
   <servlet-name>这里是引用Servlet的名字</servlet-name>
   <url-pattern>这里是定义访问该Servlet的url</url-pattern>
</servlet-mapping>

在标签<servlert-mapping></servlet-mapping>之间定义映射,用<servlet-name>来引用Servlet的名字,这个名字应该是已经在<servlet>标签下定义好的。用<url-pattern>来定义访问该Servlet的URL地址。需要注意的是,只有在定义某个Servlet的<servlet>标签后,才能定义其<servlet-mapping>标签。

<url-pattern>定义的并不是完整的url地址。它只是个相对地址,只有在前面加上服务器(http://localhost:8080)和应用程序的context名(ch9)之后,才能构成访问该Servlet的绝对地址。

配置Servlet监听器
Servlet监听是指一些特殊的Servlet类,这些类可以监听Web应用的上下文信息,Servlet会话信息及Servlet请求信息。这些类对特定的信息进行监听,一旦被监听的事件发生,这些类就会自动调用相应的方法去执行指定的操作。

<listener>
<listener-class>com.listener.class</listener-class>
</listener>
Listener配置信息必须在Filter和Servlet配置之前,Listener的初始化(ServletContentListener初始化)比Servlet和Filter都优先,而销毁比Servlet和Filter都慢。
<listener>
       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
       <!--使用spring的上下文加载监听器:可能的作用是:在web应用加载系统应用资源文件,也就是加载那些xml文件的时候, 会建立一些监听器。譬如监听xml文件内容的变化         -->
    </listener>
    <listener>
        <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
       <!-- 实例化一个spring的关于请求的上下文的监听器 -->
    </listener>
    <listener>
       <listener-class>org.hdht.commonweb.listener.MyServletContextListener</listener-class>

实例化一个自定义的监听器。监听器主要代码

public class MyServletContextListener implements ServletContextListener {
    public void contextDestroyed(ServletContextEvent arg0) {

    }

    public void contextInitialized(ServletContextEvent arg0) {
       try {     // 初始化日志处理器
           AppLogService.init();//初始化系统用到的变量,主要是静态变量。
           System.out.println("INFO:数据初始化完毕");
       } catch (Exception e) {
           AppLogService.error("系统初始化错误!",e);
       }
    }
}

这是一个继承了服务器上下文监听器接口的监听器,这个监听器主要有两个必须实现的方法:

contextInitialized:当web服务器启动时执行的方法,该方法主要用来初始化系统的变量,多半是静态变量。
contextDestroyed:当web服务器关闭的时候调用的方法,主要是销毁一些内存变量,释放资源。

配置Servlet过滤器

<filter>
       <filter-name>headerFilter</filter-name>
       <!-- 声明一个过滤器 名字叫:headerFilter 顾名思义是用来过滤文件头部的 -->
       <filter-class>org.hdht.commonweb.filter.HeaderFilter</filter-class>

过滤器的实例化类是自定义的过滤器:关键代码:

public class HeaderFilter implements Filter {
    public void init(FilterConfig arg0) throws ServletException {

    }

    public void doFilter(ServletRequest req, ServletResponse res,
           FilterChain chain) throws IOException, ServletException {
       HttpServletRequest request = (HttpServletRequest) req;
       HttpServletResponse response = (HttpServletResponse) res;
       response.setHeader("Pragma", "no-cache");
       response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
       response.setHeader("Expires", "-1");
       chain.doFilter(req, res);
    }
    public void destroy() {

  }
}      

通过上边filter的配置:我们配置了一个自定义的过滤器,过滤器的名字是headerFilter,实例化类似自定义的类:HearderFilter,该过滤器的主要作用是对设置页面不采用缓存。

  <filter-mapping>
       <filter-name>headerFilter</filter-name>
       <!-- 过滤器映射名称 -->
       <url-pattern>*.jsp</url-pattern>
       <!-- 过滤器映射文件:所有的jsp文件。 -->
    </filter-mapping>

通过上边的ffilter-mapping的配置: 我们将过滤器headerFilter映射到所有的jsp文件。
这样所有的jsp文件的头部就都会设置不适用缓存处理页面。这个过滤器主要用于经常和数据库有交互的页面中

权限过滤器:判断用户是否登录的过滤器

    <filter>
      <filter-name>uimfilter</filter-name>      <!--声明一个过滤器的:uimfilter 主要的作用是检测用户是否登录 -->
      <filter-class>org.hdht.commonweb.filter.PermissionFilter</filter-class>
      <!-- uimfilter过滤器的实例化类 是自定义的过滤器类
  </filter>
    java代码主要是对session进行判断,判断表示用户登录的session变量是否存在,如果不存在就重定向到登陆界面。
  通过上边filter的配置:我们定义了一个名字叫做uimfilter的权限过滤器,这个过滤器的实例化类是自定义的java类,
  主要对用户是否登录做出判断,并根据判断结果作相应的处理:继续操作还是重定向登录
    <filter-mapping>
      <filter-name>uimfilter</filter-name>
      <url-pattern>*.jsp</url-pattern>      <!-- 将权限过滤器映射给所有的jsp文件 -->
    </filter-mapping>
    <filter-mapping>
       <filter-name>uimfilter</filter-name>
       <url-pattern>/dwr/*</url-pattern>      <!-- 将权限过滤器映射给dwr包内的所有文件 -->
    </filter-mapping>
    <filter-mapping>
      <filter-name>uimfilter</filter-name>
      <url-pattern>*.do</url-pattern>
      <!-- 将权限过滤器映射给所有的.do文件 -->
    </filter-mapping>

通过上边filter-mapping的配置:我们将uimfilter过滤器映射给所有的jsp文件,dwr包内的所有文件以及.do文件, 这样,当用户进入到jsp文件或者调用dwr或者有action的操作的时候,系统就会对用户是否登录进行判断。

参考博客:
http://www.cnblogs.com/renpei/p/5688153.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值