SpringMVC——实现拦截器
1. SpringMVC拦截器的概念与Struts2相同
2. 实现拦截器
(1) 项目结构
(2) 实现HandlerInterceptor接口
1 package com.zhengbin.controller; 2 3 import java.io.IOException; 4 5 import javax.servlet.ServletException; 6 import javax.servlet.http.HttpServletRequest; 7 import javax.servlet.http.HttpServletResponse; 8 9 import org.springframework.stereotype.Controller; 10 import org.springframework.web.bind.annotation.RequestMapping; 11 12 @Controller 13 @RequestMapping("/admin") 14 public class FileuploadController { 15 @RequestMapping("/upload") 16 public void test(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException{ 17 System.out.println("hello controller"); 18 request.setAttribute("msg", "hello controller"); 19 request.getRequestDispatcher("index.jsp").forward(request, response); 20 } 21 }
(3) 配置拦截器
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:p="http://www.springframework.org/schema/p" 5 xmlns:context="http://www.springframework.org/schema/context" 6 xmlns:mvc="http://www.springframework.org/schema/mvc" 7 xsi:schemaLocation=" 8 http://www.springframework.org/schema/beans 9 http://www.springframework.org/schema/beans/spring-beans.xsd 10 http://www.springframework.org/schema/context 11 http://www.springframework.org/schema/context/spring-context.xsd 12 http://www.springframework.org/schema/mvc 13 http://www.springframework.org/schema/mvc/spring-mvc.xsd "> 14 15 <!-- 扫描该包中的所有注解 --> 16 <context:component-scan base-package="com.zhengbin.controller"/> 17 18 <!-- 拦截器的配置 --> 19 <!-- 可配置多个拦截器 --> 20 <mvc:interceptors> 21 <mvc:interceptor> 22 <!-- *注意: 23 以下两个标签要注意先后顺序,否则报错 24 --> 25 <!-- path="/admin/*" 26 表示admin路径和admin下的所有子路径,但不包括子路径以下的路径 27 如/admin/list.do 或 /admin/add.do 但 /admin/list/user.do则不行 28 path="/admin/**" 29 表示admin路径下的所有子路径 30 如 以上可以的都可以,不可以的也可以 31 --> 32 <mvc:mapping path="/*"/> 33 <!-- 配置拦截器 --> 34 <bean class="com.zhengbin.intercept.MyInterceptor"/> 35 </mvc:interceptor> 36 </mvc:interceptors> 37 </beans>
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 3 <display-name>01springmvc_hello</display-name> 4 5 <servlet> 6 <servlet-name>springmvc</servlet-name> 7 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 8 <load-on-startup>1</load-on-startup> 9 <init-param> 10 <param-name>contextConfigLocation</param-name> 11 <param-value>classpath:mvc.xml</param-value> 12 </init-param> 13 <!-- 14 1)load-on-startup元素标记容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法)。 15 2)它的值必须是一个整数,表示servlet应该被载入的顺序 16 3)当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet; 17 4)当值小于0或者没有指定时,则表示容器在该servlet被选择时才会去加载。 18 5)正数的值越小,该servlet的优先级越高,应用启动时就越先加载。 19 6)当值相同时,容器就会自己选择顺序来加载。 20 --> 21 </servlet> 22 <servlet-mapping> 23 <servlet-name>springmvc</servlet-name> 24 <url-pattern>*.do</url-pattern> 25 </servlet-mapping> 26 </web-app>
3.如果被拦截,能否到达指定的页面?
使用HttpServletResponse 或者 HttpServletRequest 可以实现转发或重定向
1 @Override 2 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, 3 Object arg2) throws Exception { 4 // TODO Auto-generated method stub 5 System.out.println("————————————处理前————————————"); 6 response.sendRedirect(request.getContextPath()+"/index.jsp"); 7 //request.getRequestDispatcher("").forward(request, response); 8 return false; 9 }
3.登录拦截器实例
梦想要一步步来!