一、SprinngMVC开发环境搭载
1、配置依赖包
XML
<!--SpringWebMVC依赖包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>6.2.8</version>
</dependency>
<!-- jakarta.servlet-api -->
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>6.1.0</version>
<scope>provided</scope>
</dependency>
<!--
jackson-databind依赖包,
jackson在进行JSON数据转换时进行数据绑定
-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.19.1</version>
2、创建配置类,包括SpringMVC的初始化器WebMVCAppInitializer、Spring容器配置类(根容器配置类)AppConfig、WebMVC配置类WebMvcConfig
SpringMVC的初始化器
当tomcat启动时会自动初始化该类的对象,启动SpringMVC环境
(当启动tomcat时,自动创建该类对象并启动SpringMVC)
SpringMVC的初始化器需要继承AbstractAnnotationConfigDispatcherServletInitializer类
java
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class WebMVCAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
/**
* 初始化Spring的根容器
* 在根容器中主要用于配置service层和持久层相关配置或Spring的基础配置
* @return
*/
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{AppConfig.class};
}
/**
* 初始化SpringWebMvc容器
* 配置SpringMVC的相关配置
* @return
*/
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{WebMvcConfig.class};
}
/**
* 用于配置SpringMVC的访问入口路径
* 实际上是配置SpringMVC的核心控制器DispatcherServlet的访问路径
* 映射路径配置一般使用以下两种路径:
* 1."/":拦截除jsp以外的所有请求,除了jsp页面其他请求都交给DispatcherServlet处理
* 2."/*":拦截所有请求
* (配置SpringMVC的映射路径的)
* (简单说,使用那些路径访问时会进入到SpringMVC进行处理)
* @return
*/
@Override
protected String[] getServletMappings() {
return new String[]{"/*"};
}
}
Spring容器配置类(根容器配置类)
在根容器中主要用于配置service层和持久层(mapper层)相关配置或Spring的基础配置
java
import org.springframework.context.annotation.Configuration;
@Configuration //配置类注解,交给Spring管理的各个方法
public class AppConfig {
}
WebMVC配置类
该类需要使用WebMvcConfigurer接口
WebMvcConfigurer接口中对SpringMVC的相关配置进行了默认配置
该配置类中用于配置与WebMVC相关配置
java
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
@EnableWebMvc //启用SpringMVC的相关注解
@ComponentScan("com.jiazhong.controllers") //组件扫描器注解,自动扫描该包中的所有类
public class WebMvcConfig implements WebMvcConfigurer {
/**
* 放行静态资源
* @param configurer
*/
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
}
3、创建TestController控制类
java
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* 这就是一个控制器类
* @Controller表示控制器注解,将当前类交给Spring管理
* @RequestMapping:该注解为控制器设置访问路径
*/
@Controller
public class TestController {
@RequestMapping("/test1")
public String test1() {
System.out.println("TestController-->test1被执行....");
return "index.jsp";
}
@RequestMapping("/test2")
public String test2(){
System.out.println("TestController-->test2被执行....");
return "index.html";
}
}
4、index静态页面
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
首页-------index.html
</body>
</html>
javascript
<html>
<body>
<h2>Hello World!------index.jsp </h2>
</body>
</html>
在网页中输入localhost/test1,将输出index.jsp中的相关内容
在 网页中输入localhost/test2,将输出index.html中的相关内容
5、创建UserController控制类
1)调转方式
java
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller //控制器注解
@RequestMapping("/user")
public class UserController {
//在SpringMVC的控制器中,默认使用请求转发的方式进行跳转 <request.getRequestDispatcher().forward()>
@RequestMapping("/addUser")
public String addUser() {
System.out.println("UserController--->addUser");
return "/index.jsp";
}
}
输出结果:

2)ModelAndView(较少使用)
java
@RequestMapping("/queryUsers")
public ModelAndView queryUsers(){
System.out.println("UserController--->queryUsers");
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("/index.jsp");
return modelAndView;
}
输出结果:

3)"redirect:"
java
//如果要使用重定向进行转发,则在返回的字符串中加上"redirect:"前缀
@RequestMapping("/queryUserById")
public String queryUserById(){
System.out.println("UserController--->queryUserById");
return "redirect:/index.html";
}
输出结果:

二、SprinngMVC控制器转换方式
1、2内容不变
3、创建User类(须导入lombok依赖)
java
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor //所有参数构造函数
@NoArgsConstructor //无参构造函数
public class User {
private Integer userId;
private String username;
private String password;
}
1)在TestController控制类中做了一些调整,展示SprinngMVC控制器的相关操作test1
java
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @RequestMapping:该注解为控制器设置访问路径
* @RestController:该注解等于@Controller+@ResponseBody
*/
@RestController
@RequestMapping("/test")
public class TestController {
/**
* 返回字符串,将该字符串直接回传给界面
* @ResponseBody:将返回值以响应体的方式直接回传给请求(使用的是ajax访问方式)
* @return
*/
@RequestMapping("/test1")
public String test1() {
System.out.println("TestController-->test1被执行....");
return "index.jsp";
}
}
在网页中输入localhost/test/test1,不会输出index.jsp中的相关内容,而是直接输出"index.jsp"字符串,因为@ResponseBody注解使用ajax访问方式将返回值以响应体的方式直接回传给请求

2)继续进行TestController控制类的调整test2
java
/**
* 返回对象,SpringMVC自动将对象转换为JSON对象并响应给客户端
* @return
*/
@RequestMapping("/test2")
public User test2(){
System.out.println("TestController-->test2被执行....");
User user = new User(1,"admin","xiaomei");
return user;
}
在网页中输入localhost/test/test2,将输出JSON对象

3)继续进行TestController控制类的调整test3
java
@RequestMapping("/test3")
public List<String> test3(){
List<String> strList = new ArrayList<>();
strList.add("1");
strList.add("2");
strList.add("3");
strList.add("4");
return strList;
}
在网页中输入localhost/test/test3,将输出JSON对象
