原文链接:
https://juejin.cn/post/7093670296888016933
1. 为啥要学 SpringMVC?
1.1 SpringMVC 简介
在学习 SpringMVC 之前我们先看看在使用 Servlet 的时候我们是如何处理用户请求的:
- 配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--将 Servlet接口实现类交给Tomcat管理-->
<servlet>
<servlet-name>userServlet</servlet-name> <!--Servlet接口实现类名称-->
<servlet-class>com.xxl.controller.UserServlet</servlet-class><!--声明servlet接口实现类类路径-->
</servlet>
<servlet-mapping>
<servlet-name>userServlet</servlet-name>
<url-pattern>/user</url-pattern> <!--设置Servlet类的请求路径,必须以 / 开头-->
</servlet-mapping>
</web-app>
复制代码
- 继承 HttpServlet,实现 doGet 和 doPost 方法
public class UserServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 这里用来处理用户的 get 请求
System.out.println("哈哈哈哈哈哈我头上有注解");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 这里用来处理用户的 post 请求
System.out.println("接收到用户的 post 请求");
}
}
复制代码
- 获取请求参数
String name = request.getParameter("name");
String age = request.getParameter("age");
....
复制代码
一顿操作下来,我们发现用 Servlet 处理用户的请求也太麻烦了吧。
每个 Servlet 都要继承 HttpServlet、重写两个方法,我们需要写一堆 getParameter() 方法来获取请求参数,而且还要做数据类型的转换。
那有没有一个别人封装好的工具或者是框架让我少写这些重复性的代码呢?
SpringMVC闪亮登场。
SpringMVC 是一种轻量级的、基于 MVC 的 Web 层应用框架,它属于 Spring 框架的一部分。SpringMVC 说白了就是对 Servlet 进行了封装,方便大家使用。
1.2 SpringMVC 优点
- 天生与 Spring 集成
- 支持 Restful 风格开发
- 便于与其他视图技术集成,例如 theamleaf、freemarker等
- 强大的异常处理
- 对静态资源的支持
总之就是好用!
2. HelloWorld
这里我们先来开发一个基于 SpringMVC 的程序,感受一下 SpringMVC 的迷人特性。
- 开发工具:IDEA
- 构建工具:Maven
2.1 新建基于 Maven 的 web 项目
2.2 加入依赖
<!-- servlet -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
</dependency>
<!--springmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<!-- junit -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
复制代码
2.3 创建中央调度器
DispatcherServlet 是 SpringMVC 的中央调度器,它主要负责加载 SpringMVC 的配置。
从它的名字来看,他也属于一个 Servlet,遵守 Servlet 规范。所以我们需要在 web.xml 中创建 DispatcherServlet。
web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<!--servlet: DispatcherServlet-->
<servlet>
<servlet-name>SpringMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet<