zoukankan      html  css  js  c++  java
  • 笔记20 拦截器

    场景描述:对特定的请求进行拦截

    基于视图定位进行

    1.视图控制器IndexController.java

     1 package controller;
     2 
     3 import javax.servlet.http.HttpServletRequest;
     4 import javax.servlet.http.HttpServletResponse;
     5 
     6 import org.springframework.web.servlet.ModelAndView;
     7 import org.springframework.web.servlet.mvc.Controller;
     8 
     9 public class IndexController implements Controller {
    10     public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
    11         ModelAndView mav = new ModelAndView("index");
    12         mav.addObject("message", "Hello Spring MVC————————视图定位");
    13         return mav;
    14     }
    15 }

    2.拦截器IndexInterceptor.java

     1 package interceptor;
     2 
     3 import java.text.SimpleDateFormat;
     4 import java.util.Calendar;
     5 
     6 import javax.servlet.http.HttpServletRequest;
     7 import javax.servlet.http.HttpServletResponse;
     8 
     9 import org.springframework.web.servlet.HandlerInterceptor;
    10 
    11 public class IndexInterceptor implements HandlerInterceptor {
    12     /**
    13      * 在业务处理器处理请求之前被调用 如果返回false 从当前的拦截器往回执行所有拦截器的afterCompletion(),再退出拦截器链
    14      * 如果返回true 执行下一个拦截器,直到所有的拦截器都执行完毕 再执行被拦截的Controller 然后进入拦截器链,
    15      * 从最后一个拦截器往回执行所有的postHandle() 接着再从最后一个拦截器往回执行所有的afterCompletion()
    16      */
    17     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
    18         System.out.println("preHandle(),在访问Controller之前被调用");
    19         return true;
    20     }
    21 
    22     /**
    23      * 在业务处理器处理请求执行完成后,生成视图之前执行的动作 可在modelAndView中加入数据,比如当前时间
    24      */
    25     @Override
    26     public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2,
    27             org.springframework.web.servlet.ModelAndView arg3) throws Exception {
    28         // TODO Auto-generated method stub
    29         Calendar calendar = Calendar.getInstance();
    30         String dateString = (new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(calendar.getTime());
    31         System.out.println("postHandle(), 在访问Controller之后,访问视图之前被调用,这里可以注入一个时间到modelAndView中,用于后续视图显示");
    32         arg3.addObject("date", "由拦截器生成的时间:" + dateString);
    33     }
    34 
    35     /**
    36      * 在DispatcherServlet完全处理完请求后被调用,可用于清理资源等
    37      * 
    38      * 当有拦截器抛出异常时,会从当前拦截器往回执行所有的拦截器的afterCompletion()
    39      */
    40     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
    41             throws Exception {
    42         System.out.println("afterCompletion(), 在访问视图之后被调用");
    43     }
    44 
    45 }

    3.myspringmvc-servlet.xml

    修改myspringmvc-servlet.xml以对/index路径进行拦截

    如果要拦截其他路径:
    /** 拦截所有
    /category/** 拦截/category路径下的所有

     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" xmlns:context="http://www.springframework.org/schema/context" 
     4     xmlns:mvc="http://www.springframework.org/schema/mvc" 
     5     xsi:schemaLocation="http://www.springframework.org/schema/beans 
     6      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     7      http://www.springframework.org/schema/context 
     8      http://www.springframework.org/schema/context/spring-context-3.0.xsd
     9      http://www.springframework.org/schema/mvc  
    10      http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
    11      "
    12      >
    13     <bean id="viewResolver"
    14         class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    15         <property name="prefix" value="/WEB-INF/page/" />
    16         <property name="suffix" value=".jsp" />
    17     </bean>
    18  
    19     <bean id="simpleUrlHandlerMapping"
    20         class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    21         <property name="mappings">
    22             <props>
    23                 <prop key="/index">indexController</prop>
    24             </props>
    25         </property>
    26     </bean>
    27     <bean id="indexController" class="controller.IndexController"></bean>
    28     <mvc:interceptors>   
    29         <mvc:interceptor>   
    30             <mvc:mapping path="/index"/> 
    31             <!-- 定义在mvc:interceptor下面的表示是对特定的请求才进行拦截的 --> 
    32             <bean class="interceptor.IndexInterceptor"/>     
    33         </mvc:interceptor> 
    34         <!-- 当设置多个拦截器时,先按顺序调用preHandle方法,然后逆序调用每个拦截器的postHandle和afterCompletion方法 --> 
    35     </mvc:interceptors>
    36          
    37 </beans>

    4.web.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
     5 http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
     6     <servlet>
     7         <servlet-name>myspringmvc</servlet-name>
     8         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     9         <load-on-startup>1</load-on-startup>
    10     </servlet>
    11     <servlet-mapping>
    12         <servlet-name>myspringmvc</servlet-name>
    13         <url-pattern>/</url-pattern>
    14     </servlet-mapping>
    15 </web-app>

    5.index.jsp   WEB-INF/page目录下

     1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
     2 <%
     3 String path = request.getContextPath();
     4 String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
     5 %>
     6 
     7 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
     8 <html>
     9   <head>
    10     <base href="<%=basePath%>">
    11     
    12     <title>My JSP 'index2.jsp' starting page</title>
    13     
    14     <meta http-equiv="pragma" content="no-cache">
    15     <meta http-equiv="cache-control" content="no-cache">
    16     <meta http-equiv="expires" content="0">    
    17     <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    18     <meta http-equiv="description" content="This is my page">
    19     <!--
    20     <link rel="stylesheet" type="text/css" href="styles.css">
    21     -->
    22 
    23   </head>
    24   
    25   <body>
    26     <h1>${message}</h1>
    27     <h2>${date }</h2>
    28   </body>
    29 </html>

    6.测试

  • 相关阅读:
    C#关于HttpClient的应用(二):融云IM集成
    C#关于HttpClient的应用(一):获取IP所在的地理位置信息
    PHP逐字符读取数据
    PHP逐行读取数据
    PHP函数的创建
    PHP数组的创建
    PHP基础学习代码案例
    查看端口号占用情况
    apache错误 Unable to open process" with PID 4!
    NUnit TestFixtureSetup 和 TestFixtureTearDown
  • 原文地址:https://www.cnblogs.com/lyj-gyq/p/8919551.html
Copyright © 2011-2022 走看看