SpringMVC(看这一篇就够了)

分类: 365Bet官方 时间: 2025-10-17 13:07:36 作者: admin 阅读: 4615

目录:

SpringMVC

什么是MVC模型

SpringMVC

案例

SpringMVC执行流程

SpringMVC封装参数

简单数据类型

简单对象

关联对象

简单数据类型集合

Map集合

参数类型转换器

编码过滤器

Servlet原生对象

SpringMVC处理响应

视图解析器

返回值为void

返回值为ModelAndView

向request域设置数据

向session域设置数据

向context域设置数据

请求转发&重定向

SpringMVC注解

@Controlle r和 @RequestMapping

@RequestParam

@RequestHeader、@CookieValue

@SessionAttributes

@ModelAttribute

RESTful风格支持

@PathVariable

@PostMapping、@GetMapping、@PutMapping、@DeleteMapping

HiddenHttpMethodFilter

@ResponseBody

@RestController

静态资源映射

@RequestBody

SpringMVC上传

原生方式上传

SpringMVC方式上传

上传多文件

异步上传

跨服务器上传

查询可下载的文件

下载文件

SpringMVC异常处理

单个控制器异常处理

全局异常处理

自定义异常处理器

SpringMVC拦截器

拦截器的使用

全局拦截器

拦截器链与执行顺序

过滤敏感词

SpringMVC跨域请求

同源策略

跨域请求

接收跨域请求

SpringMVC

什么是MVC模型

MVC全称Model View Controller,是一种设计创建Web应用程序的模式。这三个单词分别代表Web应用程序的三个部分:

Model(模型):指数据模型。用于存储数据以及处理用户请求的业务逻辑。在Web应用中,JavaBean对象,业务模型等都属于Model。

View(视图):用于展示模型中的数据的,一般为jsp或html文件。

Controller(控制器):是应用程序中处理用户交互的部分。接受视图提出的请求,将数据交给模型处理,并将处理后的结果交给视图显示。

SpringMVC

SpringMVC是一个基于MVC模式的轻量级Web框架,是Spring框架的一个模块,和Spring可以直接整合使用,我们使用的版本是Spring6,所以JDK需要17以上。SpringMVC代替了Servlet技术,它通过一套注解,让一个简单的Java类成为处理请求的控制器,而无须实现任何接口。

案例

使用maven创建web项目,补齐包结构。

引入相关依赖

org.springframework spring-context 6.0.11 org.springframework spring-web 6.0.11 org.springframework spring-webmvc 6.0.11 jakarta.servlet jakarta.servlet-api 6.0.0 provided jakarta.servlet.jsp jakarta.servlet.jsp-api 3.0.0 provided

在web.xml中配置前端控制器DispatcherServlet。

Archetype Created Web Application dispatcherServlet org.springframework.web.servlet.DispatcherServlet contextConfigLocation classpath:springmvc.xml 1 dispatcherServlet /

4.编写SpringMVC核心配置文件springmvc.xml,该文件和Spring配置文件写法一样。

xmlns:mvc="http://www.springframework.org/schema/mvc"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="

http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd

http://www.springframework.org/schema/mvc

http://www.springframework.org/schema/mvc/spring-mvc.xsd

http://www.springframework.org/schema/context

http://www.springframework.org/schema/context/spring-context.xsd">

5.编写控制器

@Controller

public class MyController1 {

// 该方法的访问路径是/c1/hello1

@RequestMapping("/c1/hello1")

public void helloMVC(){

System.out.println("hello SpringMVC!");

}

}

配置tomcat10启动项目,访问 http://localhost:8080/c1/hello1

SpringMVC执行流程

SpringMVC的组件

DispatcherServlet:前端控制器,接受所有请求,调用其他组件。

HandlerMapping:处理器映射器,根据配置找到方法的执行链。

HandlerAdapter:处理器适配器,根据方法类型找到对应的处理器。

ViewResolver:视图解析器,找到指定视图。

组件的工作流程

客户端将请求发送给前端控制器。

前端控制器将请求发送给处理器映射器,处理器映射器根据路径找到方法的执行链,返回给前端控制器。

前端控制器将方法的执行链发送给处理器适配器,处理器适配器根据方法类型找到对应的处理器。

处理器执行方法,将结果返回给前端控制器。

前端控制器将结果发送给视图解析器,视图解析器找到视图文件位置。

视图渲染数据并将结果显示到客户端。

SpringMVC封装参数

简单数据类型

在Servlet中我们通过request.getParameter(name)获取请求参数。该方式存在两个问题:

请求参数较多时会出现代码冗余。

与容器紧耦合。

而SpringMVC支持参数注入的方式用于获取请求数据,即将请求参数直接封装到方法的参数当中。用法如下:

编写控制器方法

// 封装为简单数据类型类型参数 @RequestMapping(“/c1/param1”) public void simpleParam(String username,int age){

System.out.println(username); System.out.println(age); }

访问该方法时,请求参数名和方法参数名相同,即可完成自动封装。

http://localhost:8080/c1/param1username=bz&age=10

简单对象

SpringMVC支持将参数直接封装为对象,写法如下:

编写实体类

public class Student {

private int id; private String name; private String sex; // 省略getter/setter/tostring }

编写控制器方法

// 封装为简单对象类型参数 @RequestMapping(“/c1/param2”) public void objParam(Student student){

System.out.println(student); }

访问该方法时,请求参数名和对象参数的属性名相同,即可完成自动封装。

http://localhost:8080/c1/param2id=1&name=bz&sex=female

关联对象

SpringMVC还可以将请求参数封装为关联对象,即对象的属性也是一个对象。写法如下:

编写实体类

public class Student {

private int id; private String name; private String sex; private Address address; // 地址对象 // 省略getter/setter/tostring }

public class Address {

private String info; //地址信息 private String postcode; //邮编 // 省略getter/setter/tostring }

编写控制器方法

// 获取关联对象类型参数 @RequestMapping(“/c1/param3”) public void objParam2(Student student){

System.out.println(student); }

访问该方法时,请求参数名和方法参数的属性名相同,即可完成自动封装。

http://localhost:8080/c1/param3id=1&name=bz&sex=female&address.info=beijing&address.postcode=030000

我们也可以使用表单发送带有参数的请求:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>

表单提交

id:

姓名:

性别:

住址:

邮编:

简单数据类型集合

1.编写控制器方法

// 封装为简单数据类型集合,参数前必须添加@RequestParam注解

@RequestMapping("/c1/param4")

public void listParam(@RequestParam List users){

System.out.println(users);

}

该方式也可以封装为简单数据类型数组:

@RequestMapping(“/c1/param5”) public void listParam2(@RequestParam String[] users){

System.out.println(users[0]); System.out.println(users[1]); }

请求的参数写法

http://localhost:8080/c1/param4users=bj&users=sxt

Map集合

同样,SpringMVC要想把参数封装到Map集合中,需要封装到有Map属性的对象中。

编写实体类

public class AddressMap {

private Map address; // 省略getter/setter/tostring }

编写控制器方法

// 对象中包含map属性 @RequestMapping(“/c1/param7”) public void mapParam3(AddressMap addressMap){

System.out.println(addressMap.getAddress()); }

请求的参数写法

参数的写法为:map属性名[键].值中的属性,例如:address[one].info

请求的路径如下:

http://localhost:8080/c1/param7address[one].info=bj&address[one].postcode=100010&address[two].info=sh&address[two].

相关文章

365ba

娍的拼音、娍怎么读?女字旁加成(女成)念什么?

365ba

电子产品检测完整指南

365ba

变色龙的饮食【翻译】