欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 资讯 > 我的Java-Web进阶--SpringMVC

我的Java-Web进阶--SpringMVC

2025/1/7 19:38:57 来源:https://blog.csdn.net/jshgz8/article/details/144871169  浏览:    关键词:我的Java-Web进阶--SpringMVC

1.三层架构与MVC模式

三层架构

MVC模式

 

 

 2.SpringMVC执行流程

 

3.SpringMVC的基本使用方法

1. 配置

1.1 Maven依赖

首先,在pom.xml文件中添加Spring MVC的依赖:

<dependencies><!-- Spring MVC --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.10</version></dependency><!-- Servlet API, JSP, and other web dependencies --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>javax.servlet.jsp-api</artifactId><version>2.3.3</version><scope>provided</scope></dependency><!-- Other dependencies like logging, testing, etc. -->
</dependencies>
1.2 配置DispatcherServlet

web.xml中配置DispatcherServlet,它是Spring MVC的核心组件,用于接收所有的HTTP请求并分发给相应的控制器处理。

<servlet><servlet-name>dispatcher</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>/WEB-INF/spring-mvc-config.xml</param-value></init-param><load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping><servlet-name>dispatcher</servlet-name><url-pattern>/</url-pattern>
</servlet-mapping>
1.3 配置Spring MVC

创建spring-mvc-config.xml文件来配置Spring MVC的组件扫描、视图解析器等。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"><!-- 扫描控制器所在的包 --><context:component-scan base-package="com.example.controller" /><!-- 视图解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/views/" /><property name="suffix" value=".jsp" /></bean></beans>

2. 创建控制器

创建一个简单的控制器类,使用@Controller注解,并定义一个处理GET请求的方法,返回一个逻辑视图名称。

package com.example.controller;import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;@Controller
public class HelloController {@GetMapping("/hello")public String sayHello(Model model) {model.addAttribute("message", "Hello, Spring MVC!");return "hello"; // 返回逻辑视图名,对应到/WEB-INF/views/hello.jsp}
}

3. 创建视图

/WEB-INF/views/目录下创建一个名为hello.jsp的JSP页面作为视图,用来展示控制器传递过来的数据。

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><title>Hello Page</title>
</head>
<body><h1>${message}</h1>
</body>
</html>

4. 运行应用

启动你的Web容器(例如Tomcat),访问http://localhost:8080/your-app-context/hello,你应该能看到显示“Hello, Spring MVC!”的消息。

3.SpringMVC请求参数获取

如果不添加@ResponseBody,则会自动把回传的字符串添加前后缀,变成请求jsp

请求参数获取

在Spring MVC中,有多种方式可以获取请求参数:

  1. 通过方法参数直接绑定:Spring MVC支持将请求参数直接绑定到控制器方法的参数上。对于GET和POST请求中的表单数据,可以使用简单类型的参数或命令对象来接收。

  2. 使用@RequestParam注解:当需要指定请求参数的名字,或者参数是可选的时候,可以使用@RequestParam注解。它可以用来获取查询字符串参数或表单提交的数据。

  3. 使用@PathVariable注解:当URL模式中包含占位符时,可以使用@PathVariable注解来提取URL路径中的变量。

  4. 使用@RequestBody注解:如果请求体是以JSON或XML等格式发送的,可以使用@RequestBody注解将请求体的内容转换成Java对象。

  5. 使用@MatrixVariable注解:用于从URI路径段中获取矩阵变量(matrix variables),这是一种较少用的方式。

数据回传

为了回传数据,我们可以直接返回一个简单的类型(如String、Integer等),或者返回一个复杂对象(如POJO)。当我们想要将Java对象序列化为JSON或XML并将其作为响应体的一部分发送给客户端时,我们应该使用@ResponseBody注解。

下面是一个详细的示例,展示了如何使用上述概念来获取请求参数,并使用@ResponseBody来返回数据:

package com.example.controller;import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;@RestController // 相当于 @Controller + @ResponseBody
@RequestMapping("/api")
public class ExampleController {// 通过方法参数直接绑定@GetMapping("/greet/{name}")public String greet(@PathVariable String name) {return "Hello, " + name + "!";}// 使用@RequestParam获取查询参数@GetMapping("/search")public String search(@RequestParam("query") String query) {return "You searched for: " + query;}// 使用@RequestBody处理POST请求体@PostMapping("/user")public User createUser(@RequestBody User user) {// 处理用户创建逻辑return user; // 返回创建的用户对象}// 使用ResponseEntity封装响应@PutMapping("/user/{id}")public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User user) {// 假设这里执行了更新操作user.setId(id);return new ResponseEntity<>(user, HttpStatus.OK);}// 定义一个简单的User类static class User {private Long id;private String name;// Getters and Setters (省略)// 必须提供无参构造函数以供Jackson序列化/反序列化使用public User() {}// 可选的有参构造函数public User(Long id, String name) {this.id = id;this.name = name;}// Getter and Setter methodspublic Long getId() {return id;}public void setId(Long id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}}
}

在这个例子中:

  • greet方法使用@PathVariable来获取URL中的name参数,并直接返回一个字符串。
  • search方法使用@RequestParam来获取查询参数query,并返回搜索结果。
  • createUser方法使用@RequestBody来接受一个JSON格式的用户对象,并返回该对象。
  • updateUser方法不仅使用了@PathVariable@RequestBody,还使用了ResponseEntity来封装HTTP响应,包括状态码和响应体。

4.SpringMVC高级用法

拦截器

实现拦截类 

配置拦截器 

 异常处理器

文件上传

 

静态资源过滤

 

5.完成流程

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com