设为首页 加入收藏

TOP

SpringMVC(二)――流程控制(一)
2014-11-23 19:05:03 来源: 作者: 【 】 浏览:15
Tags:SpringMVC 流程 控制

SpringMVC主要就是用来做流程控制的,这篇博客总结一下如何在流程控制添加Interceptor(拦截器),如何将进行流程Mapping映射解析,如何编写Controller(控制器)。


一,首先看一下框架中的映射解析器,用来将uri和控制器进行绑定的:


1, SpringMVC框架的默认解析器采用是:bean的name属性名称作为URI,与控制器进行映射绑定,BeanNameUrlHandlerMapping。例如:


	
  
		
  
   vc.controller.HelloWorldController">
  

这种情况看起来是很方便的,直接将uri和类进行了绑定。但是耦合性高了些,我们一般是希望将uri和类的id进行绑定,这样方便我们后期的修改,看下边框架为我们提供的这个对象。

2,SimpleUrlHandlerMapping :通过映射关系将请求路径和控制器绑定在一起,设置更加灵活。这里看个例子:

	
  
 		
    
     
     
      html" value-ref="hello">
       
   
	 
  		 
	
	
  
	
  

这种方法,是将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 re
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇felayman――细学JSP 下一篇设计模式学习总结(3) 抽象工厂

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: