SpringMVC的基本使用

一、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对象

相关推荐
一勺-_-3 分钟前
全栈:怎么把IDEA和Maven集成一下?
java·maven·intellij-idea
燕山石头9 分钟前
解决 IntelliJ IDEA Build时 Lombok 不生效问题
java·前端·intellij-idea
Asu520217 分钟前
链表反转中最常用的方法————三指针法
java·数据结构·学习·链表
cici158741 小时前
linux中HADOOP_HOME和JAVA_HOME删除后依然指向旧目录
java·linux·hadoop
孫治AllenSun1 小时前
【Mysql】联合索引生效分析案例
java·数据库·mysql
我命由我123451 小时前
Spring Boot 项目问题:Web server failed to start. Port 5566 was already in use.
java·前端·jvm·spring boot·后端·spring·java-ee
书唐瑞1 小时前
Percona pt-archiver 出现数据不对等
java·服务器·数据库
CHEN5_021 小时前
【Java面试题】缓存穿透
java·开发语言·数据库·redis·缓存
XMYX-01 小时前
Java HTTPS 请求失败排查与证书导入全过程
java·https
北_鱼1 小时前
设计模式1:创建型模式
java·设计模式·软件工程·代码规范·设计规范