过滤器

过滤器说白了就是一个继承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表达式)




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值