zoukankan      html  css  js  c++  java
  • JavaWeb_day06_Filter过滤器

    本文为博主辛苦总结,希望自己以后返回来看的时候理解更深刻,也希望可以起到帮助初学者的作用.

    **转载请注明 出自 : luogg的博客园 ** 谢谢配合!

    day06

    request 对象常用方法

    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述
    这里写图片描述

    response 对象常用方法

    这里写图片描述

    302 : 页面跳转

    Servlet过滤器

    1.统一整个webApp应用的编码方式
    2.禁止浏览器缓存webApp动态资源
    3.控制浏览器缓存静态资源
    4.实现URL权限控制
    5.过滤敏感内容

    web-xml中设置 : url-pattern /* 过滤所有页面

    chain.doFilter(request, response);//放行,过滤拦截

    filter生命周期 :

    启动服务器的时候创建并且初始化,
    访问页面的时候调用doFilter方法,
    关闭服务的时候生命结束.

    filter对象只会创建一次,init方法只会执行一次,destroy方法也只会执行一次


    filter 应用

    一.设置页面字体,还有post表单提交的时候乱码.

    1.创建filter,并且配置web-xml
    2.将web-xml中设置为/*
    在filter-class下边加入 : 因为一般总的控制页面编码格式是在web-xml修改的

    <init-param>
       <param-name>encoding</param-name>
       <param-value>utf-8</param-value>
    </init-param>
    
    public class EncodingFilter implements Filter {
    	private String encoding = "utf-8";
    
    	public void destroy() {
    	}
    
    	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        //4.在doFilter方法下边,设置页面编码格式还有post请求表单编码格式 
    		request.setCharacterEncoding(encoding);//设置post表单中文乱码
    		response.setContentType("text/html;charaset="+encoding);
    		chain.doFilter(request, response);
    	}
    
    	public void init(FilterConfig fConfig) throws ServletException {
    //3.在Filter页面定义一个`private String encoding = "utf-8";`  
    //在Filter页面,init方法下边 :   调用xml中设置的encoding
    		String en = fConfig.getInitParameter(encoding);
    		if(en != null && !"".equals(encoding)){
    			encoding = en;
    		}
    	}
    }
    

    最后在用户登录界面,用户名输入中文,在控制台测试就好了.


    二.用户登录校验,不让用户直接登录到主页

    清理缓存之后,第一次只可以进去index.html输入用户名密码界面,当输入正确密码之后,进入
    主页,但是在此直接输入主页地址,还是可以直接进来,是因为session还存在,可以获取到session name.

    public class UrlFilter implements Filter {
    	/**
    	 * 用户登录校验,排除登录页面和校验页面
    	 */
    	public void destroy() {
    	}
    
    	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
    			throws IOException, ServletException {
    		HttpServletRequest req = (HttpServletRequest) request;
    		HttpServletResponse rep = (HttpServletResponse) response;
    		String uri = req.getRequestURI();
    		System.out.println(uri);
    		HttpSession session = req.getSession();
    		Object obj = session.getAttribute("name");
    		if (uri.endsWith("index.html") || uri.endsWith("CheckUser")) {//uri以xxx结尾
    			chain.doFilter(request, response);
    		} else {
    			if (obj == null) {
    				rep.sendRedirect("/wx_web_day02/index.html");
    			} else {
    				chain.doFilter(request, response);
    			}
    		}
    	}
    
    	public void init(FilterConfig fConfig) throws ServletException {
    	}
    }
    

    response.sendRedirect("BSessionTest");//重定向使用了两次过滤器
    request.getRequestDispatcher("BSessionTest").forward(request, response);//内部转发使用了一次过滤器

    三.过滤掉敏感词功能

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    		String s = request.getParameter("userName");
    		if(s.indexOf('猪')!=-1){
    			s = s.replace('猪', '*');
    			request.setAttribute("userName", s);
    			System.out.println(s);
    		}
    		
    		chain.doFilter(request, response);
    	}
    
  • 相关阅读:
    Contiki学习笔记  第一个程序:Hello World
    contiki学习笔记---process结构体
    MYSQL碰到The total number of locks exceeds the lock table size 问题解决记录
    navicat连接mysql查询结果中文都是?号(C#)
    C#使用OracleBulkCopy
    解决IIS应用程序池默认回收导致程序崩溃
    构建可读性更高的 ASP.NET Core 路由机制
    .Net(C#)汉字和Unicode编码互相转换
    聊聊c#字符串拼接
    VS2010到VS2019各个版本的密钥
  • 原文地址:https://www.cnblogs.com/luogg/p/6017566.html
Copyright © 2011-2022 走看看