过滤器

来源:互联网 发布:淘宝休闲裤背景素材 编辑:程序博客网 时间:2024/06/04 18:50

过滤器说白了就是一个继承Filter的类.
某些java代码文件运行之前如果想做统一的操作,可以通过过滤器进行实现.
比如想对每个java代码文件进行编码:
创建一个类集成Fileter类

package com.lm.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;/** * Servlet Filter implementation class EncodeFilter */public class EncodeFilter implements Filter {    public void destroy() {        // TODO Auto-generated method stub    }    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)            throws IOException, ServletException {        // TODO Auto-generated method stub        // place your code here        HttpServletRequest request2 = (HttpServletRequest) request;        HttpServletResponse response2 = (HttpServletResponse) response;        request2.setCharacterEncoding("utf-8");        response2.setContentType("text/html;charset=utf-8");        // pass the request along the filter chain        chain.doFilter(request2, response2);    }    public void init(FilterConfig fConfig) throws ServletException {        // TODO Auto-generated method stub    }}

之后在web.xml里面进行如下配置:

<filter>    <display-name>EncodeFilter</display-name>    <filter-name>EncodeFilter</filter-name>    <filter-class>com.lm.filter.EncodeFilter</filter-class>  </filter>  <filter-mapping>    <filter-name>EncodeFilter</filter-name>    <url-pattern>/*</url-pattern>  </filter-mapping>

其中/*是代表全部(每一个)的java代码文件运行之前会先从此过滤器类走一遍,进行编码.

下面是课堂的笔记(有一点乱)

Filter:  1.概念:     servlet2.3版本出现的,servlet规范 servlet,listener ,filter              进行过滤的对象              通过服务器的动态资源和静态资源的请求和响应进行拦截(过滤器)  2.作用:       通过服务器的动态资源和静态资源的请求和响应进行拦截(过滤器)  3.相关api:     FilterChain:过滤器链     FilterConfig:过滤器的配置     方法doFilter(request,response) 放行  3.入门使用:      3.1 定义一个类实现Filter接口重写3个      3.2 在web.xml中注册        <filter>          <filter-name></filter-name>      <filter-class></filter-class>    </filter>    <filter-mapping>      <filter-name></filter-name>      <url-pattern>/*</url-pattern>        </filter-mapping>  4.生命周期:    init(FilterConfig config)  doFilter()  destroy()在web.xml里面:<filter>    <filter-name>myFilter01</filter-name>    <filter-class>MyFilter01</filter-class>     <init-param>     <param-name>ww</param-name>         <param-value>test</param-value>    </init-param>  </filter><filter-mapping>    <filter-name>myFilter01</filter-name>    <url-pattern>/*</url-pattern></filter-mapping>上面的代码意思是:有一个MyFilter01的过滤器(java类),配置一个过滤器变量名称:myFilter01这个拦截器(过滤器)可以拦截所有的程序,如果运行某个Servlet类,或者是jsp等,就会拦截住,不会让其继续执行.(注意:可以有好多个拦截器,至于当运行对应的程序时,哪个拦截器会先拦截见下面的优先级高低.    配置参数init-param       获取值config.getInitParameter(name);配置文件以键值对的方式进行配置的,这样会获取到对应的值test  5.    过滤器的路径:     5.1 <url-pattern>/*</url-pattern>  拦截所有     5.2 <url-pattern>/具体映射路径(示例:指定的servlet路径或者是jsp)</url-pattern>              拦截指定的路径(完全匹配)绝对匹配     5.3 <url-pattern>*.do(拓展名)</url-pattern>   模糊匹配, 只拦截jsp文件     5.4 <url-pattern>/list.do(拓展名)</url-pattern>      5.5 <servlet-name></servlet-name>  根据servlet的名称来拦截指定的servlet     优先级高低: <url-pattern><servlet-name>优先级高                   只有url-pattern的优先级: 按照在web.xml中的注册顺序来决定Servlet映射的路径:   1. <url-pattern>/具体名</url-pattern>    2. <url-pattern>*.do</url-pattern>   3. <url-pattern>/具体名.do</url-pattern>    6.全局编码过滤 给所有页面设置编码。    7.自动登录:login.jsp-- LoginServlet             1.获取请求参数                             对密码进行处理:                       数据库中的密码就是加密过的                   Update user set pwd=MD5(pwd) where uuid= 1;                          登录的时候得把输入的密码进行加密后去数据库查询                     MD5Utils             2.调用业务逻辑(service层)登录  --- 业务逻辑调用dao层             3.登录成功:Servlet                                 记住密码                            勾选了自动登录的框,下一次才自动登录                          1.保存用户名和密码(cookie) 用户名和密码字符串拼接,逗号分割不行,换成&                                  把cookie的信息响应给浏览器 response.addCookie(cookie);                             2.登录的状态 (session)                          request.getSession().setAttribute("user",user);              4. filter            //如果是进入到登录页面(login.jsp或者LoginServlet),                                       手动登录,完善,在登录页面需要显示用户名和密码并且调用service层登录                      如果是非登录页面,且状态是未登录, 直接获取cookie存储的信息,                                      直接调用service登录(filter做的)                 session存储用户的状态信息  cookie(用户信息,放置信息泄漏要加密)                                 登录失败,获取错误信息存储到域对象传递给当前页面进行展示(EL表达式)
原创粉丝点击