写点什么

SpringMVC(一、快速入门)

作者:
  • 2022 年 8 月 08 日
  • 本文字数:4145 字

    阅读完需:约 14 分钟

1、SpringMVC 概述

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


​ SpringMVC 已经成为目前最主流的 MVC 框架之一,并且随着 Spring3.0 的发布,全面超越 Struts2,成为最优 秀的 MVC 框架。它通过一套注解,让一个简单的 Java 类成为处理请求的控制器,而无须实现任何接口。同时 ,它还支持 RESTful 编程风格的请求。


​ 它是一个典型的教科书式的 mvc 构架,而不像struts等都是变种或者不是完全基于 mvc 系统的框架,对于初学者或者想了解 mvc 的人来说我觉得 spring 是最好的,它的实现就是教科书!第二它和tapestry一样是一个纯正的 servlet 系统,这也是它和 tapestry 相比 struts 所具有的优势。而且框架本身有代码,看起来容易理解。

2、SpringMVC 快速入门

开发步骤:


​ ① 导入 SpringMVC 相关坐标


​ ② 配置 SpringMVC 核心控制器 DispathcerServlet


​ ③ 创建 Controller 类和视图页面


④ 使用注解配置 Controller 类中业务方法的映射地址


⑤ 配置 SpringMVC 核心文件 spring-mvc.xml


​ ⑥ 客户端发起请求测试

1、导入坐标

  • ​ 导入 Spring 和 SpringMVC 的坐标


    <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-web</artifactId>            <version>5.0.5.RELEASE</version>        </dependency>        <dependency>            <groupId>org.springframework</groupId>            <artifactId>spring-webmvc</artifactId>            <version>5.0.5.RELEASE</version>        </dependency>
复制代码


  • ​ 导入 Servlet 和 Jsp 的坐标


    <dependency>            <groupId>javax.servlet</groupId>            <artifactId>javax.servlet-api</artifactId>            <version>3.0.1</version>            <scope>provided</scope>        </dependency>        <dependency>            <groupId>javax.servlet.jsp</groupId>            <artifactId>javax.servlet.jsp-api</artifactId>            <version>2.2.1</version>            <scope>provided</scope>        </dependency>
复制代码

2、在 web.xml 配置 SpringMVC 的核心控制器

<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">

<!--配置SpringMVC的前端控制器--> <servlet> <servlet-name>DispatcherServlet</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring-mvc.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>DispatcherServlet</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>

<!--全局初始化参数--> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param>
<!--配置监听器--> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener>

<servlet> <servlet-name>UserServlet</servlet-name> <servlet-class>com.xmp.web.UserServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>UserServlet</servlet-name> <url-pattern>/userServlet</url-pattern> </servlet-mapping>
</web-app>
复制代码

3、创建 Controller 类和视图页面

  • 创建 Controller 和业务方法


@Controller@RequestMapping("/user")public class UserController {
// 请求地址 http://localhost:8080/user/quick @RequestMapping(value="/quick",method = RequestMethod.GET,params = {"username"}) public String save(){ System.out.println("Controller save running...."); return "success"; }
}
复制代码


  • 创建视图页面 index.jsp


<%@ page contentType="text/html;charset=UTF-8" language="java" %><html><head>    <title>Title</title></head><body>    <h1>Success!</h1></body></html>
复制代码

4、测试


3、SpringMVC 流程图示



小结

SpringMVC 的开发步骤


导入SpringMVC相关坐标 
配置SpringMVC核心控制器DispathcerServlet
创建Controller类和视图页面
使用注解配置Controller类中业务方法的映射地址
配置SpringMVC核心文件 spring-mvc.xml
客户端发起请求测试
复制代码

4、SpringMVC 组件解析


1、SpringMVC 的执行流程

① 用户发送请求至前端控制器 DispatcherServlet。


② DispatcherServlet 收到请求调用 HandlerMapping 处理器映射器。


③ 处理器映射器找到具体的处理器(可以根据 xml 配置、注解进行查找),生成处理器对象及处理器拦截器(如果 有则生成)一并返回给 DispatcherServlet。


④ DispatcherServlet 调用 HandlerAdapter 处理器适配器。


⑤ HandlerAdapter 经过适配调用具体的处理器(Controller,也叫后端控制器)。


⑥ Controller 执行完成返回 ModelAndView。


⑦ HandlerAdapter 将 controller 执行结果 ModelAndView 返回给 DispatcherServlet。


⑧ DispatcherServlet 将 ModelAndView 传给 ViewReslover 视图解析器。


⑨ ViewReslover 解析后返回具体 View。


⑩ DispatcherServlet 根据 View 进行渲染视图(即将模型数据填充至视图中)。DispatcherServlet 响应用户。

2、SpringMVC 组件解析

  1. 前端控制器:

  2. DispatcherServlet 用户请求到达前端控制器,它就相当于 MVC 模式中的 C,DispatcherServlet 是整个流程控制的中心,由 它调用其它组件处理用户的请求,DispatcherServlet 的存在降低了组件之间的耦合性。

  3. 处理器映射器:

  4. HandlerMapping HandlerMapping 负责根据用户请求找到 Handler 即处理器,SpringMVC 提供了不同的映射器实现不同的 映射方式,例如:配置文件方式,实现接口方式,注解方式等。

  5. 处理器适配器:

  6. HandlerAdapter 通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理 器进行执行。

  7. 处理器:Handler 它就是我们开发中要编写的具体业务控制器。由 DispatcherServlet 把用户请求转发到 Handler。由 Handler 对具体的用户请求进行处理。

  8. 视图解析器:

  9. View Resolver View Resolver 负责将处理结果生成 View 视图,View Resolver 首先根据逻辑视图名解析成物理视图名,即 具体的页面地址,再生成 View 视图对象,最后对 View 进行渲染将处理结果通过页面展示给用户。

  10. 视图:

  11. View SpringMVC 框架提供了很多的 View 视图类型的支持,包括:jstlView、freemarkerView、pdfView 等。最 常用的视图就是 jsp。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程 序员根据业务需求开发具体的页面

3、SpringMVC 注解解析

@RequestMapping


  • ​ 作用:


​ 用于建立请求 URL 和处理请求方法之间的对应关系


  • ​ 位置:


​ 类上,请求 URL 的第一级访问目录。此处不写的话,就相当于应用的根目录


​ 方法上,请求 URL 的第二级访问目录,与类上的使用 @ReqquestMapping 标注的一级目录一起组成访问虚拟路径


  • ​ 属性:


​ value:用于指定请求的 URL。它和 path 属性的作用是一样的


​ method:用于指定请求的方式


​ params:用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的 key 和 value 必须和配置的一模一样


  • ​ 例如:


​ params = {"accountName"},表示请求参数必须有 accountName


​ params = {"moeny!100"},表示请求参数中 money 不能是 100


  1. mvc 命名空间引入

  2. 命名空间:

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

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

  5. 约束地址:http://www.springframework.org/schema/context

  6. http://www.springframework.org/schema/context/spring-context.xsd

  7. http://www.springframework.org/schema/mvc

  8. http://www.springframework.org/schema/mvc/spring-mvc.xsd

  9. 组件扫描 SpringMVC 基于 Spring 容器,所以在进行 SpringMVC 操作时,需要将 Controller 存储到 Spring 容器中,如果使 用 @Controller 注解标注的话,就需要使用进行组件扫描。

5、SpringMVC 的 XML 配置解析

1、视图解析器

​ SpringMVC 有默认组件配置,默认组件都是 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="/WEB-INF/views/"></property><property name="suffix" value=".jsp"></property></bean>
复制代码

小结

SpringMVC 的相关组件


​ • 前端控制器:DispatcherServlet


​ • 处理器映射器:HandlerMapping


​ • 处理器适配器:HandlerAdapter


​ • 处理器:Handler


​ • 视图解析器:View Resolver • 视图:View


SpringMVC 的注解和配置


​ • 请求映射注解:@RequestMapping


​ • 视图解析器配置:


REDIRECT_URL_PREFIX = "redirect:"


FORWARD_URL_PREFIX = "forward:"


prefix = ""; suffix = "";

发布于: 刚刚阅读数: 5
用户头像

关注

在校大三学生一枚 2022.08.02 加入

喜欢学习编程,擅长技术栈JAVA

评论

发布
暂无评论
SpringMVC(一、快速入门)_开源_斯_InfoQ写作社区