最全面的SpringMVC教程(四)——Controller 与 RestFul

article/2025/8/23 23:44:45

前言

在这里插入图片描述

本文为 【SpringMVC教程】Controller 与 RestFul 相关内容介绍,具体将对控制器Controller实现Controller接口使用注解@ControllerRequestMappingRestFul 风格(包括:Rest架构的主要原则什么是Restful数据过滤RequestMapping中指定请求方法Ajax方式发送请求)等进行详尽介绍~

📌博主主页:小新要变强 的主页
👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~
👉算法刷题路线可参考:算法刷题路线总结与相关资料分享,内含最详尽的算法刷题路线指南及相关资料分享~
👉Java微服务开源项目可参考:企业级Java微服务开源项目(开源框架,用于学习、毕设、公司项目、私活等,减少开发工作,让您只关注业务!)

↩️本文上接:最全面的SpringMVC教程(三)——跨域问题


目录

文章标题

  • 前言
  • 目录
  • 一、控制器Controller
  • 二、实现Controller接口
  • 三、使用注解@Controller
  • 四、RequestMapping
  • 五、RestFul 风格
    • 1️⃣Rest架构的主要原则
    • 2️⃣什么是Restful
    • 3️⃣数据过滤
    • 4️⃣RequestMapping中指定请求方法
    • 5️⃣Ajax方式发送请求
  • 后记

在这里插入图片描述

一、控制器Controller

  • 控制器复杂提供访问应用程序的行为,通常通过接口定义或注解定义两种方法实现
  • 控制器负责解析用户的请求并将其转换为一个模型
  • 在Spring MVC中一个控制器类可以包含多个方法
  • 在Spring MVC中,对于Controller的配置方式有很多种

二、实现Controller接口

Controller是一个接口,在org.springframework.web.servlet.mvc包下,接口中只有一个方法:

//实现该接口的类获得控制器功能
public interface Controller {//处理请求且返回一个模型与视图对象ModelAndView handleRequest(HttpServletRequest var1, HttpServletResponse var2) throws Exception;
}

测试:

🍀(1)新建一个Moudle:springmvc-controller ,mvc的配置文件只留下 视图解析器。

🍀(2)编写一个Controller类,ControllerTest1。

//定义控制器
//注意点:不要导错包,实现Controller接口,重写方法;
public class ControllerTest1 implements Controller {public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {//返回一个模型视图对象ModelAndView mv = new ModelAndView();mv.addObject("msg","Test1Controller");mv.setViewName("test");return mv;}
}

🍀(3)到Spring配置文件中注册请求的bean;name对应请求路径;class对应处理请求的类

<bean name="/t1" class="com.kuang.controller.ControllerTest1"/>

🍀(4)编写前端test.jsp,要在WEB-INF/jsp目录下编写,对应我们的视图解析器

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>Kuangshen</title>
</head>
<body>${msg}
</body>
</html>

🍀(5)配置Tomcat运行测试,没有项目发布名配置的就是一个 / ,所以请求不用加项目名

在这里插入图片描述

说明:

  • 实现接口Controller定义控制器是较老的办法
  • 缺点是:一个控制器中只有一个方法,如果要多个方法则需要定义多个Controller;定义的方式比较麻烦。

三、使用注解@Controller

  • @Controller注解类型用于声明Spring类的实例是一个控制器(在讲IOC时还提到了另外3个注解);
  • Spring可以使用扫描机制来找到应用程序中所有基于注解的控制器类,为了保证Spring能找到你的控制器,需要在配置文件中声明组件扫描。
<!-- 自动扫描指定的包,下面所有注解类交给IOC容器管理 -->
<context:component-scan base-package="com.wang.controller"/>

增加一个ControllerTest2类,使用注解实现:

//@Controller注解的类会自动添加到Spring上下文中
@Controller
public class ControllerTest2{//映射访问路径@RequestMapping("/t2")public String index(Model model){//Spring MVC会自动实例化一个Model对象用于向视图中传值model.addAttribute("msg", "ControllerTest2");//返回视图位置return "test";}
}

运行tomcat测试:

在这里插入图片描述

可以发现,我们的两个请求都可以指向一个视图,但是页面结果的结果是不一样的,从这里可以看出视图是被复用的,而控制器与视图之间是弱偶合关系。

四、RequestMapping

@RequestMapping注解用于映射url到控制器类或一个特定的处理程序方法。可用于类或方法上。用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

为了测试结论更加准确,我们可以加上一个项目名进行测试。

🍀@RequestMapping只注解在方法上面。

@Controller
public class TestController {@RequestMapping("/h1")public String test(){return "test";}
}

访问路径: http://localhost:8080 / 项目名 / h1

🍀@RequestMapping同时注解在类与方法上

@Controller
@RequestMapping("/admin")
public class TestController {@RequestMapping("/h1")public String test(){return "test";}
}

访问路径: http://localhost:8080 / 项目名/ admin /h1 , 需要先指定类的路径再指定方法的路径。

五、RestFul 风格

Restful是一种风格,可以遵循,也可以不遵循,但是现在它已经变成主流。

1️⃣Rest架构的主要原则

  • 网络上的所有事物都被抽象为资源。
  • 每个资源都有一个唯一的资源标识符。
  • 同一个资源具有多种表现形式他可能是xml,也可能是json等。
  • 对资源的各种操作不会改变资源标识符。
  • 所有的操作都是无状态的。
  • 符合REST原则的架构方式即可称为RestFul。

2️⃣什么是Restful

Restful web service是一种常见的rest的应用,是遵守了rest风格的web服务,rest式的web服务是一种ROA(The Resource-Oriented Architecture)(面向资源的架构).

在Restful风格中,我们将互联网的资源抽象成资源,将获取资源的方式定义为方法,从此请求再也不止get和post了:

客户端请求原来风格URL地址RESTful风格URL地址
查询所有用户/user/findAllGET /user
查询编号为1的用户/user/findById?id=1GET /user/1
新增一个用户/user/savePOST /user
修改编号为1的用户/user/updatePUT /user/1
删除编号为1的用户/user/delete?id=1DELETE /user/1

Spring MVC 对 RESTful应用提供了以下支持:

  • 利用@RequestMapping 指定要处理请求的URI模板和HTTP请求的动作类型
  • 利用@PathVariable将URI请求模板中的变量映射到处理方法参数上
  • 利用Ajax,在客户端发出PUT、DELETE动作的请求

3️⃣数据过滤

我们想获取所有用户,使用如下url即可/user。但是真是场景下,我们可能需要需要一些条件进行过滤:

例如:我们需要查询名字叫张三的前10条数据,使用以下场景即可:

/user?name=jerry&pageSize=10&page=1

查询的url不变,变的是条件,我们只需要同伙url获取对应的参数就能实现复杂的多条件查询。

4️⃣RequestMapping中指定请求方法

@RequestMapping(value = "/{id}", method = RequestMethod.GET)
@RequestMapping(value = "/add", method = RequestMethod.POST)
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)   
@RequestMapping(value = "/{id}", method = RequestMethod.PUT)

当然还有更好用的:

@GetMapping("/user/{id}")
@PostMapping("/user")
@DeleteMapping("/user/{id}")
@PutMapping("/user/{id}")

5️⃣Ajax方式发送请求

可以采用Ajax方式发送PUT和DELETE请求。

我们可以使用当下比较流行的axios组件测试:

<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>const instance = axios.create({baseURL: 'http://127.0.0.1:8088/app/'});// 为给定 ID 的 user 创建请求instance.get('goods').then(function (response) {console.log(response);}).catch(function (error) {console.log(error);});instance.get('goods/1').then(function (response) {console.log(response);}).catch(function (error) {console.log(error);});instance.post('goods', {name: '洗发露',price: 25454}).then(function (response) {console.log(response);}).catch(function (error) {console.log(error);});instance.put('goods', {name: '洗发露',price: 25454}).then(function (response) {console.log(response);}).catch(function (error) {console.log(error);});instance.delete('goods/1').then(function (response) {console.log(response);}).catch(function (error) {console.log(error);});</script> 

使用jquery同样可以发送如下请求:

$.ajax( {type : "GET",url : "http://localhost:8080/springmvc/user/rest/1",dataType : "json",success : function(data) {console.log("get请求!---------------------")console.log(data)}
});$.ajax( {type : "DELETE",url : "http://localhost:8080/springmvc/user/rest/1",dataType : "json",success : function(data) {console.log("delete请求!---------------------")console.log(data)}
});$.ajax( {type : "put",url : "http://localhost:8080/springmvc/user/rest/1",dataType : "json",data: {id:12,username:"楠哥",password:"123"},success : function(data) {console.log("get请求!---------------------")console.log(data)}
});$.ajax( {type : "post",url : "http://localhost:8080/springmvc/user/rest",dataType : "json",data: {id:12,username:"楠哥",password:"123"},success : function(data) {console.log("get请求!---------------------")console.log(data)}
});

后记

在这里插入图片描述

👉Java全栈学习路线可参考:【Java全栈学习路线】最全的Java学习路线及知识清单,Java自学方向指引,内含最全Java全栈学习技术清单~
👉算法刷题路线可参考:算法刷题路线总结与相关资料分享,内含最详尽的算法刷题路线指南及相关资料分享~


http://chatgpt.dhexx.cn/article/FeWF7NRT.shtml

相关文章

SpringMVC教程(一):环境搭建

环境&#xff1a;eclipsetomcat8.5 第一步&#xff1a;jar准备&#xff08;基础包&#xff09;&#xff1a; commons-logging-1.1.1.jar jstl-1.2.jar spring-aop-4.0.4.RELEASE.jar spring-aspects-4.2.6.RELEASE.jar spring-beans-4.0.4.RELEASE.jar spring-context-4.0.4.RE…

myeclipse配置springmvc教程

之前一直是使用Eclipse创建Web项目&#xff0c;用IDEA和MyEclipse的创建SpringMVC项目的时候时不时会遇到一些问题&#xff0c;这里把这个过程记录一下&#xff0c;希望能帮助到那些有需要的朋友。我是用的是MyEclipse2017 CI 3&#xff0c;相近版本应该都差不多。至于其他版本…

SpringMVC教程下篇

SpringMVC教程下篇 内容包括&#xff1a; 绑定数组&#xff1a; 将表单数据绑定到list&#xff1a; RequestMapping注解的三种用法&#xff1a; Controller方法返回值&#xff1a; 乱码问题总结 异常处理&#xff1a; 照片上传&#xff1a; RESTFUL支持&#xff…

最全面的SpringMVC教程(五)——文件上传与下载

前言 本文为 【SpringMVC教程】文件上传与下载 相关知识&#xff0c;具体将对使用MultipartResolver处理文件上传的步骤&#xff0c;两种文件下载方式&#xff08;直接向response的输出流中写入对应的文件流、使用 ResponseEntity<byte[]>来向前端返回文件&#xff09;等…

最全面的SpringMVC教程(三)——跨域问题

前言 本文为 【SpringMVC教程】跨域问题 相关内容介绍。当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同时&#xff0c;就会产生跨域。那么究竟什么是跨域&#xff0c;跨域问题该如何解决&#xff0c;本文具体将对同源策略&#xff0c;什么是跨域&#xff0…

最全面的SpringMVC教程(一)——SpringMVC简介

前言 本文为SpringMVC相关教程&#xff0c;下边将对SpringMVC进行简单介绍&#xff0c;具体包含&#xff1a;对MVC架构的回顾&#xff0c;什么是SpringMVC&#xff0c;SpringMVC编程示例&#xff08;包含配置版示例、注解版示例&#xff09;&#xff0c;初识SpringMVC&#xff…

SpringMVC教程来喽!

目录 SpringMVC简介SpringMVC的搭建 SpringMVC简介 这里对SpringMVC进行一个简单介绍 springmvc是spring框架的一个模块&#xff0c;springmvc和spring无需通过中间整合层进行整合。springmvc是一个基于mvc的web框架。springmvc 表现层&#xff1a;方便前后端数据的传输Sprin…

搭建配置SpringMVC教程

1新建工程&#xff0c;在maven工程中选择create from archetype,选择webapp&#xff0c;注意有很数个webapp&#xff0c;要选择前缀有maven的 2.在pom.xml添加依赖 <dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc<…

SpringMVC教程(二)

什么是SpringMVC 概述 Spring MVC是Spring Framework的一部分&#xff0c;是基于Java实现MVC的轻量级Web框架。 查看官方文档&#xff1a;https://docs.spring.io/spring/docs/5.2.0.RELEASE/spring-framework-reference/web.html#spring-web 我们为什么要学习SpringMVC呢? …

最全面的SpringMVC教程(六)——WebSocket

前言 本文为 【SpringMVC教程】WebSocket 相关知识介绍&#xff0c;具体将对WebSocket进行简介&#xff0c;并通过实战案例对WebSocket的使用进行详尽介绍~ &#x1f4cc;博主主页&#xff1a;小新要变强 的主页 &#x1f449;Java全栈学习路线可参考&#xff1a;【Java全栈学…

SpringMVC教程(三)

SpringMVC&#xff1a;Hello,SpringMVC HelloSpringMVC 配置版 新建一个Moudle &#xff0c; 添加web的支持&#xff01;确定导入了SpringMVC 的依赖&#xff01; 配置web.xml &#xff0c; 注册DispatcherServlet <?xml version"1.0" encoding"UTF-8&quo…

史上最全最细的SpringMVC教程

SpringMVC是强大的Web开发框架&#xff0c;基于Spring。 课程从基础开始逐步讲解SpringMVC框架Web应用的相关技术点。涵盖了SpringMVC基础内容以及与Spring框架集成(如IoC容器、AOP等)等高级内容。 学习该课程后可以让我们能非常简单的设计出干净的Web层和薄薄的Web层。掌握强…

黑马程序员--SpringMVC详细教程

一、SpringMVC概述 SpringMVC 是一种基于 Java 的实现 MVC 设计模型的请求驱动类型的轻量级 Web 框架&#xff0c;属于 SpringFrameWork 的后续产品&#xff0c;已经融合在 Spring Web Flow 中。 SpringMVC 已经成为目前最主流的MVC框架之一&#xff0c;并且随着Spring3.0 的发…

史上最全的SpringMVC教程,终于整理出来了

1. 为啥要学 SpringMVC&#xff1f; 1.1 SpringMVC 简介 在学习 SpringMVC 之前我们先看看在使用 Servlet 的时候我们是如何处理用户请求的&#xff1a; 配置web.xml <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xml…

史上最全面最易懂的,Spring框架学习教程

Spring通过PlatformTransactionManager平台事务管理器接口对事务的管理进行高度抽象&#xff0c;但是该接口下具体的实现是由各个平台自己实现&#xff0c;Spring并不直接管理事务&#xff0c;而是提供了多种事务管理器&#xff0c;也就是对各个平台的事务管理进行封装&#xf…

Spring 入门教程

Spring 入门教程 1、参考资料 尚硅谷-Spring5框架最新版教程&#xff08;idea版&#xff09;雷丰阳spring、springmvc、mybatis、spring一站式学习 项目地址&#xff1a;Oneby / spring-learn 2、Spring 概述 2.1、Spring 框架概述 Spring 是轻量级的开源的 JavaEE 框架 Sp…

spring框架教程

Spring框架 一、spring简介 简介&#xff1a;spring框架是一个轻量级的控制反转和面向切面的容器框架&#xff0c;用来解决项目开发中的复杂度问题–解耦 轻量级&#xff1a;体积小&#xff0c;对代码没有侵入性&#xff08;代码侵入性&#xff1a;指的是业务代码中不会调用sp…

一文学会Spring,Spring最简单的入门教程(万字好文)

1.Spring概述 1.1 Spring框架是什么 ​ Spring是与2003年兴起的一个轻量级的Java开发框架&#xff0c;它是为了解决企业应用开发的复杂性而创建的。Spring的核心是控制反转(IOC)和面向切面编程(AOP)。Spring是可以在Java SE/EE中使用的轻量级开源框架。 ​ Spring的主要作用…

lcx 内网转发

把放置到已经控制的内网主机 执行 内网主机输入命令lcx.exe -slave 外网ip 外网端口 内网ip 内网端口lcx.exe -slave 30.1.85.55 2222 127.0.0.1 3389 外网主机输入命令lcx.exe -listen 2222 3388 打开 mstsc ip&#xff1a;3388

lcx使用

lcx使用 win7 192.168.5.101 win 10 192.168.0.31 kali 192.168.5.102 lcx 本机: lcx -listen 2222 3333 2222为转发端口&#xff0c;3333为本机任意未被占用的端口 肉鸡&#xff1a;lcx -slave 2.2.2.2 2222 127.0.0.1 3389 2.2.2.2 为本机IP,2222为转发端口&#xff0c;…