springmvc(5)拦截器

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可以在晚上找几篇博文看一下了解即可。

原文地址:https://www.cnblogs.com/Mrchengs/p/9955509.html

时间: 2024-10-31 19:15:19

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

SpringMVC使用拦截器

拦截器也算得上是spring中的一大特色,即使没用过spring的拦截器至少也用过struts2的拦截器,拦截器大多数情况都是用来做权限的控制的,极少情况下用来初始化资源或释放资源.springmvc当然也可以直接使用拦截器,而且使用起来也特别简单. 一  springmvc的拦截器实现方式 springmvc实现拦截器主要有以下2种方式: 1 实现HandlerInterceptor接口 package com.sxt.interceptor; import javax.servlet.htt

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

最近在做一个练手的小项目, 系统架构中用了springmvc的全局异常处理器, 做了系统的统一异常处理. 后来加入了springmvc的拦截器, 为了一些需求, 在拦截器中的 preHandle 方法 中抛出了系统自定义异常, 当时有有个疑惑, 就是抛出的这个异常全局异常处理器怎么处理的. 这里的全局异常处理器时通过实现HandlerExceptionResolver这个借口实现的 要指出的是 resolveException方法 中 handler中代表的是什么,我没遇到这个问题之前我认为这玩

springMVC之拦截器

有两种方法配置spring的拦截器 1. 实现接口: HandleInterceptor public class MyInterceptor1 implements HandlerInterceptor { @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object obj, Exception e) throws Exception { Syste

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

注意:此文章是个人原创,希望有转载需要的朋友们标明文章出处,如果各位朋友们觉得写的还好,就给个赞哈,你的鼓励是我创作的最大动力,LinusZhu在此表示十分感谢,当然文章中如有纰漏,请联系[email protected],敬请朋友们斧正,谢谢. 这部分主要讲解SpringMVC的拦截器的部分,会带着大家完成定义拦截器的两种方式的实例,不多说了,开始-- SpringMVC的拦截器主要是用于拦截用户的请求,并且进行相应的处理,如:权限验证.判断登录等. 定义拦截器的两种方式,如下: 1. 实现接

springMVC的拦截器工作流程

首先,springmvc的拦截器配置在这就不多说了.主要讲一下拦截器的三个方法的执行顺序. preHandle方法一定是最先执行的方法,如果它返回为false下面的方法均不执行. postHandle是在返回再次调用拦截器的方法. afterCompletion方法是最终执行的方法,可以看做finally,用于关闭一些一定要close的东西. 下面附上流程图

SpringMVC 登陆拦截器实现登陆控制

思路,先登陆后,将登陆信息存储在session中,然后通过拦截器,对系统中的页面和资源进行访问拦截,同时对于登陆本身相关的页面和资源不拦截. 实现方法: /**  * 登陆拦截器.  *  * @author leizhimin 2014/6/26 16:08  */ public class LoginInterceptor extends HandlerInterceptorAdapter {     private static final String[] IGNORE_URI = {"

SpringMVC处理器拦截器

一.简介 Spring Web MVC的处理器拦截器(如无特殊说明,下文所说的拦截器即处理器拦截器)类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理.常见应用场景如下: 日志记录:记录请求信息的日志,以便进行信息监控.信息统计.计算PV(Page View)等. 权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接返回到登录页面: 性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时间,在处理完后记录结束时间,从而得到该请求

SpringMVC的拦截器不起作用原因

SpringMVC的拦截器不起作用原因如下图: 这是因为过滤器没有加上这条语句chain.doFilter(request,response);,加上就能进入springMVC的拦截器了,调这个问题整了一天,开始一直没找到原因.

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

基于注解风格的Spring-MVC的拦截器 Spring-MVC如何使用拦截器,官方文档只给出了非注解风格的例子.那么基于注解风格如何使用拦截器呢? 基于注解基本上有2个可使用的定义类,分别是DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter: < bean class ="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerM

SpringMVC:拦截器

SpringMVC:拦截器 2019-10-19 / Java / 狂神说位置: Home » Java » 本页 概述 SpringMVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理.开发者可以自己定义一些拦截器来实现特定的功能. 过滤器与拦截器的区别:拦截器是AOP思想的具体应用. 过滤器 servlet规范中的一部分,任何java web工程都可以使用 在url-pattern中配置了/*之后,可以对所有要访问的资源进行拦截 拦截器 拦截器是