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. angular的时间指令 以及防止闪烁问题

    1.点击事件 <!doctype html><html lang="en"><head> <meta charset="UTF- ...

  2. 机器学习技法:05 Kernel Logistic Regression

    Roadmap Soft-Margin SVM as Regularized Model SVM versus Logistic Regression SVM for Soft Binary Clas ...

  3. 基于vfs实现自己的文件系统

    1.Linux 文件系统组成结构 linux文件系统有两个重要的特点:一个是文件系统抽象出了一个通用文件表示层--虚拟文件系统或称做VFS.另外一个重要特点就是它的文件系统支持动态安装(或说挂载等), ...

  4. poj2406 连续重复子串

    Power Strings Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 41110   Accepted: 17099 D ...

  5. [bzoj3673/3674可持久化并查集加强版]

    n个集合 m个操作 操作: 1 a b 合并a,b所在集合 2 k 回到第k次操作之后的状态(查询算作操作) 3 a b 询问a,b是否属于同一集合,是则输出1否则输出0 0<n,m<=2 ...

  6. 使用C# (.NET Core) 实现状态设计模式 (State Pattern)

    本文的概念性内容来自深入浅出设计模式一书 项目需求 这是一个糖果机的需求图. 它有四种状态, 分别是图中的四个圆圈: No Quarter: 无硬币 Has Quater 有硬币 Gumball So ...

  7. day4 liaoxuefeng---函数式编程

    一.概述: 函数式编程的一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数! Python对函数式编程提供部分支持.由于Python允许使用变量,因此,Python不是纯函数式编程 ...

  8. shell基本命令

    linux基本命令和shell基本命令,好多人傻傻分不清. linux基本命令积累如下: pwd:显示当前工作目录 cd:改变当前目录 ls:显示当前目录中所有目录文件和文本文件 ls -F:显示当前 ...

  9. glusterfs 4.0.1 rpc 分析笔记2 (socket.so 模块)

    socket.c在4000行位置定义了一组结构函数,我们可以从这里开始找到入口,如果是客户端则需要调用connect, 如果是服务端则需要调用listen, struct rpc_transport_ ...

  10. django 发送手机验证码

    一.流程分析: 1.用户在项目前端,输入手机号,然后点击[获取验证码],将手机号发到post到后台. 2.后台验证手机号是否合法,是否已被占用,如果通过验证,则生成验证码,并通过运行脚本,让短信运营商 ...