Spring MVC是管理controller对象的容器

一、Spring MVC是什么

Spring MVC是一种基于 Java 的、实现 MVC 设计模型的、请求驱动类型的轻量级 Web 框架,属于SpringFrameWork 的后续产品,已经融合在 Spring Web Flow 中。

Spring MVC是一个MVC模式的WEB开发框架。它已经成为目前最主流的MVC框架之一,并且随着Spring 3.0的发布,全面超越 Struts2,成为最优秀的 MVC 框架。

Spring MVC通过一套注解,让一个简单的 Java 类成为处理请求的控制器,而无须实现任何接口,同时它还支持 RESTful 编程风格的请求。

Spring和Spring MVC的相同点

  • 都是容器(管理对象的地方)。

两者的区别

  • Spring可以说是一个管理bean的容器,也可以说是包括很多开源项目的总称。(Spring是管理service和dao层的容器)
  • Spring MVC是Spring其中的一个开源项目,是基于Spring功能之上添加的Web框架,想用Spring MVC必须先依赖Spring。(Spring MVC是管理controller对象的容器)

二、Spring MVC的执行流程

Spring MVC的执行流程:

Spring MVC执行流程

  1. 用户发送请求至前端控制器 DispatcherServlet
  2. DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器。
  3. 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给 DispatcherServlet
  4. DispatcherServlet 调用 HandlerAdapter 处理器适配器。
  5. HandlerAdapter 经过适配调用具体的处理器(Controller,也叫后端控制器)。
  6. Controller执行完成返回ModelAndView。
  7. HandlerAdapter 将controller执行结果ModelAndView返回给 DispatcherServlet
  8. DispatcherServlet 将ModelAndView传给ViewReslover视图解析器。
  9. ViewReslover解析后返回具体 View
  10. DispatcherServlet 根据 View 进行渲染视图(即将模型数据填充至视图中)。DispatcherServlet 响应用户。

Spring MVC的六大组件:

  1. DispatcherServlet 前端控制器。DispatcherServlet 是整个流程控制的中心,相当于 MVC 模式中的 C,由它调用其它组件处理用户的请求。DispatcherServlet 的存在降低了组件之间的耦合性。
  2. HandlerMapping 处理器映射器HandlerMapping 负责根据用户请求即找到对应 Handler 。Spring MVC提供了不同的映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。
  3. HandlerAdapter 处理器适配器。通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。
  4. Handler 处理器。Handler 就是我们开发中要编写的具体业务控制器。由 DispatcherServlet 把用户请求转发到 Handler。由 Handler 对具体的用户请求进行处理。
  5. ViewResolver 视图解析器ViewResolver 负责将处理结果生成 View 视图。ViewResolver 首先根据逻辑视图名解析成物理视图名,即具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展示给用户。
  6. View 视图。Spring MVC 框架提供了很多的 View 视图类型的支持,包括:jstlView、freemarkerView、pdfView等,最常用的视图就是 jsp。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。

三、Spring MVC注解和XML配置

3.1 常用注解

详解springmvc常用5种注解:https://www.jb51.net/article/166604.htm

注解 说明
@RequestMapping 用于处理请求地址映射,可以作用于类和方法上。
@RequestParam 用于获取传入参数的值。
(当请求参数名称和方法形参不一致时在两者之间手动形成映射)
@PathViriable 用于定义路径参数值。
(用在restful风格的请求中,通过占位符解析url地址上的请求参数)
@ResponseBody 作用于方法上,可以将整个返回结果以某种格式返回,如json或xml格式。
@CookieValue 用于获取请求的Cookie值。
@ModelAttribute 用于把参数保存到Model对象中。
@SessionAttributes 将模型中的数据存储到request域中。
@Controller 用于实例化Bean,使用在控制层类上。
@Service 用于实例化Bean,使用在service层类上。
@Repository 用于实例化Bean,使用在dao层类上。
@Component 用于实例化Bean,使用在类上。

@RequestMapping 请求映射,常用属性如下

  • value:用于指定请求的URL。它和path属性的作用是一样的。
  • method:用于指定请求的方式。
  • params:用于指定限制请求参数的条件,要求请求参数的key和value必须和配置的一模一样。该属性支持简单的表达式。如 params={"accountName"} 请求参数必须有accountName,params={"money!100"} 请求参数中money不能是100。
3.2 MVC命名空间的引入

命名空间:

xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"

约束地址:

http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
3.3 组件扫描

Spring MVC基于Spring容器,所以在进行Spring MVC操作时,需要将Controller存储到Spring容器中,如果使用 @Controller 注解标注的话,就需要使用 <context:component-scan base-package=“com.example.controller"/> 进行组件扫描。

3.4 XML配置说明

Spring MVC有默认组件配置,默认组件都是 DispatcherServlet.properties 配置文件中配置的,该配置文件地址org/springframework/web/servlet/DispatcherServlet.properties ,该文件中配置了默认的视图解析器 org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver

该解析器源码中可以看到其默认设置,如下:

REDIRECT_URL_PREFIX = "redirect:"  --重定向前缀
FORWARD_URL_PREFIX = "forward:"    --转发前缀(默认值)
prefix = "";     --视图名称前缀
suffix = "";     --视图名称后缀

我们可以通过属性注入的方式修改视图的前后缀:

<!--配置内部资源视图解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="prefix" value="/"></property>
  <property name="suffix" value=".jsp"></property>
</bean>

Spring MVC入门案例:https://blog.youkuaiyun.com/weixin_60808029/article/details/124835656#Spring_MVC_712

四、Spring MVC的数据响应方式和获得请求数据

4.1 数据响应方式

有两种数据响应方式:页面跳转、回写数据。

第一种:页面跳转方式

  1. 返回字符串形式

该方式会将返回的字符串与视图解析器的前后缀拼接后跳转。

@RequestMapping("/quick")
public String quickMethod(){
   
return "index";
}
<property name="prefix" value="/WEB-INF/views/" />
<property name="suffix" value=".jsp" />

上述代码代表的转发资源地址是:/WEB-INF/views/index.jsp

返回带有前缀的字符串:转发 forward:/WEB-INF/views/index.jsp ,重定向 redirect:/index.jsp

  1. 通过ModelAndView对象返回①

在Controller中方法返回ModelAndView对象,并且设置视图名称。

@RequestMapping(value="/quick2")
public ModelAndView save2(){
   
    /*
    Model:模型,用来封装数据
    View:视图,用来展示数据
    */
    ModelAndView modelAndView = new ModelAndView();
    //设置模型数据,数据返回到request域中
    modelAndView.addObject("username","itcast");
    //设置视图名称
    modelAndView.setViewName("success");
    return modelAndView;
}
  1. 通过ModelAndView对象返回②

在Controller中方法形参上直接声明ModelAndView,无需在方法中自己创建,由Spring自行提供并注入,在方法中直接使用该对象设置视图,同样可以跳转页面。

@RequestMapping(value="/quick3")
public ModelAndView save3(ModelAndView modelAndView){
   
    modelAndView.addObject("username","itheima");
    modelAndView.setViewName("success");
    return modelAndView;
}

@RequestMap
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值