zoukankan      html  css  js  c++  java
  • SpringMVC框架学习

    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"/>
  • 相关阅读:
    盒子垂直水平居中
    Sahi (2) —— https/SSL配置(102 Tutorial)
    Sahi (1) —— 快速入门(101 Tutorial)
    组织分析(1)——介绍
    Java Servlet (1) —— Filter过滤请求与响应
    CAS (8) —— Mac下配置CAS到JBoss EAP 6.4(6.x)的Standalone模式(服务端)
    JBoss Wildfly (1) —— 7.2.0.Final编译
    CAS (7) —— Mac下配置CAS 4.x的JPATicketRegistry(服务端)
    CAS (6) —— Nginx代理模式下浏览器访问CAS服务器网络顺序图详解
    CAS (5) —— Nginx代理模式下浏览器访问CAS服务器配置详解
  • 原文地址:https://www.cnblogs.com/huapox/p/3516391.html
Copyright © 2011-2022 走看看