Spring Web MVC 基础

一、Spring Web MVC简介

1.1、MVC模式简介

*M-Model模型

模型(Model)的职责是负责业务逻辑。包含两层:业务数据和业务处理逻辑。比如实体类、DAO、Service都属于模型层。

*V-View视图

视图(View)的职责是负责显示界面和用户交互(收集用户信息)。属于视图的组件是不包含业务逻辑和控制逻辑的JSP。

*C-Controller控制器

控制器是模型层M和视图层V之间的桥梁,用于控制流程比如:在Servlet项目中的单一控制器ActionServlet。

1.2、什么是Spring Web MVC

  Spring Web MVC是spring框架一个非常重要的功能模块。实现了MVC结构,便于简单、快速开发MVC结构的web程序。Spring Web MVC提供的API封装了web开发中常用的功能,简化了web过程。

1.3、Spring Web MVC的核心组件

  Spring Web MVC提供了M、V和C相关的主要实现组件,具体如下

*DispatcherServlet(控制器,请求入口)

*HandlerMapping(控制器,请求派发)

*Controller(控制器,请求处理流程)

*ModelAndView(模型,封装业务处理结果和视图)

*VeiwResolver(视图,视图显示处理器)

1.4、Spring Web MVC的处理流程

Spring Web MVC的主要处理流程如下

*浏览器向Spring发出请求,请求交给前段控制器DispatcherServlet处理。

*控制器通过HandlerMapping找到相应的Controller组件处理请求。

*执行Controller组件约定方法处理请求,在约定方法调用模型组件完成业务处理。约定方法可以返回一个ModelAndView对象,封装了处理结果数据和视图名称信息。

*控制器接收ModelAndView之后,调用V诶我Resolve让自己,定位View(JSP)并传递数据信息,生成响应界面结果。

二、基于XML配置的MVC应用

2.1、搭建Spring Web MVC环境

搭建Spring Web MVC开发环境的主要步骤如下

*创建Web工程,导入Spring Web MVC相关开发包

  例如 Spring API、Web、webmvc等开发包

*在src下添加Spring的XML配置文件

  名称可以自定义,例如spring-mvc.xml

*在web.xml中配置DispatcherServlet前段控制器组件

  DispatcherServlet组件在spring mvc中已提供,只需要配置即可。

  配置DispatcherServlet时,同时指定xml配置文件。

2.2、DispatcherServlet控制器配置

2.3、HandlerMapping组件

  通过HandlerMapping组件,DispatcherServlet控制器可以将客户HTTP请求映射到Controller组件上。

*SimpleURLHandlerMapping

  维护一个HTTP请求和Controller映射关系列表(map),根据列表对应关系调用Controller。

*RequestMappingHandlerMapping

  RequestMappingHandlerAdapter

  在Controller类和方法使用@RequestMapping注解指定对应的客户HTTP请求(后续注解配置部分将信息介绍)。

2.4、Controller组件

  Controller组件负责执行具体的业务处理,可调用DAO等组件,编写时需要Controller借口及约定方法。

2.5、ModelAndView组件

  Controller组件约定的HandlerMapping方法执行后返回一个ModelAndView对象,该对象可封装模型数据和视图名响应信息。ModelAndView构造器如下

  ModelAndView(string viewName)

  ModelAndView(String viewName,Map model)

  viewName是jsp页面的名字

  model的数据存储到request的attribute中

2.6、ViewResolver组件

  所有Controller组件都返回一个ModelAndView实例,封装了视图名。Spring中的视图一名字为标识,视图解析器ViewResolver通过名字来解析视图。

  Spring提供了多种视图解析器,具体如下

InternalResourceViewResolver使用实例如下

如:视图名hello通过以上配置可以映射到/WEB-INF/jsp/hello.jsp

三、基于注解配置的MVC应用

3.1、@RequestMapping注解应用

  @RequestMapping可以用在类定义和方法定义上。

  @RequestMapping标记这个类或方法与哪一个客户请求对应

  

@Controller
@RequestMapping("day01"public class HelloController{
  
  @RequestMapping("/hello.form")
  public String execute() threws Exeception{
        return "hello";          
    }              
}

*开启@RequestMapping注解映射,需要在Spring的XML配置文件中定义RequestMappingHandlerMapping(类定义前)和RequestMappingHandlerMapping(方法定义前)两个bean组件。

RequestMappingHandlerMapping和RequestMappingHandlerAdapter两个bean组件定义示例

从spring3.2版本开始可以使用下面xml配置简化

RequestMappingHandlerMapping和RequestMappingHandlerAdapter定义

<mvc:annotation-driven/>

3.2、@Controller注解应用

  推荐使用@Controller注解声明Controller组件,这样可以使得Controller定义更加灵活,可以不用实现Controller接口,请求处理的方法也可以灵活定义。

@Controller
@RequestMapping("/day01")
public class HelloController{
  
  @RequestMapping("/hello.form")
  public String execute() throws Exception{
       return "hello";
    }    
}

  为了使@Controller注解生效,需要在Spring的xml配置文件中开启组件扫描定义,并指定Controller组件所在的包。

<context:component-scan base-package="com.tarena.controller"/>
原文地址:https://www.cnblogs.com/liujie-e2/p/7490998.html