Spring 全家桶之 Spring Web MVC (一)- MVC(三)

简介: Spring 全家桶之 Spring Web MVC (一)- MVC

@RequestMapping其他属性

bde6ebd38b6547979ca7dc0e7e42ecdd_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

method:限定请求方式,默认为空,也就是说任何请求方法都可以处理

在MappingController中增加方法

@RequestMapping(value = "/handle_post_req", method = RequestMethod.POST)
public String handlePostReq(){
    String method = Thread.currentThread().getStackTrace()[1].getMethodName();
    System.out.println(this.getClass().getSimpleName() + "类的" + method + "方法正在执行");
    return "success";
}
复制代码

表单形式发送POST请求,在index.jsp页面的body标签中增加form表达代码

<p>发送POST请求</p>
<form action="/mapping/handle_post_req" method="post">
  <button type="submit">发送POST请求</button>
</form>
复制代码

重新启动Tomcat,点击按钮发送POST请求,成功跳转至success.jsp页面

3f120e34111f47f9b69abd859db9fcfd_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

控制台输出

2d8f1888402d4df68810b80175061910_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

而在浏览器中输入http://localhost:8080/mapping/handle_post_req, 则会报错,说明请求不支持GET方式

1a851afc9ecc4344bb1029df4ab27b58_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

params:指定请求参数

  • params是一个数组
  • params支持简单的表达式,指出 “!”, “!=”
  • params指定请求中必须包含指定名的请求参数

在MappingController类中新增代码

@RequestMapping(value = "/handle_params", params = {"username"})
public String handleParams(){
    String method = Thread.currentThread().getStackTrace()[1].getMethodName();
    System.out.println(this.getClass().getSimpleName() + "类的" + method + "方法正在执行");
    return "success";
}
复制代码

请求不携带params指定的参数,报错404

3b7396dbc05f4a7281970f05894f8dd0_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

增加username参数,成功跳转至success页面

03133fcd0ea84ea983c4a543ff9e4ed5_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

!params表示请求中必须不带params参数,修改代码

@RequestMapping(value = "/handle_params", params = {"!username"})
public String handleParams(){
    return "success";
}
复制代码

重启tomcat,请求http://localhost:8080/mapping/handle_params?username=stark

a66bbf5c7744414a9714f34c7b16fb5e_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

规定参数值,params={"username=peter"},修改代码,重新启动Tomcat,再次输入http://localhost:8080/mapping/handle_params?username=stark

ca0fad5c3e624f78adbd667465efa18d_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

输入http://localhost:8080/mapping/handle_params?username=peter

029d913f658d4cf1944e28337e973723_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

也可以指定非指定值,如params={"username!=peter"},指定多个限制规则,必须同时满足,多个参数之间使用 "," 连接,URL地址多个参数之间使用 "&" 链接,如params={"username="stark",password,!gender}

744576dac36b4754b4e69ab012412ace_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

headers,规定请求头表达式与params一样,也是一个数组

HTTP请求头中User-Agent表示发送请求的浏览器,可以使用headers属性指定User-Agent的值

User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:88.0) Gecko/20100101 Firefox/88.0

User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/97.0.4692.71 Safari/537.36

增加代码

@RequestMapping(value = "/handle_headers",headers = {"User-Agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:88.0) Gecko/20100101 Firefox/88.0"})
public String handleHeaders(){
    return "success";
}
复制代码

重启Tomcat,谷歌浏览器中访问

b1e0ae9d4445486d9070c0c199dd705c_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

火狐浏览器中访问

17d99d81e0a4469caa0fa0af89ea049f_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

@RequestMapping的另外两个属性

  • consumes:指定接收内容的类型
  • produces:指定浏览器返回的内容类型

三、@RequestMapping的模糊匹配

  • ? : 支持匹配一个字符
  • * : 支持匹配任意字符
  • ** : 支持匹配多层路径

新建一个MatchController,测试@RequestMapping的模糊匹配,以及通配符的使用

@Controller
public class MatchController {
    @RequestMapping("/matc?")
    public String matchOne(){
        return "success";
    }
}
复制代码

“?”匹配一个字符,重启tomcat,输入http://localhost:8080/match

image.png



image.png

“?”可以表示任意一个字符,但是匹配超过1个字符会报错

image.png

“*” 可以匹配多个字符

@RequestMapping("/matc*")
public String matchMore(){
    return "success";
}
复制代码

匹配0个或多个字符

image.png

也可以匹配一层路径

@RequestMapping("/matc*/layer")
public String matchOneLayer(){
    return "success";
}
复制代码

image.png

”**“ 匹配0或者多层

@RequestMapping("/match/**/layers")
public String matchMoreLayers(){
    return "success";
}
复制代码

image.png

四、@PathVariable注解

通过@PathVariable注解可以将URL中占位符参数绑定到控制器处理方法的入参

新建一个PathVarController

@Controller
public class PathVarController {
    // 路径上可以有站位符,*也是占位符,但是不能获取位置上变量的值,{}可以获取变量的值
    // 方法参数中定义变量接收路径中的变量的值,并用@PathVariable指定路径变量的名称,默认参数中的变量名一致
    @RequestMapping("/user/{id}")
    public String userInfo(@PathVariable("id") String id){
        System.out.println("路径参数id的值为:" + id);
        return "success";
    }
}
复制代码

image.png

控制它打印出路径中变量的值

image.png

只能占一层路径,如果想要获取两层路径就要定义两个占位符

@RequestMapping("/user/{id}/{orderId}")
public String userInfoDetial(@PathVariable("id") String id, @PathVariable("orderId") String orderId){
    System.out.println("路径参数id的值为:" + id);
    System.out.println("路径参数orderId的值为:" + orderId);
    return "success";
}
复制代码

image.png

image.png

REST风格URL

REST:即Representational State Transfer,表现层状态转化,是一种软件架构, REST结构清晰,符合标准,易于理解,扩展方便

  • 资源(Resources):网络上的资源,如文本图片信息等,可以用一个URI(统一资源定位符)来指向,每种资源对应一个特定的URI,可以通过访问URI或者资源
  • 表现层(Representation):把资源具体呈现出来的形式,即表现层,如JSON格式,XML格式,TXT格式
  • 状态转化(State Transfer):每发出一个请求,就代表客户端和服务端的一次交互。HTTP协议是一种无状态的协议,所有的状态都保存在服务器端,客户端想要操作服务器,必须通过某种手段,让服务器端状态发生变化,这种转化建立在表现层之上。HTTP协议里有四种操作方式,PUT表示更新资源,GET表示获取资源,POST表示新增资源,DELETE表示删除资源


相关文章
|
2月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
48 4
|
2月前
|
JSON 前端开发 Java
SSM:SpringMVC
本文介绍了SpringMVC的依赖配置、请求参数处理、注解开发、JSON处理、拦截器、文件上传下载以及相关注意事项。首先,需要在`pom.xml`中添加必要的依赖,包括Servlet、JSTL、Spring Web MVC等。接着,在`web.xml`中配置DispatcherServlet,并设置Spring MVC的相关配置,如组件扫描、默认Servlet处理器等。然后,通过`@RequestMapping`等注解处理请求参数,使用`@ResponseBody`返回JSON数据。此外,还介绍了如何创建和配置拦截器、文件上传下载的功能,并强调了JSP文件的放置位置,避免404错误。
|
2月前
|
前端开发 Java 应用服务中间件
【Spring】Spring MVC的项目准备和连接建立
【Spring】Spring MVC的项目准备和连接建立
58 2
|
3月前
|
缓存 前端开发 Java
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
Soring Boot的起步依赖、启动流程、自动装配、常用的注解、Spring MVC的执行流程、对MVC的理解、RestFull风格、为什么service层要写接口、MyBatis的缓存机制、$和#有什么区别、resultType和resultMap区别、cookie和session的区别是什么?session的工作原理
【Java面试题汇总】Spring,SpringBoot,SpringMVC,Mybatis,JavaWeb篇(2023版)
|
2月前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
136 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
|
3月前
|
XML 缓存 前端开发
springMVC02,restful风格,请求转发和重定向
文章介绍了RESTful风格的基本概念和特点,并展示了如何使用SpringMVC实现RESTful风格的请求处理。同时,文章还讨论了SpringMVC中的请求转发和重定向的实现方式,并通过具体代码示例进行了说明。
springMVC02,restful风格,请求转发和重定向
|
3月前
|
前端开发 安全 Java
技术进阶:使用Spring MVC构建适应未来的响应式Web应用
【9月更文挑战第2天】随着移动设备的普及,响应式设计至关重要。Spring MVC作为强大的Java Web框架,助力开发者创建适应多屏的应用。本文推荐使用Thymeleaf整合视图,通过简洁的HTML代码提高前端灵活性;采用`@ResponseBody`与`Callable`实现异步处理,优化应用响应速度;运用`@ControllerAdvice`统一异常管理,保持代码整洁;借助Jackson简化JSON处理;利用Spring Security增强安全性;并强调测试的重要性。遵循这些实践,将大幅提升开发效率和应用质量。
66 7
|
3月前
|
前端开发 测试技术 开发者
MVC模式在现代Web开发中有哪些优势和局限性?
MVC模式在现代Web开发中有哪些优势和局限性?
|
4月前
|
开发者 前端开发 Java
架构模式的诗与远方:如何在MVC的田野上,用Struts 2编织Web开发的新篇章
【8月更文挑战第31天】架构模式是软件开发的核心概念,MVC(Model-View-Controller)通过清晰的分层和职责分离,成为广泛采用的模式。随着业务需求的复杂化,Struts 2框架应运而生,继承MVC优点并引入更多功能。本文探讨从MVC到Struts 2的演进,强调架构模式的重要性。MVC将应用程序分为模型、视图和控制器三部分,提高模块化和可维护性。
48 0
|
4月前
|
Java Spring Maven
Struts 2遇见Spring:这个组合如何颠覆你的Web开发?
【8月更文挑战第31天】在现代Web开发中,Struts 2与Spring的结合使用能显著增强应用的模块化和可维护性。本文将介绍如何整合这两个框架,并提供代码示例。首先,在`pom.xml`中添加Struts 2和Spring的依赖,然后在`struts.xml`中配置Struts 2以识别Spring插件。接着,在Spring配置文件中定义bean,并在Struts 2的Action类中使用`@Autowired`注解进行自动注入。
51 0
下一篇
无影云桌面