编译软件:IntelliJ IDEA 2019.2.4 x64
操作系统:win10 x64 位 家庭版
Maven版本:apache-maven-3.6.3
Mybatis版本:3.5.6
SpringMvc版本:5.3.1
①SpringMVC是Spring的一种子框架,它是Spring为【 展现层 | 表示层 | 表述层 | 控制层】提供的基于MVC设计理念的优秀的Web框架,是目前最主流的MVC框架。
什么是Mvc设计理念?
就是Mvc设计思想,即Model (业务模型),View(用户视图)与Controller(控制层)
为什么要使用Mvc设计理念?
简单来说,MVC设计理念提供了一种结构化的方式来组织应用程序的代码,使得开发人员可以更好地管理复杂性、提高开发效率,并实现可维护、可扩展和可测试的代码。
②SpringMVC是非侵入式
什么叫非侵入式?
它强调了一种开发模式 ,
在使用框架的同时尽量减少对应用程序代码的依赖和修改,使得框架与应用程序之间的耦合度降低。
具体来说,在SpringMVC中,你可以编写普通的Java类作为控制器,并通过注解或配置将其标识为处理特定URL请求的方法
。这种方式让您可以保持应用程序原有的结构和业务逻辑,而不需要强制按照框架的规范去改变代码的组织方式。
③SpringMVC是用来代替Servlet,在未用到SpringMvc框架之前,我们通常都是基于Servlet处理请求,做出响应。
SpringMvc执行业务的简易流程如下所示
①在IDEA中创建一个Maven项目,导入相关jar包
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>5.3.10version>
dependency>
<dependency>
<groupId>org.thymeleafgroupId>
<artifactId>thymeleaf-spring5artifactId>
<version>3.0.12.RELEASEversion>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>4.0.1version>
<scope>providedscope>
dependency>
这里为何把javax.servlet-api的scope设为provided?
因为tomcat服务器中已经有了一个javax.servlet-api,若pop.xml中将javax.servlet-api这个jar包依赖范围设到Tomcat服务器中,则两个servlet的jar包会发生冲突。
②编写配置文件
在web.xml中注册DispatcherServlet
在springmvc.xml实现以下功能
③编写请求处理器【Controller | Handler】
④准备页面进行以测试
①准备
新建一个Maven工程,在其上搭建web工程环境,工程结构如下所示
②在Maven工程中的pop.xml中导入相关jar包
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>5.3.10version>
dependency>
<dependency>
<groupId>org.thymeleafgroupId>
<artifactId>thymeleaf-spring5artifactId>
<version>3.0.12.RELEASEversion>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>4.0.1version>
<scope>providedscope>
dependency>
③在spring的配置文件中【springmvc.xml】中开启组件扫描和配置视图解析器
<context:component-scan base-package="spring">context:component-scan>
<bean id="thymeleafViewResolver" class="org.thymeleaf.spring5.view.ThymeleafViewResolver">
<property name="characterEncoding" value="UTF-8">property>
<property name="templateEngine">
<bean class="org.thymeleaf.spring5.SpringTemplateEngine">
<property name="templateResolver">
<bean class="org.thymeleaf.spring5.templateresolver.SpringResourceTemplateResolver">
<property name="prefix" value="/WEB-INF/pages/">property>
<property name="suffix" value=".html">property>
<property name="characterEncoding" value="UTF-8">property>
bean>
property>
bean>
property>
bean>
④在web.xml中注册DispatcherServlet【前端控制器】
<servlet>
<servlet-name>dispatcherServletservlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServletservlet-class>
<init-param>
<param-name>contextConfigLocationparam-name>
<param-value>classpath:springmvc.xmlparam-value>
init-param>
<load-on-startup>1load-on-startup>
servlet>
<servlet-mapping>
<servlet-name>dispatcherServletservlet-name>
<url-pattern>/url-pattern>
servlet-mapping>
⑤从当前工程下/src/main/spring/Controller下新建一个类HelloController,作为请求处理器,使用@Controlleri注解标识它为请求处理器,并且使用@RequestMapping注解标识处理方法【URL】
@Controller
//标识此类为请求处理器
public class HelloController {
//配置url【/】 映射到wEB-INF/index.html
@RequestMapping("/")
public String toIndex(){
//WEB-INF/pages/index.html
//物理视图名=视图前餐+逻辑视图名+视图后缀
return "index";
}
/**
* 配置url【/HelloControllerMethod】,浏览器中的请求会基于该url,找到并进入下面的方法
*/
@RequestMapping("/HelloControllerMethod")
public String HelloControllerMethod(){
System.out.println("--->请求已经进入到HelloControllerMethod方法中");
//默认是转发请求
return "success";
}
}
⑥编写相关前端页面【index.html & success.html】
DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Titletitle>
head>
<body>
<h1>首页h1>
<a th:href="@{/HelloControllerMethod}">发送请求a>
body>
html>
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>转发成功,到达成功页面title>
head>
<body>
<h1>成功页面h1>
body>
html>
⑦开启Tomcat服务器,运行测试