程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> SpringMVC(二)——流程控制

SpringMVC(二)——流程控制

編輯:關於C

SpringMVC主要就是用來做流程控制的,這篇博客總結一下如何在流程控制添加Interceptor(攔截器),如何將進行流程Mapping映射解析,如何編寫Controller(控制器)。


一,首先看一下框架中的映射解析器,用來將uri和控制器進行綁定的:


1, SpringMVC框架的默認解析器采用是:bean的name屬性名稱作為URI,與控制器進行映射綁定,BeanNameUrlHandlerMapping。例如:


	
		

這種情況看起來是很方便的,直接將uri和類進行了綁定。但是耦合性高了些,我們一般是希望將uri和類的id進行綁定,這樣方便我們後期的修改,看下邊框架為我們提供的這個對象。

2,SimpleUrlHandlerMapping :通過映射關系將請求路徑和控制器綁定在一起,設置更加靈活。這裡看個例子:

	
 		
 			
 				
 			
 		
	 		 
	
	
	

這種方法,是將uri和類的id進行綁定,使彼此的耦合性更加低,獨立性更高了。這樣就將我們的映射關系和類獨立開來了。當然了兩個都可以,根據實際情況選擇即可。這是我們兩種最常用的映射解析器。

二,Interceptor,通過編寫Interceptor可以對控制器進行攔截,對框架進行功能擴展,非常實用的。看一下如何將自己寫的Interceptor融入到框架中。


1,自定義攔截器需要繼承HandlerInterceptorAdapter父類,或者實現HandlerInterceptor接口。這裡簡單看一個方法前後打印系統時間的小攔截器:

	public class TimeInterceptor extends HandlerInterceptorAdapter {
	
		//整個流程請求完成之後要執行的操作。
		@Override
		public void afterCompletion(HttpServletRequest request,
				HttpServletResponse response, Object handler, Exception ex)
				throws Exception {
			System.out.println("invoke afterCompletion..."+new Date());
		}
	
		//請求控制器結束後做的操作
		@Override
		public void postHandle(HttpServletRequest request,
				HttpServletResponse response, Object handler,
				ModelAndView modelAndView) throws Exception {
			System.out.println("invoke postHandle..."+new Date());
		}
	
		//請求控制器執行之前做的操作
		@Override
		public boolean preHandle(HttpServletRequest request,
				HttpServletResponse response, Object handler) throws Exception {
			System.out.println("invoke preHandle..."+new Date());
			return true;
		}
	}

2,當然編寫了攔截器後,就需要配置到我們的配置文件SpringMVC-servlet.xml中進行聲明配置:

	


3,這裡還需要在SpringMVC-servlet.xml文件中配置,我們設置的攔截器對那些控制器起作用,這裡聲明攔截器和控制器的關系組合,利用SimpleUrlHandlerMapping進行映射的:

	
			
				
					
				
			
	 		
	 			
	 				
	 			
	 		

 

這樣就可以起作用了,對框架的功能擴展相對來說還是比較方便的。

三,最後看我們的Controller控制器的編寫吧,這裡的Controller和Struts2裡邊的action是相同的,但是這裡有了侵入性。一般情況下需要實現Controller接口,上一遍博客有演示,同時也可以采用繼承父類的方式,這裡來看幾個繼承不同的父類,實現不同的功能。


1,繼承AbstractController,這個和接口差不多,需要我們重寫裡邊的方法,主要的是,一般情況下,需要將此方法由父類的protected該外public的類型,供其他類的使用,其中方法名是固定的,我們指定路徑和此類即可由框架幫助我們調其中的方法。這裡不再舉例。


2,繼承MultiActionController(多動作控制器),這樣我們可以增加多個方法,處理多個客戶的請求,例如:

		public class MultiController extends MultiActionController {

			//自定義處理請求的方法,命名規則參照父類的handleRequestInternal
			public ModelAndView insert(HttpServletRequest request,HttpServletResponse response) throws Exception {							
				return new ModelAndView("insertSuccess");
			}
			
			public ModelAndView delete(HttpServletRequest request,HttpServletResponse response) throws Exception {							
				return new ModelAndView("deleteSuccess");
			}
		}

看一下配置文件的映射編寫吧:

 		  
					
		   
		  
		 		
		 			
		 				
		 			
		 		
		 				
			
		  
		 
				
				 
					
				
			
			
			
				
					
						insert
						delete
					
				
			

3,繼承AbstractCommandController,指令控制器,用於獲取頁面的參數,將參數封裝到指定的對象模型中。類似於Struts2框架的模型驅動。例如:

	public class DemoController extends AbstractCommandController {
	
		
		public DemoController(){
			this.setCommandClass(User.class); //這個就是用於接收客戶端請求參數的數據模型類。
		}
		
		//command參數就是在構造方法中指定的數據模型對象。
		//SpringMVC框架將請求參數,封裝到指定的數據模型對象中,傳遞給handle方法來使用。
		@Override
		protected ModelAndView handle(HttpServletRequest request,HttpServletResponse response, Object command, BindException errors)
				throws Exception {
			User user = (User)command ;
			System.out.println(user.getUsercode());
			System.out.println(user.getUserpswd());
			return new ModelAndView("test");
		}
	
	}

對於配置文件的映射就是類和路徑的映射,這裡不再贅述。這種方法就是將頁面傳過來的數據直接封裝到了指定的對象,我們可以直接使用,非常方便。

綜上,為SpringMVC流程控制方面的一些內容。其實任何的MVC框架都無在乎,核心控制器,映射文件,對應的action類,擴展可以通過攔截器,過濾器等。明白了大致方向,一些小的問題,我們可以通過查看API文檔,那才是我們開發有力的助手!!!


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved