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>

 

运行如下

 

转载于:https://www.cnblogs.com/honglikeji/p/7453621.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值