-
多个拦截器应用
查看全部 -
preHandle
postHandle
afterCompletion
查看全部 -
过滤器解决中文乱码问题
查看全部 -
拦截器的实现
注册拦截器
配置拦截器的拦截规则
查看全部 -
拦截器在实际项目中,用于对登录权限进行管理,当用户session失效或者未登录状态下,需跳转到登录页进行登录,重写session,并根据是否携带resultUrl 地址进行回跳的操作,次resultUrl 是上一次被拦截的请求URL
查看全部 -
本章对拦截器和过滤器进行了对比,并对课程进行了总结。
区别:
【a】过滤器Filter依赖于Servlet容器,基于回调函数,过滤范围大。
【b】 拦截器Interceptor依赖于框架容器,基于反射机制,只过滤请求。
总结:
拦截器可以处理Web应用中请求的一些通用性问题。
共性问题在拦截器中处理,可以减少重复代码,便于维护。
查看全部 -
本章主要对拦截器的使用场景进行介绍,解决了乱码问题和权限验证问题。
拦截器的使用场景
使用原则:处理所有请求的共同问题。
1、通过拦截器解决乱码问题(可以设置请求编码(preHandle中进行设置)和响应编码设置)。
拦截器类的preHandle方法中,使用HttpServletRequest对象的setCharacterEncoding("utf-8"),这样请求执行之前字符集被更改为utf-8。
2、解决权限验证问题(比如:有些页面只有登陆后,才可以使用)
在拦截器类的preHandle方法中进行判断,如果登入成功时,会往session域中存储一个值,该方法通过参数HttpServletRequest对象的getSesssion().getAttribute(“存储的值”)判断改值是否为null,也就是如果session域中没有该值,则终止请求,通过HttpServletRequest对象的getRequestDispatcher返回登陆页面,并且返回false。
查看全部 -
拦截器的其他实现方式:拦截器类实现另一个接口WebRequestInterceptor,它也会实现三个方法,方法名和前面学到的方法名一样,只不过是参数有一些区别,还有另外一个区别是preHandle方法没有返回值,也就是它不能像实现HandlerInterceptro那样通过false返回值来终止请求,所以实际开发中经常使用HandlerInterceptor接口,这种实现方式在SpringMVC中配置的写法是不变的。
查看全部 -
多个拦截器应用
多个拦截器:定义两个拦截器类并实现HandlerInterceptor,并在SpringMVC配置文件中进行配置。
多个拦截器执行顺序:
查看全部 -
拦截器的方法介绍
1、preHandle方法:在请求被处理之前进行调用,方法返回值为boolean,该返回值代表是否将当前请求进行拦截,如果为true,请求将继续运行,如果为false,请求将被终止(也就是请求不会到达控制器,也不会执行另外两个拦截器方法),该方法有三个参数,HttpServletRequest存储了请求的信息,HttpServletResponse存储了响应的信息,Object表示被拦截的请求目标的对象(当前拦截的就是请求要访问的TestController的viewAll方法,可以理解为TestController的实例)。
扩展:Maven中无法使用EL表达式解决方法?
答:问题因为2.5之前,web.xml文件中的头定义中,el表达式默认是忽略不解析的,有如下三种解决方法。
【1】jsp文件头上添加:<%@ page isELIgnored="false"%>
【2】web.xml中添加定义。(不做详细)
【3】web.xml头中添加定义。(不做详细)
2、postHandle方法:在请求被处理之后进行调用,处了以上三个参数外,还有一个ModelAndView参数,可以通过该参数改变显示的视图。
3、afterCompletion方法:在请求响应结束之后(视图显示之后)才进行调用,主要用于一些资源的销毁,例如连接、流等,不经常使用它。
查看全部 -
拦截器的实现
步骤1:编写拦截器类实现HandlerInterceptor接口,并实现了三个方法(preHandle():到达Controller前执行的方法,postHandle():执行Controller后执行的方法,afterCompletion():执行完Controller后的方法),分别进行了输出,并把preHandle方法返回值false改为true
步骤2:SpringMVC的配置文件(mvc-dispatcher-servlet.xml)中注册拦截器
使用<mvc:interceptor><bean class="拦截器的路径"</bean></mvc:interceptor>,使用它之前需要使用到mvc的命名空间,并且配置了mvc的格式描述。
步骤3:在SpringMVC的配置文件中(mvc-dispatcher-servlet.xml)配置拦截器的拦截规则,通过<mvc:mapping path="拦截路径"/>,例如以viewAll.form结尾的请求(path="/viewAll.form"),如果再增加一个新的方法,访问该方法就不会执行拦截器的方法。查看全部 -
SpringMVC拦截器的工作原理
解决乱码问题:SpringMVC提供的一个过滤器类(在org.springframework.web-3.0.1.RELEASE-A.jar——>org.springframework.web.filter)CharacterEncodingFilter可以解决该问题。
案例:配置SpringMVC过滤器,和过滤器相似通过<filter>和<filter-mapping>进行配置,只不过过滤器的<filter-class>是自己手动编写,而SpringMVC提供的不用再手动去设置字符集(自定义过滤器实现Filter接口,并手动获取request对象,然后再设置字符集为UTF-8,再跳转页面,SpringMVC是固定的,也就是<init-param>中的<param-name>的值是encoding,<param-value>的值是utf-8)
拓展:关于web.xml的url映射的小知识:
< url-pattern>/</url-pattern> 会匹配到/login这样的路径型url,不会匹配到模式为*.jsp这样的后缀型url
< url-pattern>/*</url-pattern> 会匹配所有url:路径型的和后缀型的url(包括/login,*.jsp,*.js和*.html等)注意一下CharacterEncodingFilte只可以过滤post请求编码
查看全部 -
过滤器可以过滤静态资源,拦截器只对请求过滤
查看全部 -
验证登录,都是从 request 请求中获取session 信息
查看全部 -
拦截器,统一处理乱码
查看全部
举报