衡量一个MVC框架模式,主要通过三种web模式,本人认为springMVC是一个很好的MVC
模式,对模式的支持如下:
(1)派遣器模式
Spring有一个统一集中的派遣器org.springFramework.Web.Servlet.DispatcherServlet,
一般在web.XML中把所有的页面请求都发送到该派遣器:
(2)控制器模式
派遣器收到请求后,把不同的页面派遣到不同的控制器进行处理:
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
Spring有两种MAPPING的机制,默认为BeanNameUrlHandlerMapping,我们这里采用的是
SimpleUrlHandlerMapping.
(3)拦截器模式
在控制器处理前,我们可以将其拦截,进行一些特殊或通用处理;拦截器可以选用Spring已经实现的或我们自己实现的:
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
详细介绍:
① 分发器:Dispatcherservlet
整个spring应用只需要一个分发器
org.springframework.web.servlet.DispatcherServlet
处理器映射
一般对应文件 servlet-name-servlet.xml,譬如 springapp-servlet.xml
BeanNameUrlHandlerMapping
一般使用SimpleUrlHandlerMapping
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
② 控制器
控制器的基础接口 Controller ,包含方法
ModelAndView handleRequest(HttpServletRequest request,HttpServletResponse response)
throws Exception;
一般使用 return new ModelAndView(“”);也可以使用response.sendRedirect(“”).;
AbstractController控制器继承Controller类,增加譬如缓存、minetype等功能,处理多个动作,可以使用MultiActionController
但如果要表单和数据对象的交互,我们就使用命令控制器
一般使用AbstractCommandController带参的形式,把相关的功能放在一个controller
譬如用户的添加、修改、删除,就可以采用 usemanage.do?msg=add/modify/delete的形式
SimpleFormController更为具体,但继承它实现的OnSubmit的方法,不好用,譬如不能后退或者用于超链接等方式的地址直接响应。
③ 处理器映射拦截器
拦截器接口定义了三个方法,一个在处理器执行前被调用,一个在处理器执行后被调用,还有一个在整个请求完成后调用。譬如在在上午9点到下午6点重定向某个页面,
在handlerMapping那个bean里面加入
然后一个处理Bean
④ 视图与解析器
Spring框架控制器返回的是ModelAndView,对于一般的JSP和Servlet,一般使用InternalResourceViewResolver,继承于UrlBaseViewResovler
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
当一个web中使用不同类型的视图技术,使用ResourceBandleViewResolver
⑤ 使用本地化信息
Spring框架大部分支持国际化,像web框架一样,自动解析客户端信息
但我们可以自己手动获取客户端信息,并做需要的参数设计来改变属性
一般使用LocalChangeInterceptor修改本地化信息,这个像拦截器一样使用
class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
class="org.springframework.web.servlet.i18n.CookieLocaleResolver"/>