Spring MVC(2)

最近的教学任务太过沉重,也就没有时间完成省下的内容。最近刚好能轻松些,希望能有时间把Spring MVC部分的内容写完。
通过上一节简单的例子,大家已经基本可以感受到Spring MVC的工作过程。今天我们主要看看DispatcherServlet是怎么把请求映射到对应的处理器上的。
Spring MVC中的DispatcherServlet收到一个请求后经过HandlerMapping会得到一个处理器链(HandlerExecutionChain)对象。它包括了处理这个请求的处理器和若干个对请求进行拦截处理的拦截器(HandlerInterceptor)。处理器链的工作原理如下图:

通过图示我们可以发现,处理器链在处理请求的时候首先要经过所有的拦截器,然后通过HandlerAdapter来执行处理器。
HandlerExecutionChain定义了如下的两个接口方法:
Object getHandler():返回处理请求的处理器对象。
HandlerInterceptor[] getInterceptors():返回处理器调用前后的拦截器数组。
拦截器HandlerInterceptor接口定义了如下3个方法:
boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handler):在请求到达Handler之前,先执行这个前置方法。
void postHandle(HttpServletRequest request,HttpServletResponse response,Object handler,ModelAndView modelAndView):在请求被处理器执行后执行。
void afterCompletion(HttpServletRequest request,HttpServletResponse response,Object handler,Exception ex):在相应被渲染后执行。
HandlerAdapter接口定义如下:
ModelAndView handle(HttpServletRequest request,HttpServletResponse response,Object handler):使用处理器处理请求。
boolean supports(Object handler):判断处理器适配器是否支持这个Handler类型。
下面我们回过头来再来了解一下HandlerMapping。HandlerMapping的作用就是根据请求产生一个HandlerExecutionChain。具有如下几个属性:
interceptors:拦截器列表。
defaultHandler:默认处理器。
order:处理器的优先级。
alwaysUseFullPath:boolean类型,用于设定映射是绝对路径还是相对路径。默认值为false,相对路径。
urlPathHelper:指定分析URL时的UrlPathhelper。
下面我们简单看一下Spring中提供的常见的HandlerMapping类型:
BeanNameUrlHandlerMapping:这是最简单的处理器映射类,使用处理器的名字和URL相同的方法。比如:http://127.0.0.1:8080/soccerleague/main.html,对应的就映射到一个名字为"/main.html"的处理器上。一般我们不建议谁用这种处理器映射。
SimpleUrlHandlerMapping:这是最常用的HandlerMapping。通过一个properties类型的参数来指定URL如何和处理器进行映射。如:
xml 代码
 
  1. <bean  
  2.         class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">  
  3.         <property name="mappings">  
  4.             <props>  
  5.                 <prop key="/main.html">main</prop>  
  6.                 <prop key="/showProducts.html">showProducts</prop>  
  7.                 <prop key="/register1.html">registerSelectLeague</prop>  
  8.                 <prop key="/register2.html">registerEnterPlayer</prop>  
  9.                 <prop key="/register3.html">  
  10.                     registerSelectDivision  
  11.                 </prop>  
  12.                 <prop key="/admin/registerLeague.html">  
  13.                     registerLeague  
  14.                 </prop>  
  15.             </props>  
  16.         </property>  
  17.     </bean>  
<bean>
一个应用中也可以配置多个映射器,通过指定order属性的不同来改善他们的优先级。
这部分的附件,是我在SpringMVC部分教学的一个案例。案例的题材来自于我的教学中的一个例子。完全采用了Spring来实现的功能。只是在页面的装配上使用了sitemesh,来完成页面的重用。数据库为MySQL,在项目的src下有完整的数据库备份。可以用来学习了解Spring MVC。项目中没有注释,因为这个工作我一般都是要求学生自己做 。下面的内容我将结合这个案例讲解。</bean>

你可能感兴趣的:(spring,html,mysql,mvc,bean)