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"/>
  • 相关阅读:
    Dev GridControl 小结3
    一个web应用的诞生(9)--回到用户
    一个web应用的诞生(8)--博文发布
    一个web应用的诞生(7)--结构调整
    一个web应用的诞生(6)--用户账户
    一个web应用的诞生(5)--数据表单
    一个web应用的诞生(4)--数据存储
    一个web应用的诞生(3)--美化一下
    一个web应用的诞生(2)--使用模板
    一个web应用的诞生(1)--初识flask
  • 原文地址:https://www.cnblogs.com/huapox/p/3516391.html
Copyright © 2011-2022 走看看