1.什么是拦截器

是指通过统一的拦截从浏览器发送到服务器的请求来完成相应服务增强

2.拦截器的基本原理

可以通过配置过滤器解决乱码问题

和过滤器非常相似

3.搭建工程

注意jar包

此时的工程是完成后创建的

web.xml

 <servlet>

    <servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param> <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>  

springmvc.xml

<context:component-scan base-package="com.Mrcheng.controller"></context:component-scan>

<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"></bean>
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"></bean> <mvc:annotation-driven></mvc:annotation-driven> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/jsp/"></property>
<property name="suffix" value=".jsp"></property>
</bean>

 ControllerTest.java

@Controller
public class ControllerTest { @RequestMapping("/login")
public String login(){
return "view";
} @RequestMapping("/view")
public ModelAndView views(String name,String pwd){ ModelAndView mv = new ModelAndView();
System.out.println("views方法....");
System.out.println("name:" + name);
System.out.println("pwd:" + pwd);
mv.addObject("msg", "views方法中的msg");
mv.setViewName("success"); return mv;
}
}

index.jsp

用于向view.jsp做跳转

  <body>
This is my JSP page. <br>
<a href="login">to login</a>
</body>

view.jsp

主要做测试的页面

<form action="view" method="post">
user:<input type="text" name="name" ><br>
pwd:<input type="password" name="pwd"><br>
<input type="submit" value="submit">
</form>
</body>

success.jsp

是view.jsp做跳转成功的页面测试

<body>
<h1>success</h1>
msg:${msg}
</body>

test.jsp

主要做拦截请求的测试

<body>
<h4>拦截请求的转移测试</h4> </body>

在Tomcat上运行

乱码测试:

提交之后看控制台的打印结果:

此时输入中文的情况下会有乱码的情况出现

 4.对乱码进行拦截和处理(过滤器)

在web.xml文件中配置filter

配置代码:

 <param-name>encoding</param-name>固定值
 <filter>
<filter-name>filter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf8</param-value>
</init-param>

</filter>
<filter-mapping>
<filter-name>filter</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>

 此时的测试中文是没有乱码的@!!!

5.拦截器的实现

自定义拦截器:

MyInterceptor.java
需要实现接口HandlerInterceptor
public class MyInterceptor implements HandlerInterceptor{
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {       request.setCharacterEncoding("utf-8");
System.out.println("preHandle");
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
System.out.println("postHandle"); }
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
System.out.println("afterCompletion"); }
}

  

在springmvc.xml文件中注册:

<!-- 拦截器注册到mvc框架中 -->
<mvc:interceptors>
<bean class="com.MrChengs.Interceptor.MyInterceptor"></bean>
</mvc:interceptors> 

拦截器的拦截规则:
拦截规则很多
<!-- 拦截器注册到mvc框架中 -->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/view.action"/>
<bean class="com.MrChengs.Interceptor.MyInterceptor"></bean>
</mvc:interceptor> </mvc:interceptors>

  

 6.拦截器的三种方法介绍

1.preHeader  在请求之前被调用
    是否需要将当前的当前的请求拦截下来
    为true表示进行拦截
    为false表示不进行拦截,后面的两个方法不会执行
public boolean preHandle(HttpServletRequest request,  HttpServletResponse response,
Object handler)
request:请求
response:响应
handler:拦截请求的目标的对象  此时是ControllerTest的views方法
 
2.postHandler  在请求处理被调用
public void postHandle(HttpServletRequest request,  HttpServletResponse response,
Object handler,ModelAndView modelAndView)
modelAndView:可以改变显示的视图,或者修改方法发往的视图
测试代码:

3.afterCompletion  在请求结束之后才进行调用
主要用于关闭一些资源的操作
 
 
7.多个拦截器的使用

springmvc.xml配置文件
假设同时拦截所有的请求
<!-- 拦截器注册到mvc框架中 -->
<mvc:interceptors>
<bean class="com.MrChengs.Interceptor.MyInterceptor"></bean>
<bean class="com.MrChengs.Interceptor.MyInterceptor2"></bean>
</mvc:interceptors>

  

执行流程:

preHandle...
preHandle2...
views方法....
name:小明
pwd:xiaoming
postHandle2...
postHandle...
afterCompletion2...
afterCompletion...

当然拦截器的接口不止一个,但是我们在操作中使用最多的还是本次实验中的这个接口。

其余的HandlerInterceptor,WebRequestInterceptor可以在晚上找几篇博文看一下了解即可。

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

springmvc(5)拦截器的更多相关文章

  1. springmvc的拦截器

    什么是拦截器                                                         java里的拦截器是动态拦截action调用的对象.它提供了一种机制可以使 ...

  2. SpringMVC利用拦截器防止SQL注入

    引言 随着互联网的发展,人们在享受互联网带来的便捷的服务的时候,也面临着个人的隐私泄漏的问题.小到一个拥有用户系统的小型论坛,大到各个大型的银行机构,互联网安全问题都显得格外重要.而这些网站的背后,则 ...

  3. SpringMVC经典系列-14自己定义SpringMVC的拦截器---【LinusZhu】

    注意:此文章是个人原创.希望有转载须要的朋友们标明文章出处.假设各位朋友们认为写的还好,就给个赞哈.你的鼓舞是我创作的最大动力,LinusZhu在此表示十分感谢,当然文章中如有纰漏,请联系linusz ...

  4. 基于注解风格的Spring-MVC的拦截器

    基于注解风格的Spring-MVC的拦截器 Spring-MVC如何使用拦截器,官方文档只给出了非注解风格的例子.那么基于注解风格如何使用拦截器呢? 基于注解基本上有2个可使用的定义类,分别是Defa ...

  5. SpringMVC 学习-拦截器 HandlerInterceptor 类

    一.拦截器 HandlerInterceptor 类的作用 SpringMVC 的拦截器类似于 Servlet 开发中的过滤器 Filter,用于对处理器进行预处理和后处理. 二.怎么使用呢? 1. ...

  6. springMVC的拦截器工作流程

    首先,springmvc的拦截器配置在这就不多说了.主要讲一下拦截器的三个方法的执行顺序. preHandle方法一定是最先执行的方法,如果它返回为false下面的方法均不执行. postHandle ...

  7. SpringMVC—Struts2拦截器学习网址整理

    引自:http://blog.csdn.net/wp1603710463/article/details/49982683 SpringMVC—Struts2拦截器学习网址整理 最近项目中遇到权限相关 ...

  8. 转 :关于springmvc使用拦截器

    原博客: http://elim.iteye.com/blog/1750680 SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的 ...

  9. springmvc中拦截器与springmvc全局异常处理器的问题

    最近在做一个练手的小项目, 系统架构中用了springmvc的全局异常处理器, 做了系统的统一异常处理. 后来加入了springmvc的拦截器, 为了一些需求, 在拦截器中的 preHandle 方法 ...

  10. springMVC配置拦截器、过滤器、前端控制器时遇到的问题总结

    1.业务场景:使用vuejs+springMVC+spring框架搭建一个mis系统,集成SSO单点登录: 2.遇到问题:使用interceptor拦截器配置SSO单点登录,直接敲域名,或者ip+端口 ...

随机推荐

  1. C#语言-07.文件操作

    a. 文件操作:适用于相对简单的数据保存 i. 读写文件的步骤: . 创建文件流 . 创建读写器 . 读写文件 . 关闭读写器 . 关闭文件流 ii. FileStream(文件流),它主要用于读写文 ...

  2. GitHub Desktop使用

    1创建仓库 创建文件并提交2~3次 上传到github上,并创建仓库 就可以看到本地记录同步到github上了 回退上一版本(目前只懂一次一次回退) 回退到最原始 文件都删除 暂时记录

  3. c#单例(Singleton)模式实现

    sealed class Singleton { private Singleton(); public static readonly Singleton Instance=new Singleto ...

  4. 基于语法分析器GOLD Parser开发的数学表达式计算器

    最近发现一款文法分析神器,看完官网(http://goldparser.org/)的介绍后感觉很犀利的样子,于是就拿来测试了一番,写了一个数学表达式分析的小程序,支持的数学运算符如下所示:常规运算:+ ...

  5. 【转载】RocketMQ与Kafka对比(18项差异)

    转载自 https://github.com/alibaba/RocketMQ/wiki/rmq_vs_kafka RocketMQ与Kafka对比(18项差异) 淘宝内部的交易系统使用了淘宝自主研发 ...

  6. 模块与包&常用模块

    一.模块的使用 模块定义:一系列功能的集合体 分为三大类:1.自定义模块 2.内置模块(比如 time,os,sys) 3.第三方模块 模块的表现形式: 1.使用python编写的py文件 2.已被编 ...

  7. 关于display:inline-block布局导致错位问题分析

    移动端设计稿需求是这样的,如下图: 未知的几个头像从左至右并行居中排列. 一般可能直接使用float,但是设计图要求头像排列始终是居中的,于是想到要让它们成为行内元素,然后可使用的方法有flex bo ...

  8. 基于svg.js实现对图形的拖拽、选择和编辑操作

    本文主要记录如何使用 svg.js 实现对图形的拖拽,选择,图像渲染及各类形状的绘制操作. 1.关于SVG SVG 是可缩放的矢量图形,使用XML格式定义图像,可以生成对应的DOM节点,便于对单个图形 ...

  9. MySQL基础数据类型

    一 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己的宽度,但宽度是可选的 详细参考: http://www.runoob.com/mysql/mysql-data ...

  10. 2013年未之wpf项目乱述

    不知识为何现已很少在网上发帖,貌似人生的方向已经看的七七八八.要么用心工作,要么自主创业.无论怎么样,对于现在的我来说都是一种淡定的选择.作为一个c#程序员,今年下半年开始使用wpf,更觉得wpf将来 ...