2012-03-21

衡量一个MVC框架模式,主要通过三种web模式,本人认为springMVC是一个很好的MVC
模式,对模式的支持如下:
(1)派遣器模式
Spring有一个统一集中的派遣器org.springFramework.Web.Servlet.DispatcherServlet,
一般在web.XML中把所有的页面请求都发送到该派遣器:
<servlet>
  <servlet-name>countries</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>countries</servlet-name>
  <url-pattern>*.htm</url-pattern>
</servlet-mapping>
(2)控制器模式
派遣器收到请求后,把不同的页面派遣到不同的控制器进行处理:
<bean  id="urlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
    <property name="mappings">
             <props>
                    <prop key="/home.htm">countriesController</prop>
                   <prop key="/notfound.htm">errorsController</prop>
</props>
 </property>
</bean>
Spring有两种MAPPING的机制,默认为BeanNameUrlHandlerMapping,我们这里采用的是
SimpleUrlHandlerMapping.
(3)拦截器模式
在控制器处理前,我们可以将其拦截,进行一些特殊或通用处理;拦截器可以选用Spring已经实现的或我们自己实现的:
<bean  id="urlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
      <property name="interceptors">
             <list>
                    <ref local="localeChangeInterceptor"/>
                   <ref local="themeChangeInterceptor"/>
                    <ref local="copyInterceptor"/>
             </list>
 </property>
</bean>
 
 
 
详细介绍:
① 分发器:Dispatcherservlet
整个spring应用只需要一个分发器
<servlet>
       <servlet-name>springapp</servlet-name>
       <servlet-class>
              org.springframework.web.servlet.DispatcherServlet
       </servlet-class>
       <load-on-startup>1</load-on-startup>
</servlet>
<!-- 映射的类型-->
<servlet-mapping>
           <servlet-name>springapp</servlet-name>
           <url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
           <servlet-name>springapp</servlet-name>
           <url-pattern>*.html</url-pattern>
</servlet-mapping>
 
处理器映射
一般对应文件 servlet-name-servlet.xml,譬如 springapp-servlet.xml
BeanNameUrlHandlerMapping
一般使用SimpleUrlHandlerMapping
<!--Request Mapping -->
       <bean id="urlMapping"
              class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">                                         <property name="mappings">
                     <props>
                            <prop key="login.do">LoginController</prop>   
                            <prop key="login.html">LoginController</prop>               
                     </props>
              </property>
       </bean>
② 控制器
控制器的基础接口 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里面加入
<property name=”interceptors”>
<list>
              <ref bean=”officeHourIntercptor”>
</list>
</property>
然后一个处理Bean
<bean id=” officeHourIntercptor”  class=” TimeBaseIntercptor”>
       <property name=”openTime”> <value>9</value> </property>
       <property name=”closeTime”> <value>18</value> </property>
</bean>
 
 
④ 视图与解析器
Spring框架控制器返回的是ModelAndView,对于一般的JSP和Servlet,一般使用InternalResourceViewResolver,继承于UrlBaseViewResovler
<bean id="viewResolver"
              class="org.springframework.web.servlet.view.InternalResourceViewResolver">
              <property name="viewClass">
                     <value>org.springframework.web.servlet.view.JstlView</value>
              </property>
       </bean>
 
当一个web中使用不同类型的视图技术,使用ResourceBandleViewResolver
 
⑤ 使用本地化信息
Spring框架大部分支持国际化,像web框架一样,自动解析客户端信息
但我们可以自己手动获取客户端信息,并做需要的参数设计来改变属性
一般使用LocalChangeInterceptor修改本地化信息,这个像拦截器一样使用
   <bean  id="localeChangeInterceptor"
             class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
         <property name="paramName"><value>siteLanguage</value></property>
   </bean>
   <bean id="localeResolver"
class="org.springframework.web.servlet.i18n.CookieLocaleResolver"/>

SpringMVC框架学习的更多相关文章

  1. SpringMVC框架学习笔记(1)——HelloWorld

    搭建SpringMVC框架 1.添加jar包 jsp-api.jar servlet-api.jar jstl.jar commons-logging-1.1.1.jar spring-beans-4 ...

  2. 兄弟萌,这份SpringMVC框架学习笔记真的建议反复看,写的太细了

    概述 是Spring为展现层提供的基于MVC设计理念的Web框架,通过一套MVC注解,让POJO成为处理请求的控制器,而无需实现任何接口 支持REST风格的URL请求 采用松散耦合的可插拔组件结构,比 ...

  3. SpringMVC框架学习笔记(6)——拦截器

    SpringMVC拦截器需要实现接口HandlerInterceptor 有3个方法,分别在请求处理前.请求处理后和在DispatcherServlet处理后执行 实现代码: package inte ...

  4. SpringMVC框架学习笔记(2)——使用注解开发SpringMVC

    1.配置web.xml <servlet> <servlet-name>mvc</servlet-name> <servlet-class>org.sp ...

  5. SpringMVC框架学习笔记(4)——结果跳转方式

    1.设置ModelAndView对象.根据View和视图解析器跳转到指定页面(视图解析器前缀+viewname+视图解析器后缀) @Override public ModelAndView handl ...

  6. Java SpringMVC框架学习(三)springMVC的执行流程

    具体执行逻辑如下: 浏览器提交请求到中央调度器. 中央调度器将请求转给处理器映射器. 处理器映射器根据请求, 找到请求对应的处理器, 并将其封装为处理器执行链返回给中央调度器. 中央调度器根据处理器执 ...

  7. SpringMVC框架学习笔记(5)——数据处理

    1.提交数据的处理 a)提交的域名称和参数名称一致 http://localhost:8080/foward/hello.do?name=zhangsan 处理方法 @RequestMapping(v ...

  8. SpringMVC框架学习笔记——各种异常、报错解决

    1.Target runtime com.genuitec.runtime.generic.jee60 is not defined. 找到导入项目的.setting文件夹org.eclipse.ws ...

  9. SpringMVC框架学习笔记(3)——controller配置汇总

    1.通过URL对应bean <!-- 配置handlerMapper 映射器 --> <bean class="org.springframework.web.servle ...

随机推荐

  1. EF6源码学习-准备篇

    现在对于.net开发人员来说EF已经很流行了,虽然我在2010年的时候就用过EF,也看过几本书,但是还没有仔细研究EF的code, 曾经也尝试阅读EF5的源代码,后来由于时间关系也没有坚持住.现在计划 ...

  2. CSS阻塞渲染、怎么防止css阻塞

    浏览器渲染流程: 1.浏览器开始解析目标HTML文件,执行流的顺序为自上而下. 2.HTML解析器将HTML结构转换为基础的DOM(文档对象模型),构建DOM树完成后,触发DomContendLoad ...

  3. shell脚本用crontab执行和手动执行结果不一致

    加上 PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin 这行就好了, shell首部用 #!/usr/bin/env bash 这个移植性更 ...

  4. [Canvas]RPG游戏雏形 (地图加载,英雄出现并移动)

    源码请点此下载并用浏览器打开index.html观看 图例: 代码: <!DOCTYPE html> <html lang="utf-8"> <met ...

  5. pdo_mysql安装不了或是安装后用不了的修复教程

    目前发现wdOS及lanmp_wdcp的RPM包安装在部分系统下安装后,在安装pdo_mysql时无法安装或安装后无法使用的问题 如在安装时提示下如下 regenerate PHP parsers.c ...

  6. Office 超级录屏如何旋转视频90度之后保存

    打开视频转换专家   添加视频后点击编辑,然后在旋转的地方设置旋转,应用   输出可以正常播放  

  7. Spring boot 各种入门及问题

    Spring boot 入门 整合(完整版): https://blog.csdn.net/winter_chen001/article/details/77249029 mybatis-genera ...

  8. Jquery 中的CheckBox、 RadioButton、 DropDownList的取值赋值

    1.获取选中值,三种方法都可以: $('input:radio:checked').val(): $("input[type='radio']:checked").val(); $ ...

  9. Android 之 WebView开发问题及优化

    WebView 在现在的项目中使用的频率应该还是非常高的,WebView 主要用来加载一些容易改变的频繁交互的应用App.目前 HTML5 是一种趋势.在开发中会遇到一些开发问题及优化问题,如下所记. ...

  10. 分布式系统介绍-PNUTS

    PNUTS是Yahoo!的分布式数据库系统,支持地域上分布的大规模并发操作.它根据主键的范围区间或者其哈希值的范围区间将表拆分为表单元(Tablet),多个表单元存储在一个服务器上.一个表单元控制器根 ...