一、过滤器Filter

1.filter的简介

filter是对客户端访问资源的过滤,符合条件放行,不符合条件不放行,并且可以对目   标资源访问前后进行逻辑处理

2.快速入门

步骤:

1)编写一个过滤器的类实现Filter接口

2)实现接口中尚未实现的方法(着重实现doFilter方法)

3)在web.xml中进行配置(主要是配置要对哪些资源进行过滤)

(1)创建Filter实现Filter

拦截之后要放行。

package 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;
public class FirstFilter 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 {
// 自动拦截请求
System.out.println("filter running.......");
// 放行
chain.doFilter(request, response);
} @Override
public void destroy() {
// TODO Auto-generated method stub } }

(2)Web.xml配置一下

<filter>
<filter-name>FirstFilter</filter-name>
<filter-class>filter.FirstFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>FirstFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

/*代表所有请求,如果不放行,客户端得不到响应。

3.Filter的API详解

(1)filter生命周期及其与生命周期相关的方法

Filter接口有三个方法,并且这个三个都是与Filter的生命相关的方法

init(Filterconfig):代表filter对象初始化方法 filter对象创建时执行

doFilter(ServletRequest,ServletResponse,FilterCha):代表filter执行过滤的核心方法,如果某资源在已经被配置到这个filter进行过滤的话,那么每次访问这个资源都会执行doFilter方法

destory():代表是filter销毁方法 当filter对象销毁时执行该方法

Filter对象的生命周期:

Filter何时创建:服务器启动时就创建该filter对象

中间在客户端访问过滤器过滤的资源时调用doFilter方法

Filter何时销毁:服务器关闭时filter销毁

(2)Filter的API详解

1)init(FilterConfig)

其中参数config代表 该Filter对象的配置信息的对象,内部封装是该filter的配置信息。

aaarticlea/png;base64,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" alt="" />

2)destory()方法

filter对象销毁时执行

3)doFilter方法

doFilter(ServletRequest,ServletResponse,FilterChain)

其中的参数:

ServletRequest/ServletResponse:每次在执行doFilter方法时 web容器负责创建一个request和一个response对象作为doFilter的参数传递进来。该request个该response就是在访问目标资源的service方法时的request和response。

FilterChain:过滤器链对象,通过该对象的doFilter方法可以放行该请求

aaarticlea/png;base64,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" alt="" />

4.Filter的配置

<filter>
<filter-name>Filter2</filter-name>
<filter-class>filter.Filter2</filter-class>
<init-param>
<param-name>name</param-name>
<param-value>dahua</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Filter2</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>

也可以直接拦截Servlet(等价于url-pattern   /sertvle1)

<filter-mapping>
<filter-name>Filter2</filter-name>
<servlet-name>servlet</servlet-name>
</filter-mapping>

①url-pattern配置时(不用写工程名字,直接写路径)

1)完全匹配  /sertvle1

2)目录匹配  /aaa/bbb/* ----最多的

/user/*:访问前台的资源进入此过滤器

/admin/*:访问后台的资源时执行此过滤器

3)扩展名匹配  *.abc  *.jsp

注意:url-pattern可以使用servlet-name替代,也可以混用

dispatcher:访问的方式(了解)

REQUEST:默认值,代表直接访问某个资源时执行filter

转发拦截一次,重定向2次

FORWARD:转发时才执行filter

INCLUDE: 包含资源时执行filter

ERROR:发生错误时 进行跳转是执行filter

5.总结Filter的作用?

1)公共代码的提取

2)可以对request和response中的方法进行增强(装饰者模式/动态代理)

3)进行权限控制

6.总结

1.Filter先写实现方法,再在web.xml中配置(名字,映射以及拦截的请求)

url-pattern配置时  不写工程名字

1)完全匹配  /sertvle1

2)目录匹配  /aaa/bbb/* ----最多的

/user/*:访问前台的资源进入此过滤器

/admin/*:访问后台的资源时执行此过滤器

3)扩展名匹配  *.abc  *.jsp

2.过滤器的执行顺序根据你在web.xml中映射的顺序执行。

3.可以过滤用户请求:

package web.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.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import daomain.User; public class RequestFilter 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
HttpServletRequest req =(HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
HttpSession session = req.getSession();
User user = (User) session.getAttribute("user");
if(user==null){
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
else{
System.out.println(user);
}
chain.doFilter(request, response);
} @Override
public void destroy() {
// TODO Auto-generated method stub } }

二、设置编码格式

1.post提交

(1)编写过滤器代码

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
request.setCharacterEncoding("utf-8");
chain.doFilter(request, response);
}

(2)Web.xml中队所有请求拦截

(3)后台直接接受post提交的中文数据

2.get提交

接收前端:

String para = request.getParameter("name");
String para2 = new String(para.getBytes("iso-8859-1"),"utf-8");

向前端发送

//设置response查询的码表
//response.setCharacterEncoding("UTF-8"); //通过一个头 Content-Type 告知客户端使用何种码表
//response.setHeader("Content-Type", "text/html;charset=UTF-8"); // 这句与上句等价,开发中只用写这句,tomcat自动设置第一句
response.setContentType("text/html;charset=UTF-8");

三、装饰者模式解决乱码

package filter;

import java.io.IOException;
import java.io.UnsupportedEncodingException; 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.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper; public class EncodingFilter implements Filter{ @Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException { //request.setCharacterEncoding("UTF-8"); //在传递request之前对request的getParameter方法进行增强
/*
* 装饰者模式(包装)
*
* 1、增强类与被增强的类要实现统一接口
* 2、在增强类中传入被增强的类
* 3、需要增强的方法重写 不需要增强的方法调用被增强对象的
*
*/ //被增强的对象
HttpServletRequest req = (HttpServletRequest) request;
//增强对象
EnhanceRequest enhanceRequest = new EnhanceRequest(req); chain.doFilter(enhanceRequest, response); } @Override
public void destroy() { } @Override
public void init(FilterConfig filterConfig) throws ServletException { } } class EnhanceRequest extends HttpServletRequestWrapper{ private HttpServletRequest request; public EnhanceRequest(HttpServletRequest request) {
super(request);
this.request = request;
} //对getParaameter增强
@Override
public String getParameter(String name) {
String parameter = request.getParameter(name);//乱码
try {
parameter = new String(parameter.getBytes("iso8859-1"),"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return parameter;
} }

 四、过滤登录的过滤器

 <filter>
<filter-name>sessionFilter</filter-name>
<filter-class>com.FlyPig.util.filter_session</filter-class>
</filter> <filter-mapping>
<filter-name>sessionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

filter代码如下:起到了过滤登陆界面login.jsp和根路径以外的过滤

 1 package com.FlyPig.util;
2
3 import java.io.IOException;
4
5 import javax.servlet.Filter;
6 import javax.servlet.FilterChain;
7 import javax.servlet.FilterConfig;
8 import javax.servlet.ServletException;
9 import javax.servlet.ServletRequest;
10 import javax.servlet.ServletResponse;
11 import javax.servlet.http.HttpServletRequest;
12 import javax.servlet.http.HttpServletResponse;
13 import javax.servlet.http.HttpSession;
14
15 public class filter_session implements Filter {
16 private String encoding;
17
18 public filter_session() {
19 }
20
21 public void init(FilterConfig filterconfig) throws ServletException {
22 encoding = "utf-8";
23 }
24
25 public void doFilter(ServletRequest servletrequest,
26 ServletResponse servletresponse, FilterChain filterchain)
27 throws IOException, ServletException {
28 servletrequest.setCharacterEncoding(encoding);
29 servletresponse.setCharacterEncoding(encoding);
30 HttpServletRequest req=(HttpServletRequest)servletrequest;
31 HttpSession session=req.getSession();
32 HttpServletResponse resp=(HttpServletResponse) servletresponse;
33
34 String url=req.getRequestURI();
35 System.out.println(url);
36 if(!url.equals("/FlyPig")&&!url.equals("/FlyPig/login.jsp")){
37 if(session.getAttribute("username")==null||session.getAttribute("username")==""){
38 resp.sendRedirect("login.jsp");
39 return ;
40 }
41 }
42
43
44 filterchain.doFilter(servletrequest, servletresponse);
45 }
46
47 public void destroy() {
48 }
49 }

补充:过滤器在请求前可以执行一次,请求后也可以执行:

//前处理

filterchain.doFilter(servletrequest, servletresponse);

//后处理

  也就是说在请求完成并且页面载入完成之后会执行后处理,从Java的语法来看放行之后方法没有retur,所以方法会继续执行。用于在处理所有请求的一次请求前和请求后处理。

【过滤器】web中过滤器的使用与乱码问题解决的更多相关文章

  1. Java Web 中 过滤器与拦截器的区别

    过滤器,是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法u ...

  2. Web版需求征集系统所得2,servlet中request.getParameter获值乱码问题解决

    servlet获值乱码问题解决 解决办法一(最简单有效) request.setCharacterEncoding("utf-8"); 解决办法二 因为乱码问题的产生是因为默认格式 ...

  3. web.xml中对post请求的乱码问题解决

    直接在web.xml中添加如下代码: <filter> <filter-name>encodingFilter</filter-name> <filter-c ...

  4. Android 代码中文字在手机上显示乱码问题解决方法

    在学习Android过程中,用于测试时发现,代码中的中文在真机上会显示乱码, 网上查阅了些资料,参考如下: http://www.androidchina.net/3024.html http://b ...

  5. 【thrift】vc中使用thrift中文字符串乱码问题解决

    问题描述: VC中使用Apache thrift时,如果字符串中包含中文,会出现乱码问题,这个问题的原因是由于thrift为了达到跨语言交互而使用了UTF-8格式发送字符串,这点对java或者C#不会 ...

  6. AD18 PCB中添加中文字符串显示乱码问题解决

    该问题是由于字符串的自体类型设置问题,AD默认是[stroke],我们点击[TrueType]即可正常显示.PS:AD18搞啥呢,默认显示输入内容不行吗,找半天!!!

  7. mysql在cmd中查询到的汉字乱码问题解决 方法一

    只要执行如上两个 set character_set_connection = gbk; set character_set_results= gbk; 将编码格式转换成gbk即可

  8. 初学Java Web(8)——过滤器和监听器

    什么是过滤器 过滤器就是 Servlet 的高级特性之一,就是一个具有拦截/过滤功能的一个东西,在生活中过滤器可以是香烟滤嘴,滤纸,净水器,空气净化器等,在 Web 中仅仅是一个实现了 Filter ...

  9. Java web中常见编码乱码问题(一)

    最近在看Java web中中文编码问题,特此记录下. 本文将会介绍常见编码方式和Java web中遇到中文乱码问题的常见解决方法: 一.常见编码方式: 1.ASCII 码 众所周知,这是最简单的编码. ...

随机推荐

  1. eclipse官方网址、各个版本的下载

    Eclipse3.1后各版本代号 (2013-07-10 20:48:42) 转载▼   分类: Java Eclipse 3.1 版本代号 IO [木卫1,伊奥]  Eclipse 3.2 版本代号 ...

  2. Java知识点整理(三)

    如何设计出高可用的分布式架构 分布式架构 CDN简介 分布式缓存和本地缓存区别 高并发场景常用技术解决方案 JVM优化示例 Docker和JVM区别 Java开发人员需要注意的五大Docker误区 D ...

  3. postman 断言学习

    请求 url :https://www.v2ex.com/api/nodes/show.json?name=python get请求 postman发起请求并做断言 断言: tests["B ...

  4. 【移动端debug-1】css3中box-shadow的溢出问题

    今天做项目遇到一个box-shadow的溢出父容器的问题,如下面的代码中,子容器inner的box-shadow在没有任何设置的情况下是溢出父容器的. 代码: <!DOCTYPE html> ...

  5. 第89天:HTML5中 访问历史、全屏和网页存储API

    一.访问历史 API 通过history对象实现前进.后退和刷新之类的操作 history新增的两个方法history.replaceState()和history.pushState()方法属于HT ...

  6. BZOJ 1237 配对(DP)

    给出两个长度为n的序列.这两个序列的数字可以连边当且仅当它们不同,权值为它们的绝对值,求出这个二分图的最小权值完全匹配.没有输出-1. n<=1e5.用KM会TLE+MLE. 如果连边没有限制的 ...

  7. 二维RMQ模板

    int main(){ ; i <= n; i++) ; j <= m; j++) { scanf("%d", &val[i][j]); dp[i][j][][ ...

  8. Linux内核分析第七周学习笔记——Linux内核如何装载和启动一个可执行程序

    Linux内核分析第七周学习笔记--Linux内核如何装载和启动一个可执行程序 zl + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study. ...

  9. 米勒罗宾素性测试(Miller–Rabin primality test)

    如何判断一个素是素数 效率很高的筛法 打个表 (素数的倍数一定是合数) 就可以解决问题. 筛选法的效率很高,但是遇到大素数就无能为力了. 米勒罗宾素性测试是一个相当著名的判断是否是素数的算法 核心为费 ...

  10. bzoj2956: 模积和(数论)

    先算出无限制的情况,再减去i==j的情况. 无限制的情况很好算,有限制的情况需要将式子拆开. 注意最后的地方要用平方和公式,模数+1是6的倍数,于是逆元就是(模数+1)/6 #include<i ...