java web:过滤器

过滤器

 

1. 概念


Filter  过滤器
可以对请求(响应)进行过滤

请求 --> 过滤器1 --> 过滤器2 --> .... --> 过滤器n --> 目的地(Servlet, jsp)

 

2. 编写过滤器的步骤


1. 实现Filter接口
2. 在类上添加@WebFilter(urlPattern="要过滤的目标路径")
3. 在doFilter方法中控制请求是否前进到下一个过滤器
 

// 调用此方法,表示请求继续前进,不调用,请求就停止不前了
filterChain.doFilter(request, response); 

 

3. 匹配路径的三种写法


1) 精确匹配

目标路径是过滤器路径就是什么
例如: /s1  /s2 ...
2) 前缀匹配
例如:有两个servlet,路径分别是 /user/s1, /user/s2
过滤器的匹配路径就可以写为: /user/ *

/ * 表示匹配此应用程序中所有路径


3) 后缀匹配:
*.后缀
注意: 后缀匹配不要以/开头, 精确匹配和前缀匹配需要以/开头

*.jsp 表示在请求到达所有jsp之前,经过此过滤器


 5. 多个过滤器


使用@WebFilter注解去控制匹配路径时,多个过滤器都匹配目标,执行顺序和过滤器类名有关。
按类名的字母顺序排序

 

 6. 过滤器的应用


应用1: 字符编码过滤器
        在过滤器中统一调用 request.setCharacterEncoding方法
应用2: 登录检查

HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpSession session = request.getSession();
// 检查是否有登录标记
if(session.getAttribute("isLogin") == null) { // 如果没有找到
    request.getRequestDispatcher("/login.jsp").forward(request, servletResponse);
    return;
} else { // 找到登录标记, 放行请求,让请求继续前进
    filterChain.doFilter(request, servletResponse);
}


应用3: 自动登录


1) 过滤器
2) cookie (把用户名和密码的信息记录在cookie)

 

 7. jsp 隐式对象(9个)

config      jsp的配置信息
page        jsp自身对象(this)
exception   异常对象(isErrorPage=true)

response 响应
out      响应字符流

pageContext 页面作用域
request     请求作用域 变量类型 HttpServletRequest
session     会话作用域 (同一个客户端的多次请求)  HttpSession
application 应用作用域 变量类型 ServletContext (上下文)

    他们都有如下方法
    .setAttribute("名", 值);   // 设置
    Object 值 = .getAttribute("名"); // 获取
    Object 值 = .removeAttribute("名"); // 删除

作用域(Scope)

<%// 向page作用域存入内容
//    pageContext.setAttribute("name", "张三"); // 同一页面中的信息
    request.setAttribute("name", "李四");    // 一次请求有效的信息(例如servlet存入结果,jsp获取结果)
    session.setAttribute("name", "王五"); // 每个用户(浏览器)独有的信息(例如购物车信息)
    application.setAttribute("name", "赵六"); // 适合放全局信息(城市信息, 类别信息)
    %>

    <!-- 从page作用域获取内容-->
    <%= pageContext.getAttribute("name")%>
    <!--  从page作用域获取内容(推荐) -->
    ${pageScope.name}

    <!-- 从request作用域取-->
    <%= request.getAttribute("name")%>
    <!-- 从request作用域取(推荐)-->
    ${requestScope.name}

    <!-- 从session作用域取值 -->
    <%= session.getAttribute("name")%>
    <!-- 从session作用域取值(推荐) -->
    ${sessionScope.name}

    <!-- 从application作用域取值 -->
    <%= application.getAttribute("name")%>
    <!-- 从application作用域取值(推荐) -->
    ${applicationScope.name}

    <hr/>
    <!-- 在el表达式取作用域变量时,不加前缀,先搜索pageScope, 再搜索requestScope, 继续搜索sessionScope, 再搜索applicationScope-->
    ${name}


8. el表达式中的隐式对象11个

pageScope           page作用域   类型是map集合
requestScope    request作用域 类型是map集合
sessionScope    会话作用域    类型是map集合
applicationScope 应用作用域   类型是map集合

param           代表所有请求参数集合 类型是map集合
paramValues      代表所有请求参数集合(用来获取多值参数)

cookie           代表请求中所有的cookie集合 map类型 
                key是cookie的name, value是cookie对象(name,value)

header         获取请求头的内容 类型是map集合f
                 key是请求头中key的名称
headerValues    获取请求头的内容(用来获取多值)
initParam      每个jsp可以配置一个初始化参数
    initParam.key
pageContext


 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值