学习来源:黑马程序员SSM框架教程_Spring+SpringMVC+Maven高级+SpringBoot+MyBatisPlus企业实用开发技术
📚SpringMVC概述
🐇三层架构
- SpringMVC是处于Web层的框架,其主要作用是接收前端发过来的请求和数据然后经过处理并将处理的结果响应给前端。
- 现在web程序大都基于三层架构来实现,后端服务器使用Servlet来接收请求和数据。
- Servlet拆分成三层,分别是web、service和dao:
- web层主要由servlet来处理,负责页面请求和数据的收集以及响应结果给前端。
- service层主要负责业务逻辑的处理。
- dao层主要负责数据的增删改查操作。
- 针对web层进行了优化,采用了MVC设计模式,将其设计为controller、view和Model。
- controller负责请求和数据的接收,接收后将其转发给service进行业务处理。
- service根据需要会调用dao对数据进行增删改查。
- dao把数据处理完后将结果交给service,service再交给controller。
- controller根据需求组装成Model和View,Model和View组合起来生成页面转发给前端浏览器。这样做的好处就是controller可以处理多个请求,并对请求进行分发,执行不同的业务操作。
- controller负责请求和数据的接收,接收后将其转发给service进行业务处理。
🐇异步调用
- 随着互联网的发展,上面的模式因为是同步调用,性能慢慢的跟不上需求,所以异步调用慢慢的走到了前台。
- 因为是异步调用,所以后端不需要返回view视图,将其去除,前端如果通过异步调用的方式进行交互,后台就需要将返回的数据转换成json格式进行返回。
- SpringMVC是一种基于Java实现MVC模型的轻量级Web框架。
- SpringMVC主要负责的就是↓
- controller如何接收请求和数据?
- 如何将请求和数据转发给业务层?
- 如何将响应数据转换成json发回到前端?
📚SpringMVC入门案例
🐇入门案例
- 回顾:Servlet的开发流程↓
- 创建web工程(Maven结构)
- 设置tomcat服务器,加载web工程(tomcat插件)
- 导入坐标(Servlet)
- 定义处理请求的功能类(UserServlet)
- 设置请求映射(配置映射关系)
- SpringMVC的开发流程↓
- 创建web工程(Maven结构)
- 设置tomcat服务器,加载web工程(tomcat插件)
- 导入坐标(SpringMVC + Servlet)
- 定义处理请求的功能类(UserController)
- 设置请求映射(配置映射关系)
- 将SpringMVC设定加载到Tomcat容器中
-
步骤1:打开IDEA,创建一个新的web项目。
-
步骤2:补全目录结构。因为使用骨架创建的项目结构不完整,需要手动补全。
-
步骤3:导入jar包,将pom.xml中多余的内容删除掉,再添加SpringMVC需要的依赖。
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.itheima</groupId> <artifactId>springmvc_01_quickstart</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.2.10.RELEASE</version> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.1</version> <configuration> <port>80</port> <path>/</path> </configuration> </plugin> </plugins> </build> </project>
-
步骤4:创建配置类。
@Configuration @ComponentScan("com.itheima.controller") public class SpringMvcConfig { }
-
步骤5:创建Controller类。
@Controller public class UserController { @RequestMapping("/save") public void save(){ System.out.println("user save ..."); } }
-
步骤6:使用配置类替换web.xml。将web.xml删除,换成ServletContainersInitConfig。
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer { //加载springmvc配置类 protected WebApplicationContext createServletApplicationContext() { //初始化WebApplicationContext对象 AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext(); //加载指定配置类 ctx.register(SpringMvcConfig.class); return ctx; } //设置由springmvc控制器处理的请求映射路径 protected String[] getServletMappings() { return new String[]{"/"}; } //加载spring配置类 protected WebApplicationContext createRootApplicationContext() { return null; } }
-
步骤7:配置Tomcat环境。
-
步骤8:启动运行项目。
-
步骤9:浏览器访问。浏览器输入
http://localhost/save
进行访问,会报如下错误,页面报错的原因是后台没有指定返回的页面,目前只需要关注控制台看user save ...
有没有被执行即可。
-
步骤10:修改Controller返回值解决上述问题。
-
前面我们说过现在主要的是前端发送异步请求,后台响应json数据,所以接下来我们把Controller类的save方法进行修改。
@Controller public class UserController { @RequestMapping("/save") public String save(){ System.out.println("user save ..."); return "{'info':'springmvc'}"; } }
-
再次重启tomcat服务器,然后重新通过浏览器测试访问,会发现还是会报错,这次的错是404。出错的原因是,如果方法直接返回字符串,springmvc会把字符串当成页面的名称在项目中进行查找返回,因为不存在对应返回值名称的页面,所以会报404错误,找不到资源。
-
-
步骤11:设置返回数据为json。再次重启tomcat服务器,然后重新通过浏览器测试访问,就能看到返回的结果数据。
@Controller public class UserController { @RequestMapping("/save") @ResponseBody public String save(){ System.out.println("user save ..."); return "{'info':'springmvc'}"; } }
-
至此SpringMVC的入门案例就已经完成。
🐇注意事项
- SpringMVC是基于Spring的,在pom.xml只导入了
spring-webmvc
jar包的原因是它会自动依赖spring相关坐标。 AbstractDispatcherServletInitializer
类是SpringMVC提供的快速初始化Web3.0容器的抽象类。- AbstractDispatcherServletInitializer提供了三个接口方法供用户实现。
createServletApplicationContext
方法,创建Servlet容器时,加载SpringMVC对应的bean并放入WebApplicationContext对象范围中,而WebApplicationContext的作用范围为ServletContext范围,即整个web容器范围。getServletMappings
方法,设定SpringMVC对应的请求映射路径,即SpringMVC拦截哪些请求。createRootApplicationContext
方法,如果创建Servlet容器时需要加载非SpringMVC对应的bean,使用当前方法进行,使用方式和createServletApplicationContext相同。
- createServletApplicationContext用来加载SpringMVC环境。
- createRootApplicationContext用来加载Spring环境。
📚小结
-
入门案例总结:
- 一次性工作
- 创建工程,设置服务器,加载工程。
- 导入坐标。
- 创建web容器启动类,加载SpringMVC配置,并设置SpringMVC请求拦截路径。
- SpringMVC核心配置类(设置配置类,扫描controller包,加载Controller控制器bean)。
- 多次工作
- 定义处理请求的控制器类。
- 定义处理请求的控制器方法,并配置映射路径(@RequestMapping)与返回json数据(@ResponseBody)。
- 一次性工作
-
知识点1:@Controller
-
知识点2:@RequestMapping
-
知识点3:@ResponseBody