關於springMVC中component-scan的問題以及springmvc.xml整理

關於springMVC中component-scan的問題以及springmvc.xml整理
css

1、component-scan問題和解決辦法java

   最近在學習使用springMVC+mybatis開發程序的時候,遇到了一些問題,這些問題有的很容易就解決了,但是有一個問題廢了我一上午的時間,那就是spring中的組件掃描技術, <context:component-scan base-package="***.***.***"></context:component-scan>這個技術可讓咱們少些不少javabean,仍是很方便的,但是我在使用了這樣的技術以後就一直報java.lang.illegalargumentexception這樣的錯誤,非常苦惱,哪裏有參數不合法了,接下來我註釋掉了這個component-scan條目,而後使用了普通的javabean來進行暴露,沒想到居然成功了,所以我能夠判定問題必定出在這個組件掃描component-scan上,看了不少的資料,都是講的component-scan的相關內容,但是不多會說起component-scan與java.lang.illegalargumentexception的錯誤,最終,我總算找到了緣由所在,那就是我是用的是spring3.2的大版本,jdk使用的是1.8大版本,這樣問題就出來了,版本不匹配,在執行jre的時候就不能相互兼容了,必定要注意在使用組件掃描的時候必須使用jdk和spring的版本相對應的jar,否則的話就會出現不合法的參數錯誤,真正正確的搭配版本應該是這樣的:jdk1.7+spring-context-support-3.2.0.RELEASE.jar或者jdk1.8+spring 4.*來搭配,在這裏我使用了前者來解決!解決方法是首先卸載了電腦上的jdk環境,這點能夠經過控制面板的「程序和功能」來完成,剩下的就是下載搭配的jdk版本,而後安裝,安裝以後通常還要重啓一下電腦,固然也能夠不啓動,以後再打開程序,將新的環境jre導入程序中,這樣就能夠了。由於個人這一點疏忽,讓我吃盡了苦頭,費了好長時間,在這裏我不得不說採用xml的方法進行數據即代碼配置,好處是很是大的,可是錯誤就是難以找到哪一個地方出問題了,一旦出現了一個這種相關度很是低的錯誤,每每是很是費時間的,不利於測試和排錯,所以在這裏作一整理和總結。web

2、註解和非註解的方式總結spring

2.一、非註解的方式
    2.1.一、  方法一
數據庫

1         <!-- 第一種配置handler的方法,經過beanname來配置,處理器映射器須要配置爲beanname 2  特別注意這裏處理器適配器不能爲HttpRequestHandlerAdapter,只能爲SimpleControllerHandlerAdapter-->
3          <bean id="itemsController1" name="/queryItems_test.action" class="cn.itcast.ssm.controller.ItemsController1" />
4 
5           <!-- 處理器映射器 將bean的name做爲url進行查找 ,須要在配置Handler時指定beanname(就是url) 全部的映射器都實現 HandlerMapping接口。-->
6          <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" />
7 
8           <!-- 處理器適配器 全部處理器適配器都實現 HandlerAdapter接口 -->
9         <bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />

   2.1.二、 方法二   編程

    這裏注意,咱們在上面定義了handler1,而且映射方式是beanname,而這裏咱們不加改變的,只是利用了其中的一部分信息,id,在這裏使用  SimpleUrlHandlerMapping和SimpleControllerHandlerAdapter一樣完成了訪問對應上面handler的功能的網址的功能,而且同一個handler還能夠映射成不一樣的網址!  值得注意的是,咱們使用這兩種映射器和SimpleControllerHandlerAdapter適配器只能實現具備public class ItemsController1 implements Controller {。。。}這樣生成的handler 。而對於public class ItemsController2 implements HttpRequestHandler {。。。}則無能爲力。這種狀況須要使用org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter另外,對於handler來講使用什麼映射器和是用什麼適配器之間並無什麼強定義的關係,可是適配器必定要和handler的定義保持一致,映射器只與映射器的定義方法有關!!!!
json

 1      <!-- 配置Handler2 -->
 2      <bean id="itemsController2" class="cn.itcast.ssm.controller.ItemsController2" />
 3                 <!--簡單url映射 -->
 4     <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
 5         <property name="mappings">
 6             <props>
 7                 <!-- 對itemsController1進行url映射,url是/queryItems1.action -->
 8                 <prop key="/queryItems1.action">itemsController1</prop>
 9                 <prop key="/queryItems2.action">itemsController1</prop>
10                 <prop key="/queryItems3.action">itemsController2</prop>
11             </props>
12         </property>
13     </bean>
14     <!-- 非註解的適配器 ,適用於public class ItemsController2 implements HttpRequestHandler {。。}方法-->
15     <bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/>
 1 package cn.itcast.ssm.controller;  2 
 3 import java.util.ArrayList;  4 import java.util.List;  5 
 6 import javax.servlet.http.HttpServletRequest;  7 import javax.servlet.http.HttpServletResponse;  8 
 9 import org.springframework.web.servlet.ModelAndView; 10 import org.springframework.web.servlet.mvc.Controller; 11 
12 import cn.itcast.ssm.po.Items; 13 
14 public class ItemsController1 implements Controller { 15 
16  @Override 17     public ModelAndView handleRequest(HttpServletRequest request, 18             HttpServletResponse response) throws Exception { 19         
20         //調用service查找 數據庫,查詢商品列表,這裏使用靜態數據模擬
21         List<Items> itemsList = new ArrayList<Items>(); 22         //向list中填充靜態數據
23         
24         Items items_1 = new Items(); 25         items_1.setName("聯想筆記本"); 26  items_1.setPrice(6000f); 27         items_1.setDetail("ThinkPad T430 聯想筆記本電腦!"); 28         
29         Items items_2 = new Items(); 30         items_2.setName("蘋果手機"); 31  items_2.setPrice(5000f); 32         items_2.setDetail("iphone6蘋果手機!"); 33         
34  itemsList.add(items_1); 35  itemsList.add(items_2); 36 
37         //返回ModelAndView
38         ModelAndView modelAndView =  new ModelAndView(); 39         //至關 於request的setAttribut,在jsp頁面中經過itemsList取數據
40         modelAndView.addObject("itemsList", itemsList); 41         
42         //指定視圖
43         modelAndView.setViewName("items/itemsList"); 44 
45         return modelAndView; 46  } 47 }
ItemsController1代碼
 1 package cn.itcast.ssm.controller;  2 
 3 import java.io.IOException;  4 import java.util.ArrayList;  5 import java.util.List;  6 
 7 import javax.servlet.ServletException;  8 import javax.servlet.http.HttpServletRequest;  9 import javax.servlet.http.HttpServletResponse; 10 
11 import org.springframework.web.HttpRequestHandler; 12 import org.springframework.web.servlet.ModelAndView; 13 
14 import cn.itcast.ssm.po.Items; 15 
16 public class ItemsController2 implements HttpRequestHandler { 17 
18  @Override 19     public void handleRequest(HttpServletRequest request, 20             HttpServletResponse response) throws ServletException, IOException { 21         
22         //調用service查找 數據庫,查詢商品列表,這裏使用靜態數據模擬
23         List<Items> itemsList = new ArrayList<Items>(); 24         //向list中填充靜態數據
25         
26         Items items_1 = new Items(); 27         items_1.setName("聯想筆記本"); 28  items_1.setPrice(6000f); 29         items_1.setDetail("ThinkPad T430 聯想筆記本電腦!"); 30         
31         Items items_2 = new Items(); 32         items_2.setName("蘋果手機"); 33  items_2.setPrice(5000f); 34         items_2.setDetail("iphone6蘋果手機!"); 35         
36  itemsList.add(items_1); 37  itemsList.add(items_2); 38         //設置模型數據
39         request.setAttribute("itemsList", itemsList); 40         //設置轉發的視圖
41         request.getRequestDispatcher("/WEB-INF/jsp/items/itemsList.jsp").forward(request, response); 42         
43         //使用此方法能夠經過修改response,設置響應的數據格式,好比響應json數據
44          /*
45  response.setCharacterEncoding("utf-8"); 46  response.setContentType("application/json;charset=utf-8"); 47  response.getWriter().write("json串");*/
48  } 49 }
ItemsController2代碼

 2.二、註解的方式緩存

1       <!-- 註解的方式 -->
2     <mvc:annotation-driven></mvc:annotation-driven>
3       <!-- 必定要注意在使用組件掃描的時候必須使用jdk和spring的版本相對應的jar,否則的話就會出現不合法的參數錯誤,
好比說我原本使用的jdk1.8+spring-context-support-3.2.0.RELEASE.jar就是一個錯誤的搭配,特別的坑,
廢了我一個上午的時間去調試最佳的搭配是使用jdk1.7+spring-context-support-3.2.0.RELEASE.jar或者jdk1.8+spring 4.*來搭配,
在這裏我採用了前者來解決!
--> 4 <context:component-scan base-package="cn.itcast.ssm.controller"></context:component-scan>
 1 package cn.itcast.ssm.controller;  2 
 3 import java.util.ArrayList;  4 import java.util.List;  5 
 6 import org.springframework.stereotype.Controller;  7 import org.springframework.web.bind.annotation.RequestMapping;  8 import org.springframework.web.servlet.ModelAndView;  9 
10 import cn.itcast.ssm.po.Items; 11 
12 //使用Controller標識 它是一個控制器
13 @Controller 14 public class ItemsController3 { 15     
16     //商品查詢列表 17     //@RequestMapping實現 對queryItems方法和url進行映射,一個方法對應一個url 18     //通常建議將url和方法寫成同樣
19     @RequestMapping("/queryItems") 20     public ModelAndView queryItems()throws Exception{ 21         
22         //調用service查找 數據庫,查詢商品列表,這裏使用靜態數據模擬
23         List<Items> itemsList = new ArrayList<Items>(); 24         //向list中填充靜態數據
25         
26         Items items_1 = new Items(); 27         items_1.setName("聯想筆記本"); 28  items_1.setPrice(6000f); 29         items_1.setDetail("ThinkPad T430 聯想筆記本電腦!"); 30         
31         Items items_2 = new Items(); 32         items_2.setName("蘋果手機"); 33  items_2.setPrice(5000f); 34         items_2.setDetail("iphone6蘋果手機!"); 35         
36  itemsList.add(items_1); 37  itemsList.add(items_2); 38         
39         //返回ModelAndView
40         ModelAndView modelAndView =  new ModelAndView(); 41         //至關 於request的setAttribut,在jsp頁面中經過itemsList取數據
42         modelAndView.addObject("itemsList", itemsList); 43         
44         //指定視圖 45         //下邊的路徑,若是在視圖解析器中配置jsp路徑的前綴和jsp路徑的後綴,修改成 46         //modelAndView.setViewName("/WEB-INF/jsp/items/itemsList.jsp"); 47         //上邊的路徑配置能夠不在程序中指定jsp路徑的前綴和jsp路徑的後綴
48         modelAndView.setViewName("items/itemsList"); 49         return modelAndView; 50  } 51 }
ItemsController3代碼

    須要注意的是使用<mvc:annotation-driven></mvc:annotation-driven>能夠代替安全

1  <!--註解映射器 -->
2     <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
3 <!--註解適配器 -->
4     <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>

   而且mvc:annotation-driven默認加載不少的參數綁定方法,好比json轉換解析器就默認加載了,若是使用mvc:annotation-driven就不用配置上邊的RequestMappingHandlerMapping和RequestMappingHandlerAdapter,實際開發時使用mvc:annotation-driven。
session

    總結,不管使用哪一種方法都要使用處理器映射器、處理器適配器這兩個基本的方式來對handler(controller)進行控制,處理器映射器解決的是找到URL對應的處理方法,而處理器適配器解決的是到底要怎麼去處理咱們的事務,這個handler的輸入輸出究竟是什麼樣子的,需不須要繼承一個父類等問題。所以這兩個東西和handler是關聯很是大的,在實際開發中咱們都使用註解開發,除了形式上的簡單以外,容易配置,而且在原理上來講,非註解的開發方法只能在一個類中寫一個方法,作一件事情,這樣就會創建很是多的文件,而使用註解的開發方法方便靈活,便於控制,而且一個handler中能夠包含不少個方法來暴露給不一樣的URL來訪問,這點很是方便。

3、視圖解析器

1    <!-- 視圖解析器 解析jsp解析,默認使用jstl標籤,classpath下的得有jstl的包-->
2     <bean 3         class="org.springframework.web.servlet.view.InternalResourceViewResolver">
4                <!-- 配置jsp路徑的前綴 -->
5         <property name="prefix" value="/WEB-INF/jsp/"/>
6               <!-- 配置jsp路徑的後綴 -->
7         <property name="suffix" value=".jsp"/>
8     </bean>

    這也就解釋了,咱們在程序裏能夠有恃無恐的這樣寫modelAndView.setViewName("items/itemsList");的緣由。

4、日期類型的轉換(FormattingConversionServiceFactoryBean)

    在某些狀況下,咱們須要對UI上輸入的日期格式進行相應的轉換,變成咱們數據庫中對應的格式並存儲,而後再顯示,這是很常見的,所以咱們須要使用mvc:annotation-driven工具進行必定的配置。

 1     <mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
 2         <!-- 自定義參數綁定 -->
 3     <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
 4         <!-- 轉換器 -->
 5         <property name="converters">
 6             <list>
 7                 <!-- 日期類型轉換 -->
 8                 <bean class="cn.itcast.ssm.controller.converter.CustomDateConverter"/>
 9             </list>
10         </property>
11     </bean>
 1 package cn.itcast.ssm.controller.converter;  2 
 3 import java.text.ParseException;  4 import java.text.SimpleDateFormat;  5 import java.util.Date;  6 
 7 import org.springframework.core.convert.converter.Converter;  8 public class CustomDateConverter implements Converter<String,Date>{  9 
10  @Override 11     public Date convert(String source) { 12         
13         //實現 將日期串轉成日期類型(格式是yyyy-MM-dd HH:mm:ss)
14         
15         SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 16         
17         try { 18             //轉成直接返回
19             return simpleDateFormat.parse(source); 20         } catch (ParseException e) { 21             // TODO Auto-generated catch block
22  e.printStackTrace(); 23  } 24         //若是參數綁定失敗返回null
25         return null; 26  } 27 }
CustomDateConverter 代碼

    Converter<String,Date>是一個模板,在這裏咱們將String類型轉換成Date類型來存儲到數據庫中。

5、解析靜態資源

1      <!-- 靜態資源解析包括 :js、css、img、..使得網頁能夠訪問這些地址-->
2      <mvc:resources location="/js/" mapping="/js/**"/>
3      <mvc:resources location="/img/" mapping="/img/**"/>

6、校驗器

 1     <mvc:annotation-driven validator="validator"></mvc:annotation-driven>
 2 
 3     <!-- 校驗器 -->
 4     <bean id="validator"
 5  class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean">
 6               <!-- hibernate校驗器-->
 7         <property name="providerClass" value="org.hibernate.validator.HibernateValidator" />
 8                <!-- 指定校驗使用的資源文件,在文件中配置校驗錯誤信息,若是不指定則默認使用classpath下的ValidationMessages.properties -->
 9         <property name="validationMessageSource" ref="messageSource" />
10     </bean>
11                <!-- 校驗錯誤信息配置文件 -->
12     <bean id="messageSource"
13  class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
14                     <!-- 資源文件名-->
15         <property name="basenames">   
16             <list>    
17             <value>classpath:CustomValidationMessages</value>
18             </list>   
19         </property>
20                  <!-- 資源文件編碼格式 -->
21         <property name="fileEncodings" value="utf-8" />
22                 <!-- 對資源文件內容緩存時間,單位秒 -->
23         <property name="cacheSeconds" value="120" />
24     </bean>

7、全局異常處理器

1     <!-- 全局異常處理器,只要實現HandlerExceptionResolver接口就是全局異常處理器-->
2     <bean class="cn.itcast.ssm.exception.CustomExceptionResolver"></bean>
 1 package cn.itcast.ssm.exception;  2 public class CustomException extends Exception {  3     
 4     //異常信息
 5     public String message;  6     
 7     public CustomException(String message){  8         super(message);  9         this.message = message; 10  } 11 
12     public String getMessage() { 13         return message; 14  } 15 
16     public void setMessage(String message) { 17         this.message = message; 18  } 19 }
CustomException
 1 package cn.itcast.ssm.exception;  2 
 3 import javax.servlet.http.HttpServletRequest;  4 import javax.servlet.http.HttpServletResponse;  5 
 6 import org.springframework.web.servlet.HandlerExceptionResolver;  7 import org.springframework.web.servlet.ModelAndView;  8 
 9 public class CustomExceptionResolver implements HandlerExceptionResolver { 10 
11  @Override 12     public ModelAndView resolveException(HttpServletRequest request, 13  HttpServletResponse response, Object handler, Exception ex) { 14         //handler就是處理器適配器要執行Handler對象(只有method) 15         
16 // 解析出異常類型 17 // 若是該 異常類型是系統 自定義的異常,直接取出異常信息,在錯誤頁面展現 18 // String message = null; 19 // if(ex instanceof CustomException){ 20 // message = ((CustomException)ex).getMessage(); 21 // }else{
22 //// 若是該 異常類型不是系統 自定義的異常,構造一個自定義的異常類型(信息爲「未知錯誤」) 23 // message="未知錯誤"; 24 // } 25         
26         //上邊代碼變爲
27         CustomException customException = null; 28         if(ex instanceof CustomException){ 29             customException = (CustomException)ex; 30         }else{ 31             customException = new CustomException("未知錯誤"); 32  } 33         
34         //錯誤信息
35         String message = customException.getMessage(); 36         
37         
38         ModelAndView modelAndView = new ModelAndView(); 39         
40         //將錯誤信息傳到頁面
41         modelAndView.addObject("message", message); 42         
43         //指向錯誤頁面
44         modelAndView.setViewName("error"); 45 
46         
47         return modelAndView; 48  } 49 
50 }
CustomExceptionResolver

8、文件上傳

1    <!-- 文件上傳 -->
2     <bean id="multipartResolver"
3  class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
4         <!-- 設置上傳文件的最大尺寸爲5MB -->
5         <property name="maxUploadSize">
6             <value>5242880</value>
7         </property>
8     </bean>

9、攔截器

 1     <!--攔截器 -->
 2 <mvc:interceptors>
 3     <!--多個攔截器,順序執行 -->
 4     <!-- 登錄認證攔截器 -->
 5     <mvc:interceptor>
 6         <mvc:mapping path="/**"/>
 7         <bean class="cn.itcast.ssm.interceptor.LoginInterceptor"></bean>
 8     </mvc:interceptor>
 9     <mvc:interceptor>
10         <!-- /**表示全部url包括子url路徑 -->
11         <mvc:mapping path="/**"/>
12         <bean class="cn.itcast.ssm.interceptor.HandlerInterceptor1"></bean>
13     </mvc:interceptor>
14     <mvc:interceptor>
15         <mvc:mapping path="/**"/>
16         <bean class="cn.itcast.ssm.interceptor.HandlerInterceptor2"></bean>
17     </mvc:interceptor>
18 </mvc:interceptors>
 1 package cn.itcast.ssm.interceptor;  2 
 3 import javax.servlet.http.HttpServletRequest;  4 import javax.servlet.http.HttpServletResponse;  5 
 6 import org.springframework.web.servlet.HandlerInterceptor;  7 import org.springframework.web.servlet.ModelAndView;  8 
 9 public class HandlerInterceptor1 implements HandlerInterceptor { 10     
11     //進入 Handler方法以前執行 12     //用於身份認證、身份受權 13     //好比身份認證,若是認證經過表示當前用戶沒有登錄,須要此方法攔截再也不向下執行
14  @Override 15     public boolean preHandle(HttpServletRequest request, 16             HttpServletResponse response, Object handler) throws Exception { 17         
18         System.out.println("HandlerInterceptor1...preHandle"); 19         
20         //return false表示攔截,不向下執行 21         //return true表示放行
22         return true; 23  } 24 
25     //進入Handler方法以後,返回modelAndView以前執行 26     //應用場景從modelAndView出發:將公用的模型數據(好比菜單導航)在這裏傳到視圖,也能夠在這裏統一指定視圖
27  @Override 28     public void postHandle(HttpServletRequest request, 29  HttpServletResponse response, Object handler, 30             ModelAndView modelAndView) throws Exception { 31         
32         System.out.println("HandlerInterceptor1...postHandle"); 33         
34  } 35 
36     //執行Handler完成執行此方法 37     //應用場景:統一異常處理,統一日誌處理
38  @Override 39     public void afterCompletion(HttpServletRequest request, 40  HttpServletResponse response, Object handler, Exception ex) 41             throws Exception { 42         
43         System.out.println("HandlerInterceptor1...afterCompletion"); 44  } 45 
46 }
HandlerInterceptor1
 1 package cn.itcast.ssm.interceptor;  2 
 3 import javax.servlet.http.HttpServletRequest;  4 import javax.servlet.http.HttpServletResponse;  5 
 6 import org.springframework.web.servlet.HandlerInterceptor;  7 import org.springframework.web.servlet.ModelAndView;  8 
 9 public class HandlerInterceptor2 implements HandlerInterceptor { 10 
11     
12     //進入 Handler方法以前執行 13     //用於身份認證、身份受權 14     //好比身份認證,若是認證經過表示當前用戶沒有登錄,須要此方法攔截再也不向下執行
15  @Override 16     public boolean preHandle(HttpServletRequest request, 17             HttpServletResponse response, Object handler) throws Exception { 18         
19         System.out.println("HandlerInterceptor2...preHandle"); 20         
21         //return false表示攔截,不向下執行 22         //return true表示放行
23         return true; 24  } 25 
26     //進入Handler方法以後,返回modelAndView以前執行 27     //應用場景從modelAndView出發:將公用的模型數據(好比菜單導航)在這裏傳到視圖,也能夠在這裏統一指定視圖
28  @Override 29     public void postHandle(HttpServletRequest request, 30  HttpServletResponse response, Object handler, 31             ModelAndView modelAndView) throws Exception { 32         
33         System.out.println("HandlerInterceptor2...postHandle"); 34         
35  } 36 
37     //執行Handler完成執行此方法 38     //應用場景:統一異常處理,統一日誌處理
39  @Override 40     public void afterCompletion(HttpServletRequest request, 41  HttpServletResponse response, Object handler, Exception ex) 42             throws Exception { 43         
44         System.out.println("HandlerInterceptor2...afterCompletion"); 45  } 46 
47 }
HandlerInterceptor2
 1 package cn.itcast.ssm.interceptor;  2 
 3 import javax.servlet.http.HttpServletRequest;  4 import javax.servlet.http.HttpServletResponse;  5 import javax.servlet.http.HttpSession;  6 
 7 import org.springframework.web.servlet.HandlerInterceptor;  8 import org.springframework.web.servlet.ModelAndView;  9 
10 public class LoginInterceptor implements HandlerInterceptor { 11 
12     
13     //進入 Handler方法以前執行 14     //用於身份認證、身份受權 15     //好比身份認證,若是認證經過表示當前用戶沒有登錄,須要此方法攔截再也不向下執行
16  @Override 17     public boolean preHandle(HttpServletRequest request, 18             HttpServletResponse response, Object handler) throws Exception { 19         
20         //獲取請求的url
21         String url = request.getRequestURI(); 22         //判斷url是不是公開 地址(實際使用時將公開 地址配置配置文件中) 23         //這裏公開地址是登錄提交的地址
24         if(url.indexOf("login.action")>=0){ 25             //若是進行登錄提交,放行
26             return true; 27  } 28         
29         //判斷session
30         HttpSession session  = request.getSession(); 31         //從session中取出用戶身份信息
32         String username = (String) session.getAttribute("username"); 33         
34         if(username != null){ 35             //身份存在,放行
36             return true; 37  } 38         
39         //執行這裏表示用戶身份須要認證,跳轉登錄頁面
40         request.getRequestDispatcher("/WEB-INF/jsp/login.jsp").forward(request, response); 41         
42         //return false表示攔截,不向下執行 43         //return true表示放行
44         return false; 45  } 46 
47     //進入Handler方法以後,返回modelAndView以前執行 48     //應用場景從modelAndView出發:將公用的模型數據(好比菜單導航)在這裏傳到視圖,也能夠在這裏統一指定視圖
49  @Override 50     public void postHandle(HttpServletRequest request, 51  HttpServletResponse response, Object handler, 52             ModelAndView modelAndView) throws Exception { 53         
54         System.out.println("HandlerInterceptor1...postHandle"); 55         
56  } 57 
58     //執行Handler完成執行此方法 59     //應用場景:統一異常處理,統一日誌處理
60  @Override 61     public void afterCompletion(HttpServletRequest request, 62  HttpServletResponse response, Object handler, Exception ex) 63             throws Exception { 64         
65         System.out.println("HandlerInterceptor1...afterCompletion"); 66  } 67 
68 }
LoginInterceptor

10、小記
   SpringMVC博大精深,是Spring的一個模塊,是一種web框架,將MVC應用於B/S模式中,將每個步驟進行了詳細而完全的解耦合,雖然步驟複雜了一些,真正須要咱們實現的地方仍是能夠承受的,最重要的就是xml的配置文件了,好比說關於DispatcherServlet運行的配置文件(通常命名爲springmvc.xml)就包含了這個思想內涵的不少地方,一樣這一框架也有強大的安全性和可擴展性,諸如面向切面編程(AOP)等思想都是有着強大生命力的,再加上和mybatis結合,適合一些大中型的企業級項目,學會SpringMVC有着很大的現實意義和使用價值。

相關文章
相關標籤/搜索