Spring MVC的Controller用于处理用户的请求。Controller相当于Struts 1里的Action,他们的实现机制、运行原理都类似

Controller是个接口,一般直接继承AbstrcatController,并实现handleRequestInternal方法。handleRequestInternal方法相当于Struts 1的execute方法

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

public class CatController extends AbstractController{
      private ICatService catService;
      //setter、getter略

      protected ModelAndView handleRequestInternal(HttpServletRequestrequest,HttpServletResponse response) throws Exception{
             String action =request.getParameter("action");
             if("list".equals(action)){
                    return this.list(request,response);
             }
      }

      protected ModelAndView list(HttpServletRequestrequest,HttpServletResponse response) throws Exception{
             List<Cat> catList =catService.listCat();
             request.setAttribute("catList", catList);
             return new ModelAndView("cat/listCat");
      }

}

Spring MVC没有内置数据的封装,开发者可以自己封装数据转换代码

Spring MVC独特的地方在于view层的处理上。handleRequestInternal返回ModelAndView对象,可以看做是对JSP对象的封装。ModelAndIView直接接受JSP页面的路径。例如参数"cat/listCat",只是JSP路径的一部分,实际完整的路径是"WEB-INF/jsp/cat/catList.jsp",路径前后的部分是配置在配置文件中的

除了制定JSP路径,ModelAndView还可以直接传递Model对象到View层,而不用事先放到request中,例如new ModelAndView("cat/listCat","cat",cat),如果传递多个参数,可以使用Map,如

Map map = newHashMap();
map.put("cat",cat);
map.put("catList",catList);
return new ModelAndView("cat/listCat",map);

一般使用一个独立的xml文件如spring-action.xml专门配置web相关的组件

<?xml version= "1.0" encoding="UTF-8"?>
<!DCTYPEbeans PUBLIC "-//SPRING//DTD BEAN//EN"
  "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
      <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
             <property name="prefix">
                    <value>/WEB-INF/jsp/</value><!--  JSP前缀-->
             </property>
             <property name="suffix">
                    <value>.jsp</value>                 <!--  JSP后缀-->
             </property>

      <!-- 配置URL Mapping-->
      <bean id="urlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandleMapping">
             <property name="mappings">
                    <props><!—Controller的URL会被配置成"cat.mvc"-->
                           <prop key="cat.mvc">catController</prop>
                    <props>
             </property>
      </bean>
      <bean id="catController" class="com.clf.spring.CatController">
             <property name="catService" ref="catService"></property>
      </bean>
</beans>

web.xml配置
<context-param><!--  Spring配置文件的位置-->
      <param-name>contextConfigLocation</param-name>
      <param-value>
             /WEB-INF/classes/applicationContext.xml,
             /WEB-INF/classes/spring-action.xml
      </param-value>
</context-param>

<listener><!--  使用Listener加载Spring配置文件-->
      <listener-class>
             org.springframework.web.context.ContextLoaderListener
      </listener-class>
</listener>

<servlet><!--  spring分发器-->
      <servlet-name>spring</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
      <init-param>
             <param-name>contextConfigLocation</param-name>
             <param-value>/WEB-INF/classes/spring-action.xml</param-value>
      </init-param>
      <load-on-startup>1</load-on-startup><!--  启动时加载-->
</servlet>

<servlet-mapping>
      <servlet-name> spring</servlet-name>
      <url>*.mvc</url>
</servlet-mapping>

如果一个Controller要处理多个业务逻辑,可以使用MultiActionController,相当于Struts 1中的DispatchAction,能根据某个参数将不同的请求分发到不同的方法上

import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

public class CatController extends AbstractController{
      private ICatService catService;
      //setter、getter略

      protected ModelAndView add(HttpServletRequestrequest,HttpServletResponse response) throws Exception{
             ……
             return new ModelAndView("cat/addCat");
      }

      protected ModelAndView list(HttpServletRequestrequest,HttpServletResponse response) throws Exception{
             List<Cat> catList =catService.listCat();
             request.setAttribute("catList", catList);
             return new ModelAndView("cat/listCat");
      }

}

配置到spring-action.xml

<bean id="paraMethodResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
      <property name="paramName">
             <value>action</value><!--  配置分发参数-->
      </property>
      <property name="defaultMethodName">
             <value>list</value><!--  配置默认的执行方法-->
      </property>
</bean>

<bean id="urlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandleMapping">
             <property name="mappings">
                    <props>
                           <prop key="cat.mvc">catController</prop><!--  访问"cat.mvc"则交给catController处理-->
                           <prop key="catMulti.mvc">catMultiController</prop><!--  访问"catMulti.mvc"则交给catMultiController处理-->
                    <props>
             </property>
      </bean>

      <bean id="catController" class="com.clf.spring.CatMultiController">
             <property name="catService" ref="catService"></property>
      </bean>

      <bean id="catMultiController" class="com.clf.spring.CatController">
             <property name="catService" ref="catService"></property>
      </bean>

Spring之MVC模块的更多相关文章

  1. Spring Framework------>version4.3.5.RELAESE----->Reference Documentation学习心得----->Spring Framework中的spring web MVC模块

    spring framework中的spring web MVC模块 1.概述 spring web mvc是spring框架中的一个模块 spring web mvc实现了web的MVC架构模式,可 ...

  2. Spring REST实践之Spring Web MVC

    Spring概要 Spring Framework提供了依赖注入模型和面向切面编程,简化了基础型代码的编写工作以及更好的能够与其它框架和技术整合起来.Spring Framework由data acc ...

  3. Spring 4 MVC+Hibernate 4+MySQL+Maven使用注解集成实例

    Spring 4 MVC+Hibernate 4+MySQL+Maven使用注解集成实例 转自:通过注解的方式集成Spring 4 MVC+Hibernate 4+MySQL+Maven,开发项目样例 ...

  4. spring的MVC执行原理

    spring的MVC执行原理 1.spring mvc将所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责对请求 进行真正的处理工作. 2.DispatcherSer ...

  5. Spring Web MVC(一)

    [toc] 概述 Spring的web框架围绕DispatcherServlet设计. DispatcherServlet的作用是将请求分发到不同的处理器. Spring的web框架包括可配置的处理器 ...

  6. 淘淘商城之spring web mvc架构

    一.什么是springmvc springmvc是spring框架的一个模块,springmvc和spring无需通过中间整合层进行整合: springmvc是一个基于mvc的web框架   二.mv ...

  7. 1.Spring——七大主要模块

    Spring有七大功能模块,分别是Spring Core,AOP,ORM,DAO,MVC,WEB,Content. 下面分别简单介绍: 1.Spring Core Core模块是Spring的核心类库 ...

  8. 一头扎进Spring之---------Spring七大核心模块

    Spring七大核心模块 核心容器(Spring Core) 核心容器提供Spring框架的基本功能.Spring以bean的方式组织和管理Java应用中的各个组件及其关系.Spring使用BeanF ...

  9. Spring官方文档翻译——15.1 介绍Spring Web MVC框架

    Part V. The Web 文档的这一部分介绍了Spring框架对展现层的支持(尤其是基于web的展现层) Spring拥有自己的web框架--Spring Web MVC.在前两章中会有介绍. ...

随机推荐

  1. 页面js脚本与img等资源的下载顺序问题。

    引言问题 <img src="background.jpg"><script src="test.js"></script> ...

  2. [LeetCode] Min Cost Climbing Stairs 爬楼梯的最小损失

    On a staircase, the i-th step has some non-negative cost cost[i] assigned (0 indexed). Once you pay ...

  3. 【Swift】IOS开发中自定义转场动画

    在IOS开发中,我们model另外一个控制器的时候,一般都使用默认的转场动画. 其实我们可以自定义一些转场动画.达到不同的转场效果. 步骤如下:(photoBrowser是目标控制器) 1.在源控制器 ...

  4. 机器学习基石:16 Three Learning Principles

    三个理论上界: 三个线性模型: 三个关键工具: 三条学习规则: 1.奥卡姆剃刀定律 先从简单模型开始, 训练后出现欠拟合, 再尝试复杂点模型. 2.采样误差 训练.验证.测试数据尽量同分布. 3.数据 ...

  5. Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined)

    C题卡了好久,A掉C题之后看到自己已经排在好后面说实话有点绝望,最后又过了两题,总算稳住了. AC:ABCDE Rank:191 Rating:2156+37->2193 A.Oath of t ...

  6. spoj 1676 AC自动机+矩阵快速

    Text Generator Time Limit: 1386MS   Memory Limit: 1572864KB   64bit IO Format: %lld & %llu Submi ...

  7. hdu 5636 搜索 BestCoder Round #74 (div.2)

    Shortest Path  Accepts: 40  Submissions: 610  Time Limit: 4000/2000 MS (Java/Others)  Memory Limit: ...

  8. 中断API之setup_irq【转】

    转自:https://blog.csdn.net/tiantao2012/article/details/78957472 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...

  9. Awesome-Text-Classification:文本分类资源合集

    Awesome-Text-Classification https://github.com/fendouai/Awesome-Text-Classification Projects fastTex ...

  10. Vegas Pro 15软件界面对比

    大家都知道Vegas是一款专业的视频制作软件,而新版的VEGAS Pro 15更是专业性十足.好了,废话不多说,接下来小编就带大家具体的看一下Vegas 15界面都有哪些更新吧! 一.软件图标 图1: ...