Filter

Filter过滤器

实现步骤:

      1. 在web.xml文件中注册过滤器,并配置初始化参数
      2. 定义类实现Filter接口
      3. 实现doFilter方法
      4. 定义类继承HttpServletRequestWrapper
      5. 重写getParameter与getParameterValues两个方法

 

 

//web.xml

<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">


	<filter>
		<filter-name>FilterTest</filter-name>
		<filter-class>com.epoint.filter.FilterTest</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>FilterTest</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
</web-app>
//FilterTest

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class FilterTest implements Filter {

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub
		System.out.println("begin init of FilterTest .......");

	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		// TODO Auto-generated method stub
		System.out.println("begin doFilter of FilterTest .......");

	}

	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		System.out.println("begin destroy of FilterTest .......");

	}

}

项目运行就调用init方法   访问 客户端发生请求 就调用doFilter方法

 

 

<filter>
		<filter-name>FilterTest</filter-name>
		<filter-class>com.epoint.filter.FilterTest</filter-class>
		
		<!-- 配置filter信息   初始化参数 -->
		<init-param>
		<param-name>encoding</param-name>
		<param-value>UTF-8</param-value>
		</init-param>
		
		<init-param>
		<param-name>type</param-name>
		<param-value>THML</param-value>
		</init-param>
	</filter>

@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub
		System.out.println("begin init of FilterTest .......");
		
		//获取filter的初始化参数
		String initParameter = filterConfig.getInitParameter("encoding");
		System.out.println(initParameter);
		
		System.out.println("--------------");
		
		//获取当前filter所有初始化参数的名称,返回一个枚举类
		Enumeration<String> initParameterNames = filterConfig.getInitParameterNames();
		while (initParameterNames.hasMoreElements()) {
			//获取初始化参数名称
			String initParam = initParameterNames.nextElement();
			//获取参数的值
			String initParamValue = filterConfig.getInitParameter(initParam);
			System.out.println(initParam + " : "+ initParamValue);
			
			System.out.println("--------------");
			
			// 获取当前Filter的上下文对象ServletContext
			ServletContext servletContext = filterConfig.getServletContext();
			System.out.println(servletContext.getContextPath());
			
		}

	}

 运行结果

 

 

package com.epoint.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;

@WebFilter("/*")
public class FilterA implements Filter {

	@Override
	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub

	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		// TODO Auto-generated method stub
		System.out.println("begin doFilter of FilterA .......");
		chain.doFilter(request, response);

		System.out.println("end doFilter of FilterA .......");

	}

	@Override
	public void destroy() {
		// TODO Auto-generated method stub

	}

}

 运行结果:

如果filter是通过注解配置的形式  filter是顺序是按按照当前filter的名字来排列的

 

 

 //放行到其它filter
        chain.doFilter(request, response);

 

@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		// 统一应用字符编码
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		response.setCharacterEncoding("UTF-8");

	}

 登录页面

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>登录页面</title>
</head>
<body>
<form action="LoginServlet" method="post">
姓名:<input type="text" id="username" name="username" />
<br>
密码:<input type="password" id="password" name="password" />
<br>
<input type="submit" value="提交">
<input type="reset" value="重置">
</form>
</body>
</html>

 LoginServlet.java

package com.epoint.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet implementation class LoginServlet
 */
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#HttpServlet()
	 */
	public LoginServlet() {
		super();
		// TODO Auto-generated constructor stub
	}

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		// response.getWriter().append("Served at: ").append(request.getContextPath());
		//获取session
		HttpSession session = request.getSession();
		//把前台传过来的username保存到session
		session.setAttribute("username", request.getParameter("username"));
		
		System.out.println("=====");
		//请求转发
		request.getRequestDispatcher("/success.html").forward(request, response);;
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		doGet(request, response);
	}

}

LoginFilter.java

package com.epoint.filter;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 * Servlet Filter implementation class LoginFilter
 */
@WebFilter("/success.html")
public class LoginFilter implements Filter {

    /**
     * Default constructor. 
     */
    public LoginFilter() {
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see Filter#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
	}

	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		// TODO Auto-generated method stub
		// place your code here

		// pass the request along the filter chain
		
		
		HttpServletRequest httpServletRequest = (HttpServletRequest) request;
		HttpServletResponse httpServletResponse = (HttpServletResponse) response;
		
		HttpSession session =httpServletRequest.getSession();
		 
	
		if (session.getAttribute("username") != null) {
			//拿到了用户的登录信息
			chain.doFilter(request, response);
		} else {
			//没有用户信息,跳转到登录页面
			httpServletResponse.sendRedirect(httpServletRequest.getContextPath() + "/login.html");
		}
		
		
	}

	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
	}

}

创建一个VisitCountFilter,用于统计当前网站的访问量,访问时,能够在浏览器页面显示您是第XX位访客。

package com.epoint.filter;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.http.HttpServletRequest;

/**
 * Servlet Filter implementation class VisitCountFilter
 */
@WebFilter("/index.html")
public class VisitCountFilter implements Filter {
	
	//声明来访数量
	private int count;

    /**
     * Default constructor. 
     */
    public VisitCountFilter() {
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see Filter#destroy()
	 */
	public void destroy() {
		// TODO Auto-generated method stub
	}

	/**
	 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
	 */
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		// TODO Auto-generated method stub
		// place your code here

		// pass the request along the filter chain
		
	   

		
		//访问数量自增
				count++;
				//将ServletRequest转换为HttpServletRequest
				HttpServletRequest req =(HttpServletRequest)request;
				//获取ServletContext相当于application
				ServletContext context = req.getSession().getServletContext();
				 //2)获取计数对象。
			    Integer count=(Integer)context.getAttribute("count");
			    //3) 将计数结果存储到域对象中,并显示到页面上。
			    context.setAttribute("count", ++count);
			    response.getWriter().write("第"+count+"位访问者");
				
				//向下传递过滤器
				chain.doFilter(request, response);
	}

	/**
	 * @see Filter#init(FilterConfig)
	 */
	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
		
		fConfig.getServletContext().setAttribute("count", 0); 
	}

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值