过滤器

过滤器需要两步:
1.创建MyFilter implements Filter和EncodingUtil extends HttpServletRequestWrapper
2.在xml文件中添加触发条件
xml代码块如下:

<!--  编码过滤器filter -->
	 <filter>
		<filter-name>myfilter</filter-name>
		<filter-class>com.zhm.util.MyFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>myfilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

/* 代表是全部文件都触发
*. do代表只有访问.do的文件才会触发

过滤中文乱码和未登录

//MyFilter类:
// 过滤器
public class MyFilter implements Filter {

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

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		
		HttpServletRequest req=(HttpServletRequest)request;
		// 处理中文编码问题
		EncodingUtil reqUtil= new EncodingUtil(req);
		// reqUtil 处理了 中文编码之后的 request 请求
		// 根据是否登录 和操作的路径判断是否拦截
		chain.doFilter(reqUtil, response);
		
	}

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

}

//EncodingUtil类
// 重写  reqeust 获取数据的方法   getParameter
public class EncodingUtil extends HttpServletRequestWrapper {

	// request 	走过滤器 要进行编码处理的  request 请求
	HttpServletRequest request;
	// 构造方法  
	public EncodingUtil(HttpServletRequest request) {
		super(request);
		this.request=request;
	}
	
	// servlet 中 获取数据 调用的  getParameter 方法
	public String getParameter(String name) {
		// 处理     通过 name 获取 value  处理 value 属性值 根据 get /post 请求
		// 获取客户端的请求方式
		String method = request.getMethod();
		if("GET".equals(method)){
			// get 请求
			String newName = request.getParameter(name);// 乱码
			if(newName !=null && !"".equals(newName)){
				// get 处理中文编码格式处理它
				try {
					newName= new String(newName.getBytes("iso-8859-1"),"utf-8");
				} catch (UnsupportedEncodingException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				return newName;
			}
		}
		if("POST".equals(method)){
			// post 请求
			try {
				request.setCharacterEncoding("utf-8");
			} catch (UnsupportedEncodingException e) {
				e.printStackTrace();
			}
		}
		return super.getParameter(name);
	}

}

以上的代码仅供参考,如果运用需要查看是否需要修改

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lemon20120331

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值