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. vSCode打开文件老覆盖原窗口

    https://segmentfault.com/q/1010000006131199?_ea=1023522 设置中搜preview,改为false

  2. ASP入门(二十一)- 如何自己获取 ADO 连接字符串

    1.新建一个文本文件,并将文件名修改为[ado.udl] 注意 如果不显示扩展名,请在资源管理器的[查看 | 选项]对话框中去掉"隐藏已知文件类型的扩展名"勾就可以了. 2.双击这 ...

  3. LXC 容器集chroot使用说明

    1.1 LXC是什么? 1.1.1 关于LXC LXC,其名称来自Linux软件容器(Linux Containers)的缩写,一种操作系统层虚拟化(Operating system–level vi ...

  4. Android百日程序:绘画程序-画手指路径

    本程序实如今一个画布中,用手指绘图的效果. 须要使用的知识: 1 Canvas 画布,动态保存更新当前画面 2 Path 记录并画出手接触屏幕经过的路径 如以下效果图: 仅仅须要依照默认设置新建一个项 ...

  5. LintCode: Restore IP Address

    C++ string::substr(start_pos, length) vector::push_back(element) class Solution { public: vector< ...

  6. npm - 部分常用命令(笔记)

    <!-- npm部分简写: ci -> package-lock.json ls -> list pkg -> package i -> install -g -> ...

  7. word你必须懂的。

    1.所有文字都有默认样式 2.可以调整样式,选择字体,级别,段落,缩进等设置

  8. j2ee数据库连接池配置大全

    <!--web.xml begin--> <!--web.xml Spring ApplicationContext配置文件的路径 ,可使用通配符,多个路径用,号分隔 --> ...

  9. java面试第二天

    局部变量:不是声明在类体括号里面的变量 (1)必须要先赋值,后使用,否则通不过编译,局部变量没有默认初始化值 (2)作用范围:定义开始到定义它的代码块结束 (3)同一范围内,不允许2个局部变量命名冲突 ...

  10. 演示一下:rm -rf /