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. Asp.net5 Session Set扩展

    关于Asp.net 5 如何使用Session大家可以参考http://www.mikesdotnetting.com/article/270/sessions-in-asp-net-5 和http: ...

  2. [leetcode]Gray Code @ Python

    原题地址:https://oj.leetcode.com/problems/gray-code/ 题意: The gray code is a binary numeral system where ...

  3. Context Application 使用总结 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  4. 门罗币(MONERO)钱包生成教程

    一.下载钱包 钱包下载地址:https://getmonero.org/downloads/(如果下载缓慢请使用下载工具下载) 二.图形界面钱包生成 解压运行monero-wallet-gui.exe ...

  5. C#与Visual Basic的异与同

    C#是一种高级程序设计语言,是一种安全.稳定.简单.优雅的编程语言,它与Visual Basic有很多相同的地方,同时也有很多不同的地方.我们今天这篇博客本着学习C#的原则,着重介绍一下C#与Visu ...

  6. Java归去来第3集:Eclipse中给动态模块升级

    一.前言 如果还不了解剧情,请返回第2集的剧情          Java归去来第2集:利用Eclipse创建Maven Web项目 二.开始升级动态模块 2.1:查看原来的版本 我们先来看看Ecli ...

  7. (转)最近一个项目中关于NGUI部分的总结(深度和drawCall)

    在自己最近的一个项目中,软件的界面部分使用了NGUI来进行制作.在制作过程中,遇到了一些问题,也获取了一些经验,总结下来,作为日后的积累. 1.NGUI图集的使用. 此次是第一个自己正儿八经的制作完整 ...

  8. mysql设置允许外网访问

    1.设置mysql服务允许外网访问 修改mysql的配置文件,有的是my.ini,有的是my.cnf[linux],找到bind-address变量,这个值默认是127.0.0.1,设置为0.0.0. ...

  9. Tomcat下设置项目为默认项目

    项目的实际使用中常常须要将当前项目设为tomcat的默认项目,而不是进入到tomcat的页面,有几种方法能够实现,注意另外一种.第三种情况须要先删除webapps下的ROOT文件夹,否则会失败. 一. ...

  10. Java程序猿的JavaScript学习笔记(1——理念)

    计划按例如以下顺序完毕这篇笔记: Java程序猿的JavaScript学习笔记(1--理念) Java程序猿的JavaScript学习笔记(2--属性复制和继承) Java程序猿的JavaScript ...