过滤器Filter

来源:互联网 发布:淘宝电子商务公司起名 编辑:程序博客网 时间:2024/06/05 04:25

一,什么是过滤器?
JavaWeb三大组件之一.
Filter,与Servlet很相似,不过过滤器是用来拦截请求的,而Servlet是用来处理请求的.
当用户请求某个Servlet时,会先执行部署在这个请求上的Filter,如果Filter通过,那么会继续执行用户请求的Servlet,如果无法通过Filter,那么就无法执行用户请求的Servlet.
利用Filter可以实现对输入框的校验,如果不通过校验.可以直接拒绝不会去访问Servlet.这样节省了资源.还可以利用Filter解决整个web项目的中文编码问题.
下面展示EncodeFilter文件解决编码问题

@WebFilter(filterName = "EncodingFilter",urlPatterns = "/*")//在注解里的名字写上本过滤器的名字EncodingFilter,url地址因为是检测整个项目,//所以地址写”/*”,”/*"代表所有JSP与所有Servlet.这样只要JSP与Servlet有访问,//就会走到本过滤器来,已达到检测修改整个项目中文编码传输问题public class EncodingFilter implements Filter {    public void destroy() {    }//创建文件的时候选择创建Filter型,这样会直接创建一个过滤器,并且直接将生命周期的三个方法写好,//我们只需要在doFilter()方法,也就是运行时期访问的方法,在这里写判断就好了        public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {        EncodingRequest equest = new EncodingRequest((HttpServletRequest)req);        //这里会调用下面的EncodingRequest的方法        req.setCharacterEncoding("utf-8");        resp.setContentType("text/html;charset=utf-8");        //chain.doFilter(),这个为放行,也就是通过上面的一系列判断之后,如果输入流满足要求,        //会执行这个方法,也就是将请求的参数传入到Servlet中,因为本类检测所有Servlet,所以,        //放行的时候传入到响应的Servlet中,也就是,请求访问的Servlet地址        chain.doFilter(equest, resp);    }    public void init(FilterConfig config) throws ServletException {    }}

由于此方法不能批量过滤get请求的参数,所以我们还需要写一个EncodingRequest的类来转换编码格式

public class EncodingRequest extends HttpServletRequestWrapper {//这里需要继承HttpServletRequestWrapper    private HttpServletRequest request;    public EncodingRequest(HttpServletRequest request) {        super(request);        this.request = request;    }    @Override    public String getParameter(String name) {    //这里要对请求方式进行判断,判断是GET还是POST        if (request.getMethod().toUpperCase().equals("GET")) {        //获得请求中的参数值            String value = request.getParameter(name);            try {            //获得这个值对应的字节数组,将字节数组根据utf-8的格式,创建出一个字符串对象                value = new String(value.getBytes("iso-8859-1"), "utf-8");            } catch (UnsupportedEncodingException e) {                e.printStackTrace();            }            return value;        }else {            try {                request.setCharacterEncoding("UTF-8");                return request.getParameter(name);            } catch (UnsupportedEncodingException e) {                e.printStackTrace();            }        }        return null;    }}

到此,通过过滤器解决全局编码格式就演示完成了,每次用的时候只需要建立一个Encoding的文件夹,将这两个类放进去就可以了

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 国内转机航班第一班延误了怎么办 联程机票下一程航班被取消怎么办 联程机票第一班航班取消怎么办 联程机票第二段航班被取消怎么办 联程航班第一程延误行李怎么办 联程航班未赶上第二程行李怎么办 高铁晚点赶不上下一趟动车怎么办? 动车晚点赶不上下一趟车怎么办 动车晚点导致没赶上下一趟怎么办 浙大三位一体选考分数报错了怎么办 报到证上时间到期了还没报到怎么办 不停的打嗝已经超过24小时怎么办 面对不给下属做主的领导怎么办 法院说退款受伤人去不了证明怎么办 e栈快递柜没收到短信怎么办 京东快递放门卫丢了怎么办 丰巢快递柜收不到取件码怎么办 丰巢快递柜手机号码填错了怎么办 e栈手机号换了取不出来怎么办 买高铁票起点一样终点不一样怎么办 定火车票把名字写错一个字怎么办 火车票坐完车票丢了报销怎么办 客户交给我的钱被骗了怎么办 要证明网络来源的可靠性该怎么办 魅族手机高德地图信号弱怎么办 t恤的印花粘粘的怎么办 从包图网下载的模板素材丢失怎么办 大屏导航的语音功能怎么办用 手机导航不走地图上面走时怎么办 行车撞到步行人死亡师机逃离怎么办 小天才平板电脑不显示了怎么办 高德地图导航不显示车速怎么办 桥梁梁片强度达不到设计要求怎么办 新车交车检验表客户没签字怎么办 中铁快运职工拒绝提货要怎么办 奇瑞a3暖风水箱爆了怎么办 别人挖鱼塘占了我的山土怎么办 自己的鱼塘让别人强行占住了怎么办 公路扩路占地占了鱼塘怎么办? 玉米皮编垫子编好后玉米绳怎么办 入户门门框未预留纱窗位怎么办