zoukankan      html  css  js  c++  java
  • Servlet过滤器,Servlet过滤器创建和配置

    第一:Servlet的过滤器的创建和配置,创建一个过滤器对象需要实现javax.servlet.Filter接口,同时实现Filter的3个方法。

           第一方法是过滤器中的init()方法用于对过滤器的初始值进行处理,第二个是destory()方法是过滤器的销毁方法,主要用于释放资源,对于过滤处理的业务逻辑需要编写到doFilter()方法中,在请求过滤处理后,需要调用chain参数的doFilter()方法将请求向下传递给下一个过滤器或者目标资源。

    (过滤器和Servlet十分相似哟,在创建之后同样需要对其进行配置,过滤器的配置主要分为两个步骤,分别位声明过滤器和创建过滤器映射)

    第二:过滤器的配置简单说下,分为两个步骤,一是声明过滤器对象,二是创建过滤器映射

    <!-- 过滤器声明 -->     <filter>     <!-- 过滤器的名称 -->         <filter-name>CountFilter</filter-name>         <!-- 过滤器的完整类名 -->         <filter-class>com.ningmeng.CountFilter</filter-class>         <init-param>             <param-name>count</param-name>             <param-value>5000</param-value>         </init-param>     </filter> <!-- 过滤器的映射 -->         <filter-mapping>     <!-- 过滤器的名称 -->         <filter-name>CountFilter</filter-name>     <!-- 过滤器的URL映射 -->             <url-pattern>/index.jsp</url-pattern>     </filter-mapping>

    ------------------------------------------------------------------------------------------------------------------------------

    <filter>标签用于声明过滤器的对象,在这个标签中必须配置两个元素,分别是过滤器的名称和过滤器的完整类名,其中<filter-name>

    为过滤器的名称,<filter-class>过滤器的完整类名

    <filter-mapping>标签用于创建过滤器的映射,他的主要作用就是指定web应用中,那些URL应用哪一个过滤器进行处理,在<filter-mapping>标签中需要指定过滤器的名称和过滤器的URL映射,其中<filter-name>用于定义过滤器的名称,<url-pattern>用于指定过滤器应用的URL。

    注意:</filter-mapping>标签中的<filter-name>是指定已定义的过滤器的名称,必须和<filter>标签中的<filter-name>一一对应

    下面演示一下创建一个过滤器,实现网站访问计数器的功能。并且在web.xml文件的配置中,将网站访问量的初始值设置为5000.

    然后直接上代码,不废话

     1 package com.ningmeng;
     2 
     3 import java.io.IOException;
     4 import javax.servlet.Filter;
     5 import javax.servlet.FilterChain;
     6 import javax.servlet.FilterConfig;
     7 import javax.servlet.ServletConfig;
     8 import javax.servlet.ServletContext;
     9 import javax.servlet.ServletException;
    10 import javax.servlet.ServletRequest;
    11 import javax.servlet.ServletResponse;
    12 import javax.servlet.annotation.WebServlet;
    13 import javax.servlet.http.HttpServlet;
    14 import javax.servlet.http.HttpServletRequest;
    15 import javax.servlet.http.HttpServletResponse;
    16 
    17 /**
    18  * Servlet implementation class CountFilter
    19  */
    20 @WebServlet("/CountFilter")
    21 public class CountFilter extends HttpServlet implements Filter {
    22     private static final long serialVersionUID = 1L;
    23     //来访数量
    24     private int count;
    25  
    26     /**
    27      * @see Filter#init(FilterConfig)
    28      */
    29     public void init(FilterConfig filterConfig) throws javax.servlet.ServletException { 
    30          // TODO Auto-generated method stub
    31         String param=filterConfig.getInitParameter("count");//获取初始化参数
    32         count=Integer.valueOf(param);//将字符串转换为int
    33     }
    34 
    35     /**
    36      * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
    37      */
    38     public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, javax.servlet.ServletException { 
    39         // TODO Auto-generated method stub
    40         count++;//访问数量自增
    41         //将ServletRequest转换成HttpServletRequest
    42         HttpServletRequest req=(HttpServletRequest)request;
    43         //获取ServletContext
    44         ServletContext context=req.getSession().getServletContext();
    45         context.setAttribute("count", count);//将来访数量值放入到ServletContext中
    46         chain.doFilter(request, response);//向下传递过滤器
    47         
    48     }
    49 
    50 
    51     /**
    52      * @see Servlet#destroy()
    53      */
    54     public void destroy() {
    55         // TODO Auto-generated method stub
    56     }
    57 
    58 
    59 }
     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5 <head>
     6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     7 <title>Insert title here</title>
     8 </head>
     9 <body>
    10     <h1>欢迎光临<br/></h1>
    11     <h2>您是本站的第【<%=application.getAttribute("count") %>】位访客!</h2>
    12 </body>
    13 </html>
     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <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">
     3   <display-name>web02</display-name>
     4   <welcome-file-list>
     5     <welcome-file>index.html</welcome-file>
     6     <welcome-file>index.htm</welcome-file>
     7     <welcome-file>index.jsp</welcome-file>
     8     <welcome-file>default.html</welcome-file>
     9     <welcome-file>default.htm</welcome-file>
    10     <welcome-file>default.jsp</welcome-file>
    11   </welcome-file-list>
    12   <servlet>
    13     <servlet-name>FirstServlet</servlet-name>
    14     <servlet-class>com.ningmeng.FirstServlet</servlet-class>
    15   </servlet>
    16   <servlet-mapping>
    17     <servlet-name>FirstServlet</servlet-name>
    18     <url-pattern>/FirsetServlet</url-pattern>
    19   </servlet-mapping>
    20     
    21 <!-- 过滤器声明 -->
    22     <filter>
    23         <filter-name>CountFilter</filter-name>
    24         <filter-class>com.ningmeng.CountFilter</filter-class>
    25         <init-param>
    26             <param-name>count</param-name>
    27             <param-value>5000</param-value>
    28         </init-param>
    29     </filter>
    30     <filter-mapping>
    31         <filter-name>CountFilter</filter-name>
    32         <url-pattern>/index.jsp</url-pattern>
    33     </filter-mapping>    
    34 </web-app>

    运行如下

  • 相关阅读:
    利用.NET绘图技术制作水晶按钮控件(转)
    推荐几款皮肤界面工具
    同时避免GridView ArgumentNullException 值不能为空和使用Updatepanel乱码
    ASP.NET自动检测用户名是否注册(利用微软AJAX控件技术)
    ASP.NET的GridView在UpdatePanel里导出Excel的语句
    几款ASP.NET在线文本编辑器
    ASP.NET远程连接数据库SQL server
    ASP.NET一个页面多个Button按钮事件避免数据验证控件RequiredFieldValidator冲突方法
    使用面向oo对象方法的12个优点(转)
    C#中的DBNull、Null、""和String.Empty解释
  • 原文地址:https://www.cnblogs.com/honglikeji/p/7453621.html
Copyright © 2011-2022 走看看