附:实体类

1.配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list> <!-- 前端控制器
/=默认的url-pattern
/a/b/c /a /a/d/c
/a/d
/a
/
*注意:此控制器默认加载/WEB-INF下的xxx-servlet.xml文件
:其中xxx等于【DispatcherServlet的配置名】
-->
<servlet>
<servlet-name>mvc62</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:mvc62.xml</param-value>
</init-param>
<!-- 随项目启动而启动 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc62</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping> <!-- 专治Post请求参数乱码 -->
<filter>
<filter-name>encoding62</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<!-- 将请求的编码方式设置为utf-8 -->
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding62</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

2.配置SpringMVC.xml

<?xml version="1.0" encoding="utf-8"?>
<!-- xmlns:xml name space 是每一个schema唯一标识 -->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd"> <!-- 扫描所有控制器中的注解 -->
<context:component-scan base-package="com.c61.controller"></context:component-scan>
<!--
MVC中基于注解开发,导入注解驱动
<mvc:annotation-driven/>
-->
<mvc:annotation-driven>
<mvc:message-converters>
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<!-- 支持的格式:application/json -->
<value>application/json</value>
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
<!-- 视图解析器:解析视图
控制器方法的返回值,会被视图解析器捕获。"abc"
根据捕获的内容,解析出一个视图地址:/abc.jsp
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!--
静态资源:html,js,css,jpg
访问404 解决
-->
<mvc:default-servlet-handler/> <!-- 声明异常处理器 -->
<bean class="com.c61.ex.resolver.MyExceptionResolver"></bean> <!-- 拦截器配置 -->
<!--
/a/b
inter1
inter2
拦截顺序:先配置先拦截
具体顺序:pre1==pre2==contorller==post2==post1==after2==after1
-->
<mvc:interceptors>
<mvc:interceptor>
<!-- 定义要拦截的路径
/inter/* 匹配 /inter/a /inter/b inter/cssdafasfsafs
不能匹配/inter/a/b
/inter/** 匹配 /inter/a /inter/xxsjaflsajf /inter/a/b/c/e/d/xxxcvx
*注意:exclude-mapping不能单独使用。要配合mapping使用
:在mapping匹配的范围中排除一些个。
-->
<mvc:mapping path="/inter/**"/>
<mvc:mapping path="/a/b"/>
<mvc:mapping path="/c/**"/>
<mvc:exclude-mapping path="/inter/test/*"/>
<mvc:exclude-mapping path="/c/b/**"/>
<!-- 声明拦截器 -->
<bean class="com.c61.interceptor.MyInterceptor"/>
</mvc:interceptor>
<mvc:interceptor>
<!-- 定义要拦截的路径 -->
<mvc:mapping path="/inter/test"/>
<!-- 声明拦截器 -->
<bean class="com.c61.interceptor.MyInterceptor2"/>
</mvc:interceptor>
</mvc:interceptors>
<!-- 声明文件上传解析器
注意:此解析器,id必须为:multipartResolver
-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 最大允许的上传大小 byte -->
<property name="MaxUploadSize" value="2097152"></property>
</bean>
<!--
注册,验证码生成器
-->
<bean id="captcha" class="com.google.code.kaptcha.servlet.KaptchaExtend">
<constructor-arg>
<props>
<!-- 是否有边框 边框颜色 边框粗细 -->
<prop key="kaptcha.border">no</prop>
<prop key="kaptcha.border.color">105,179,90</prop>
<prop key="kaptcha.border.thickness">20</prop>
<prop key="kaptcha.textproducer.font.color">black</prop>
<prop key="kaptcha.image.width">200</prop>
<prop key="kaptcha.image.height">50</prop>
<prop key="kaptcha.textproducer.font.size">40</prop>
<prop key="kaptcha.session.key">code61</prop>
<prop key="kaptcha.textproducer.char.length">4</prop>
<prop key="kaptcha.textproducer.font.names">Arial,Courier</prop>
<!-- <prop key="kaptcha.background.clear.from">black</prop>
<prop key="kaptcha.background.clear.to">255,0,0</prop> -->
</props>
</constructor-arg>
</bean>
</beans>

3.配置控制器

package com.c61.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping; import com.c61.service.UserService;
import com.c61.service.UserServiceImpl; @Controller
@RequestMapping("/inter")
public class InterceptorController {
@RequestMapping("/test")
public String testInter(){
System.out.println("Controller testAAA");
return "forward:/index.jsp";
}
@RequestMapping("/test/b")
public String testInter2(){
System.out.println("Controller testBBB");
return "forward:/index.jsp";
}
@RequestMapping("/test/c/e/f")
public String testInter3(){
System.out.println("Controller testCCC");
return "forward:/index.jsp";
}
}

4.配置拦截器

Class : MyInterceptor

package com.c61.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView; public class MyInterceptor implements HandlerInterceptor{ /**
* 在Controller之前执行(常用)
* 抽取Controller中的冗余功能
*/
public boolean preHandle(HttpServletRequest req, HttpServletResponse res,
Object handler) throws Exception {
System.out.println("pre Handle");
//return false;//中断请求,则后续的controller,postHandle...都不在执行
//return true;//请求继续
return true;
}
/**
* 在Controller之后,在响应之前,执行(了解)
* 可以做视图和数据的最终定制
*
*/
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
Object arg2, ModelAndView mav) throws Exception {
System.out.println("post Handle");
}
/**
* 在视图渲染完毕后执行(了解)
* 资源回收
*/
public void afterCompletion(HttpServletRequest req,
HttpServletResponse res, Object handler, Exception ex)
throws Exception {
System.out.println("after Comletion");
} }

Class : MyInterceptor2

package com.c61.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView; public class MyInterceptor2 implements HandlerInterceptor{ /**
* 在Controller之前执行(常用)
* 抽取Controller中的冗余功能
*/
public boolean preHandle(HttpServletRequest req, HttpServletResponse res,
Object handler) throws Exception {
System.out.println("pre Handle222");
//return false;//中断请求,则后续的controller,postHandle...都不在执行
//return true;//请求继续
String path=req.getContextPath();
res.sendRedirect(path+"/index.jsp");
return false;
}
/**
* 在Controller之后,在响应之前,执行(了解)
* 可以做视图和数据的最终定制
*
*/
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
Object arg2, ModelAndView mav) throws Exception {
System.out.println("post Handle222");
}
/**
* 在视图渲染完毕后执行(了解)
* 资源回收
*/
public void afterCompletion(HttpServletRequest req,
HttpServletResponse res, Object handler, Exception ex)
throws Exception {
System.out.println("after Comletion222");
} }

5.配置视图

View : index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head> <body>
<img height="100px" width="100px" src="${pageContext.request.contextPath}/up61/${requestScope.name}"/>
</body>
</html>

Client : inter/test

Console :

Client :

Client : inter/test/b

Console :

Client :

Client : inter/test/c/e/f

Console :

Client :

1 定制

public class MyInterceptor implements HandlerInterceptor{
/**
* 在Controller之前执行(常用)
* 抽取Controller中的冗余功能
*/
public boolean preHandle(HttpServletRequest req, HttpServletResponse res,
Object handler) throws Exception {
//return false;//中断请求,则后续的controller,postHandle...都不再执行
//return true;//请求继续
if(xxx){
String path=req.getContextPath();
res.sendRedirect(path+"/index.jsp");//中断之前设置错误视图
return false;
}
return true
}
/**
* 在Controller之后,在响应之前,执行(了解)
* 可以做视图和数据的最终定制
*/
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
Object arg2, ModelAndView mav) throws Exception {
}
/**
* 在视图渲染完毕后执行(了解)
* 资源回收
*/
public void afterCompletion(HttpServletRequest req,
HttpServletResponse res, Object handler, Exception ex)
throws Exception {
}
}

2 配置

<mvc:interceptors>
<mvc:interceptor>
<!-- 定义要拦截的路径 -->
<mvc:mapping path="/inter/test"/>
<mvc:mapping path="/inter/a"/>
<mvc:mapping path="/inter/b"/>
<!-- 声明拦截器 -->
<bean class="com.c61.interceptor.MyInterceptor"/>
</mvc:interceptor>
<mvc:interceptor>
<!-- 定义要拦截的路径 -->
<mvc:mapping path="/inter/**"/>
<mvc:exclude-mapping path="/inter/test/**"/>
<!-- 声明拦截器 -->
<bean class="com.c61.interceptor.MyInterceptor2"/>
</mvc:interceptor>
</mvc:interceptors>
*注意:
1>当有多个拦截器同时拦截时,先配置的先拦截。如过Controller1 先后被inter1和inter2拦截,则具体的拦截路程为:
pre1==pre2==contorller==post2==post1==after2==after1
2>/* 只能匹配一级路径:/a /b /c /xxxxxx
. 却不能匹配:/a/b /e/d/c
/** 能匹配任意多级路径:/a /b /a/b/c /xxs/xxx/xxx/xx
3>mvc:exclude-mapping 不能单独使用,必须配合 mvc:mapping 使用
. 作用是在mvc:mapping的基础上排除一些路径

啦啦啦

SpringMVC -- 梗概--源码--贰--拦截器:Interceptor的更多相关文章

  1. SpringMVC -- 梗概--源码--贰--下载

    1.配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version=&qu ...

  2. SpringMVC -- 梗概--源码--贰--上传

    1.配置web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version=&qu ...

  3. SpringMVC -- 梗概--源码--贰--异常管理

    附:实体类 Class : User package com.c61.entity; import java.text.SimpleDateFormat; import java.util.Date; ...

  4. SpringMVC -- 梗概--源码--贰--RestFul收参(了解) @PathVariable

    1>定制方式: //如下两个路径都可以访问到如下方法,请求路径不同,则name61和pwd61匹配到的值不同 //http://localhost:8989/appname/ful/lime/1 ...

  5. SpringMVC -- 梗概--源码--贰--mvc:annotation-driven

    1>在springMVC的处理流程中,有两个重要组件:HandlerMapping和HandlerAdapter 分别负责解析Handler和执行Handler 2>如果配置了<mv ...

  6. SpringMVC -- 梗概--源码--贰--静态资源的访问问题

    配置:<mvc:default-servlet-handler/> 1>静态资源:除了Servlet.Controller之外的资源,如:js,css,png,html等 2> ...

  7. Spring AOP 源码分析 - 拦截器链的执行过程

    1.简介 本篇文章是 AOP 源码分析系列文章的最后一篇文章,在前面的两篇文章中,我分别介绍了 Spring AOP 是如何为目标 bean 筛选合适的通知器,以及如何创建代理对象的过程.现在我们的得 ...

  8. springMVC源码分析--拦截器HandlerExecutionChain(三)

    上一篇博客springMVC源码分析--HandlerInterceptor拦截器调用过程(二)中我们介绍了HandlerInterceptor的执行调用地方,最终HandlerInterceptor ...

  9. Struts2 源码分析——拦截器的机制

    本章简言 上一章讲到关于action代理类的工作.即是如何去找对应的action配置信息,并执行action类的实例.而这一章笔者将讲到在执行action需要用到的拦截器.为什么要讲拦截器呢?可以这样 ...

随机推荐

  1. Shuffle机制

    一个map task处理一个切片Split,切片是一个范围的数据,和blocksize大小没有必然关系. 1.每个map有一个环形内存缓冲区,用于存储任务的输出.默认大小100MB(io.sort.m ...

  2. android 自定义流布局。实现热门标签。开源库SimpleFlowLayout

    前言 实际项目中需要实现一个 热门搜索 的栏目,类似下图: 由于 子项(子view) 中的文字是可变的,一行能显示的 子项 的个数也无法确定.需要支持自动换行和计算位置. 开源类库 我自己写了个 自定 ...

  3. 【C】——可变参数

    写代码之前要先介绍一下可变参数的备用知识: C函数要在程序中用到以下这些宏: void va_start( va_list arg_ptr, prev_param ); type va_arg( va ...

  4. 小米路由器刷Xiaomi Mi WiFi Mini openwrt

    Current Stable Release - OpenWrt 18.06.1,released on August, 18th 2018. there is also PandoraBox fir ...

  5. node学习笔记1——配置node环境变量及执行node文件

    最近在学习node,今天说一下node的变量环境配置.虽然网上有说,最新版的已经不需要配置这个东东了,但是我的电脑还是得配置.闲话少扯,进入正题: 1.安装node,这步就略过了.就是下载 node, ...

  6. grub的boot loader安装在磁盘上的位置

    在很多资料上介绍grub的引导过程时,都是:bios->MBR->boot loaderboot loader是grub或者lilo.但是他是放在什么位置?很多资料上都没有标明. 通过阅读 ...

  7. C++复合类型(数组)

    1.数组 数组之所以被称为复合类型, 是因为它是使用其他类型来创建的 例如: short months[12]: 那么格式为 typename arrayname [arraysize]  注意:ar ...

  8. SAP OBYC自动记账的实例说明 +VALUE STRING

    对Value String定义:定义了一系列的步骤优先顺序,每一个步骤都连接到不同的过账事务码,而这个顺序本身就称作价值串.价值串你可以看作是一种记账的规则,为物料移动或者发票校验包含了一系列的科目分 ...

  9. 在Unity场景中更改天空盒的步骤

    一.介绍 目的:在Unity场景中制作一个天空盒. 软件环境:Unity 2017.3.0f3,VS2013. 参考 skybox 二.自制一个天空盒 1,创建一个材质material 2,更改属性为 ...

  10. e618. Validating a JTextField When Permanently Losing the Focus

    This example demonstrates a text field that validates its contents when it receives a permanent focu ...