Springmvc基础

Springmvc 基础

【应用】能够独立完成 springmvc 的入门案例

【应用】能够说出 springmvc 的执行流程

【应用】能够熟悉 springmvc 的常用组件

1、SpringMVC 的简介

1.1 SpringMVC 概述

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

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

1.2 Springmvc 处理流程

​

1.3 SpringMVC 快速入门

需求：客户端发起请求，服务器端接收请求，执行逻辑并进行视图跳转。

开发步骤

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

代码实现
①导入 Spring 和 SpringMVC 的坐标、导入 Servlet 和 Jsp 的坐标

Copy
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring‐context</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring‐test</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring‐jdbc</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring‐tx</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<!‐‐springmvc相关‐‐>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring‐web</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring‐webmvc</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<!‐‐数据源相关‐‐>
<!‐‐ Druid连接池 ‐‐>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.10</version>
</dependency>
<!‐‐ mysql驱动 ‐‐>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql‐connector‐java</artifactId>
<version>5.1.39</version>
</dependency>
<!‐‐servlet相关‐‐>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet‐api</artifactId>
<version>3.1.0</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>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>

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

Copy
<!‐‐配置springmvc前端控制器 ‐‐>
<servlet>
<servlet‐name>springmvc</servlet‐name>
<servlet‐class>org.springframework.web.servlet.DispatcherServlet</servlet‐class>
<!‐‐加载springmvc配置文件‐‐>
<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>springmvc</servlet‐name>
<!‐‐
*.action 只处理 后缀为.action的请求
/* 拦截所有请求 jsp 等所有静态资料
/ 除了 jsp 其他请求都拦截 建议配置 /
‐‐>
<url‐pattern>/</url‐pattern>
</servlet‐mapping>

③创建 Controller 和业务方法

Copy
@Controller
public class UserController {
@RequestMapping("/quick")
public String list(){
System.out.println("我执行了");
return "success.jsp";
}
}

③创建视图页面 success.jsp

Copy
<%@ page contentType="text/html;charset=UTF‐8" language="java" %>


Title


hello,springmvc!!



④配置注解

Copy
@Controller
public class UserController {
@RequestMapping("/quick")
public String list(){
System.out.println("我执行了");
return "success.jsp";
}
}

⑤创建 spring-mvc.xml

Copy
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema‐instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring‐beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring‐mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring‐context.xsd">
<!‐‐配置注解扫描‐‐>
<context:component‐scan base‐package="com.bailiban.controller/>
</beans>

⑥访问测试地址

http://localhost:8080/quick

控制台打印

页面显示

1.4 知识要点

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

2、SpringMVC 的组件解析

2.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.2 SpringMVC 组件解析

前端控制器：DispatcherServlet

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

处理器映射器：HandlerMapping

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

处理器适配器：HandlerAdapter

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

器进行执行。

处理器：Handler

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

视图解析器：View Resolver

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

视图：View

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

Copy
说明：在springmvc的各个组件中，处理器映射器、处理器适配器、视图解析器称为springmvc的三大组件。
需要用户开发的组件有handler、view

2.3 默认加载的组件

我们没有做任何配置，就可以使用这些组件

因为框架已经默认加载这些组件了，配置文件位置如下图：

2.4 注解驱动

直接配置处理器映射器和处理器适配器比较麻烦，可以使用注解驱动来加载。

SpringMVC 使用

Copy
<!‐‐ 注解驱动 ‐‐>
<mvc:annotation‐driven />

自动加载 RequestMappingHandlerMapping 和 RequestMappingHandlerAdapter可以在springmvc.xml配置文件中使用<mvc:annotation-driven /> 替代默认的注解处理器和适配器的配置。

2.5 SpringMVC 的视图解析器配置

SpringMVC 有默认组件配置，默认组件都是 DispatcherServlet.properties 配置文件中配置的，该文件中配置了默
认的视图解析器，如下：

Copy
org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver

翻看该解析器源码，可以看到该解析器的默认设置，如下：

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

开发中我们一般将视图放在 WEB-INF 目录，可以通过属性注入的方式修改视图的的前后缀，方便我们开发

Copy
<!‐‐配置视图解析器‐‐>
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
<property name="prefix" value="/WEB‐INF/jsp/" ></property>
<property name="suffix" value=".jsp"></property>
</bean>

2.6 SpringMVC 注解解析

@RequestMapping

作用：用于建立请求 URL 和处理请求方法之间的对应关系
位置：
类上，请求 URL 的第一级访问目录。此处不写的话，就相当于应用的根目录
方法上，请求 URL 的第二级访问目录，与类上的使用 @ReqquestMapping 标注的一级目录一起组成访问虚拟路径
属性：
value：用于指定请求的 URL。它和 path 属性的作用是一样的
method：用于指定请求的方式
params：用于指定限制请求参数的条件。它支持简单的表达式。要求请求参数的 key 和 value 必须和配置的一模一
样
例如：

params = {"accountName"}，表示请求参数必须有 accountName
params = {"moeny!100"}，表示请求参数中 money 不能是 100

2.7 知识要点

SpringMVC 的相关组件

前端控制器：DispatcherServlet
处理器映射器：HandlerMapping
处理器适配器：HandlerAdapter
处理器：Handler
视图解析器：ViewResolver
视图：View