过滤器&监听器

本文详细介绍了Java Web中的过滤器和监听器。过滤器主要用于处理HTTP请求,无需手动设置编码,并能实现多个过滤效果。过滤器实现包括实现Filter接口,覆盖doFilter、destroy方法,并进行配置。监听器则是一个监听其他Java对象行为的程序,常用于监听应用程序的初始化和销毁等事件。使用监听器需要实现ServletContextListener接口并进行配置。

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

过滤器

过滤器作用

不需要设置编码。可以写很多个过滤器

过滤器包:filer

使用:

1.实现filter接口(servlet类)
2.方法
被销毁:destory
	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		
	}
请求被过滤器拦截:doFilter
@Override
	public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)throws IOException, ServletException {
servletRequest没有session。所以需要转换成HttpServlet
  //设置编码
  //登录验证
  //放行
   arg2.doFilter(arg0,arg1)
}

  • 列子:
package com.zking.filer;

import java.io.IOException;
import java.io.PrintWriter;

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.annotation.WebInitParam;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebFilter(
		filterName = "myFilter",//配置过滤器的名字,等同于<filter-name>myFilter</filter-name>
		urlPatterns = {"/*"},//配置过滤多个页面
		//配置初始化参数
		initParams = {
				@WebInitParam(name="name",value="张三"),
				@WebInitParam(name="sex",value="男")
		}
		
		)
public class MyFilter implements Filter{

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

	@Override
	public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
			throws IOException, ServletException {
		//转换参数类型,arg0和arg1
		HttpServletRequest req = (HttpServletRequest)arg0;
		HttpServletResponse resp = (HttpServletResponse)arg1;
		
		//设置编码
		req.setCharacterEncoding("utf-8");
		resp.setContentType("text/html;charset=utf-8");
		
		//配置out
		PrintWriter out = resp.getWriter();
		
		//配置session
		HttpSession session = req.getSession();
		
		//访问登录页面的请求不能被过滤
		//获取过滤器所拦截的请求,到底是什么请求?
		String uriPath = req.getRequestURI();
		//indexOf("要找到的字符串")如果找不到返回-1
		if(uriPath.indexOf("login.jsp")!=-1) {//找到了,意味着该请求是访问login.jsp
			//放行/继续前进
			arg2.doFilter(arg0,arg1);
			return ;
		}
		if(uriPath.indexOf("signup.jsp")!=-1) {//找到了,意味着该请求是访问signup.jsp
			//放行/继续前进
			arg2.doFilter(arg0,arg1);
			return ;
		}
		
		//登录验证
		Object name = session.getAttribute("uname");
		if(null != name) {//已经登录
			//放行/继续前进
			arg2.doFilter(arg0,arg1);
		}else {//没有登录
			out.print("<script> alert('登录失败');location.href='"+req.getContextPath()+"/home/signup.jsp';</script>");
			
		}
		
		
		
	}

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

}

过滤器初始化/过滤器被创建:
@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		
	}

//获取配置的初始化参数
getIntoParamter()

3.配置过滤器(位置:1.web.xml/2.web注解配置)
  • 配置过滤器的初始化参数:
  <into-param>
     //参数名
      <param-name></param-name>
     //参数值
      <param-value></param-value>
   <into-param>
  • 设置过滤器要过滤的请求
<url-pattern>地址</url-pattern>
  过滤单个请求:<url-pattern>/index.jsp</url-pattern>
  过滤指定后缀名请求(过滤整个带jsp后缀名的项目):<url-pattern>*.jsp</url-pattern>
  过滤指定目录里面的请求:<url-pattern>/home/index.jsp</url-pattern>
  过滤整个项目所有请求:<url-pattern>/*</url-pattern>

配置单个请求:WebFilter("/index.jsp")
配置多个请求:
WebFilter(
 filterName="";
 urlPatterns={"/*"};//配置过滤多个
配置过滤器的初始化参数:
initParams = {
	@WebInitParam(name="name",value="张三"),
	@WebInitParam(name="sex",value="男")
	}
)

监听器

定义

  • 一个实现特定接口的普通java程序,这个java程序专门用来监听另一个就java对象的方法的调用,或属性的改变当被监听对象发送上述事件后,监听程序的某个方法就会被执行。
  • 监听器包:listener

使用:

1:实现ServlrtContextListtenner
2.配置监听器(位置:1.web.xml/2.web注解配置)
  <listenner>
      <listenner-class>地址 </listenner-class>
  </listenner>
@WebSevlet("")
3.方法
  • 应用程序被销毁
@Override
	public void contextDestroyed(ServletContextEvent arg0) {
		// TODO Auto-generated method stub
		
	}
  • 应用程序初始化
@Override
	public void contextInitialized(ServletContextEvent arg0) {
		// TODO Auto-generated method stub
		
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值