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. JS中三目运算符和if else的区别,你弄得明白吗

    今天写了一个图片轮播的小demo,用到了判断   先试了一下if else,代码如下:   if(n >= count-1){ n =0; }else{ n ++; } 随后代码写完了,准备优化 ...

  2. google map放大缩小地图去除 ctrl+,直接用鼠标放大缩小

    如图,最近突然需要ctrl+鼠标滚动,才可以放大缩小地图: 这个问题也困扰了我很久,这个解决办法也是在看到一个帖子才发现的,所以记录一下,如图: map = new google.maps.Map(d ...

  3. [Python爬虫] :Selenium +phantomjs 利用 pyquery抓取脚本链接对应的内容

    抓取上面对应链接的网页的文章的内容 ele = element.attr("onclick") self.driver.execute_script(ele) sub_seleni ...

  4. php7安装mongoDB扩展

    本文我们使用pecl命令来安装 首先来到php7的安装目录 $ /usr/local/php7/bin/pecl install mongodb 回车,执行成功后,会输出以下结果: …… Build ...

  5. 【Spark】Spark-性能调优-系列文章

    Spark-性能调优-系列文章 Spark Master at spark://node-01:7077 scala java8_百度搜索 (1 封私信)如何评价Linkedin决定逐渐减少Scala ...

  6. 阿里巴巴Java开发规约插件全球首发!(转)

    https://mp.weixin.qq.com/s?__biz=MzI0NTE4NjA0OQ==&mid=2658355901&idx=1&sn=3169172bfc6819 ...

  7. OpenGL ES 3.0之Shader and program(七)

    着色器对象和程序对象是使用着色器渲染的2种基本的对象类型.一个着色器对象可以当做是一个C编译器,而程序对象作为连接器.一个编译器生成目标代码(如.OBJ,.o文件),对象文件完成创建后,C连接器将该对 ...

  8. 用Jetty 9.1运行Java WebSockets微服务

    Jetty 9.1的发布将Java WebSockets (JSR-356) 带入了非Java EE环境,从而开启了微服务时代.我们可以将Jetty的容器包含在java应用程序中(注意,不是Java代 ...

  9. 对IIC总线时序的一点理解以及ACK和NACK(NAK)

    参考自:http://blog.chinaunix.net/uid-16100003-id-3059814.html 关于IIC的响应问题:对于每一个接收设备(从设备,slaver),当它被寻址后,都 ...

  10. jconsole监控远程linux tomcat运行情况的配置 (转)

    来自:http://zhumeng8337797.blog.163.com/blog/static/100768914201242494649455/ 步骤如下: 1.编辑tomcat/bin/cat ...