目录
(4)Tomcat启动时加载SpringMVC配置。(Web容器初始化配置类)
<1>使用Maven Archetype(xxx-webapp)快速构建Web项目。
(3)控制器类并定义可访问的操作方法。(xxxController)
(5)Tomcat(Web)容器初始化启动配置类。(加载SpringMVC配置类)
<1>AnnotationConfigWebApplicationContext。(Web环境专用)
<2>使用register(xxxConfig.class)注册SpringMVC配置类。
一、SpringMVC入门案例实现思路。
(1)核心依赖坐标分析。
- 使用SpringMVC技术需要导入Servlet坐标、SpringMVC坐标。
(2)控制器类及其所使用注解分析。
- 创建SpringMVC控制器类。(相当于Servlet功能)
- 又因为使用Spring技术,当然需要把控制器类变成bean。在SpringMVC中不能简单的使用注解@Component,其开发表现层的bean要使用注解@Controller。
- 定义任意一个方法,返回值设置成想要的类型。
- 使用注解@RequestMapping("/xxx"):设置当前控制器类操作方法访问请求路径名称。
- 最后方法上使用注解@ResponseBody。注意:@ResponseBody是Spring框架中用于注解控制器方法的一个注解。主要用于将控制器方法的返回值直接作为 HTTP响应体返回给客户端。
- 简单说:若方法上使用注解@ResponseBody,如果返回值是一个对象,Spring会将其序列化为 JSON 或 XML。如果返回值是字符串,Spring会直接将其作为响应体内容返回。
(3)SpringMVC配置类及所使用注解分析。
- 终究来说,SpringMVC入门程序还是一个Spring程序。
- 作为配置类——使用最基本注解@Configuration。
- 其次对应bean的扫描(扫描对应控制器类bean)——注解@ComponentScan("xxx")。
(4)Tomcat启动时加载SpringMVC配置。(Web容器初始化配置类)
- SpringMVC中提供了一个专用开发Web容器的配置类(AbstractDispatcherServletInitializer)。AbstractDispatcherServletInitializer类是SpringMVC提供的快速初始化Web3.0容器的抽象类。
- 所以需要自己定义一个类然后去继承这个类即可。因为它是抽象类,所以需要实现抽象类的几个方法。
- 第一个方法createServletApplicationContext():加载SpringMVC配置类。
- 作用总结:创建Servlet容器时,加载SpringMVC对应的bean并放入
WebApplicationcontext对象范围中,而WebApplicationContext的作用范围为ServletContext范围,即整个Web容器范围。
- 第二个方法getServletMappings():向Tomcat容器说明:发起的请求哪些交给SpringMVC去处理。这里配置一个拦截所有请求("/")即可,这样Tomcat接收的所有请求都会交给自动SpringMVC去处理。
- 作用总结:设定SpringMVC对应的请求映射路径。设置为"/"表示拦截所有请求,任意请求都将转入到SpringMVC进行处理。
- 第三个方法createRootApplicationContext():入门案例中暂时不需要使用,该方法的作用在关于bean的加载控制时,加载Spring配置类时使用的。
- 作用总结:如果创建Servlet容器时需要加载非SpringMVC对应的bean时,使用当前方法进行。
二、SpringMVC入门案例。(实操)
(1)快速构建新Web工程。
<1>使用Maven Archetype(xxx-webapp)快速构建Web项目。
<2>创建好后将pom文件中idea自生成无用的部分删除。
<3>手动添加源码目录:java。
- 打开项目结构。
- 选择模块。在main目录下新建目录。
- 弄完下面操作后即可。
(2)pom文件中导入核心依赖坐标。
- Servlet。
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency>
- SpringMVC。
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.3.18</version> </dependency>
- 刷新Maven,查看依赖项。
(3)控制器类并定义可访问的操作方法。(xxxController)
package com.hyl.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; /** * 控制器类 */ //1.使用注解@Controller定义bean @Controller public class ExampleController { /** * 随机写一个处理请求的方法 * @return 字符串(模仿json数据) */ //设置当前方法操作的访问路径 @RequestMapping("/save") //设置当前操作的返回值类型(如何响应给客户端) @ResponseBody public String save(){ //方便测试查看运行结果。 System.out.println("exampleController save ..."); return "{'module':'springMVC'}"; } }
(4)SpringMVC配置类。(加载控制器类bean)
package com.hyl.config; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; //创建SpringMVC的配置类,加载controller包对应bean @Configuration @ComponentScan("com.hyl.controller") public class SpringMvcConfig { }
(5)Tomcat(Web)容器初始化启动配置类。(加载SpringMVC配置类)
<1>AnnotationConfigWebApplicationContext。(Web环境专用)
- 普通项目注解开发获取容器:AnnotationConfigApplicationContext类。
- Web项目注解开发获取容器:AnnotationConfigWebApplicationContext类。
<2>使用register(xxxConfig.class)注册SpringMVC配置类。
<3>设置所有请求归SpringMVC处理。
- Tomcat(Web)容器启动配置类所有代码
package com.hyl.config; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.AnnotationConfigWebApplicationContext; import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer; //定义一个Servlet容器启动的配置类,在里面加载SpringMVC的配置 public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer { /** *加载SpringMVC配置类 * @return */ @Override protected WebApplicationContext createServletApplicationContext() { AnnotationConfigWebApplicationContext webApplicationContext = new AnnotationConfigWebApplicationContext(); webApplicationContext.register(SpringMvcConfig.class); return webApplicationContext; } /** * 设置哪些请求归属SpringMVC处理 * @return */ @Override protected String[] getServletMappings() { return new String[]{"/"}; } /** *加载Spring配置类(加载Spring容器) *这里案例还未使用到.. * @return */ @Override protected WebApplicationContext createRootApplicationContext() { return null; } }
(6)配置好项目的本地Tomcat。
(7)启动Tomcat服务器。浏览器访问指定url。
- 访问:localhsot:8080/save。请求成功!
- 控制台输出打印。测试成功!
三、SpringMVC入门程序开发总结(1+N模式)。
SpringMVC的后期开发模式不会像初始化项目这么繁琐。整体的开发模式属于"1+N"。
(1)一次性工作。(初始化工作:相对繁琐)
创建工程,设置Tomcat服务器,加载工程。
导入所需核心依赖坐标。
创建Web容器启动类,加载SpringMVC配置,并设置SpringMVC请求拦截路径。
SpringMVC核心配置类。(设置配置类,扫描controller包,加载controller控制器bean)
(2)多次工作。(控制器类)
- 当然。实际情况不只案例中一个控制器类。实际不同的业务对应不同的控制器类。
- 定义处理请求的控制器类。(多次工作)
- 定义处理请求的控制器方法,并配置映射路径(@RequestMapping)与返回JSON数据(@ResponseBody)。(多次工作)
- 简单演示:控制器类中添加另外一个操作方法delete()。稍加修改即可。
//设置当前方法操作的访问路径 @RequestMapping("/delete") //设置当前操作的返回值类型(如何响应给客户端) @ResponseBody public String delete(){ //方便测试查看运行结果。 System.out.println("exampleController delete ..."); return "{'module':'springMVC delete ...'}"; }
- 访问:localhsot:8080/delete。请求成功!