Spring 全家桶之 Spring Web MVC(二)- Restful(上)

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

一、REST风格URL

创建一个新的Maven工程,导入依赖,添加Framework Support,选择Web,配置web.xml,创建Spring MVC的配置文件,点击Project Structure,在Artifacts目录下选择WEB-INF,点击创建lib文件夹,并将右侧的jar导入新建的lib文件夹下,配置Tomcat,配置项目请求地址为/,启动Tomcat

@Controller
public class TeslaController {
    @RequestMapping(value = "/tesla/{name}", method = RequestMethod.GET)
    public String get(@PathVariable("name") String name){
        System.out.println("查询Tesla车型:" + name);
        return "success";
    }
    @RequestMapping(value = "/tesla", method = RequestMethod.POST)
    public String add(){
        System.out.println("增加Tesla车型");
        return "success";
    }
    @RequestMapping(value = "/tesla/{name}", method = RequestMethod.PUT)
    public String update(@PathVariable("name") String name){
        System.out.println("更新Tesla车型:" + name);
        return "success";
    }
    @RequestMapping(value = "/tesla/{name}", method = RequestMethod.DELETE)
    public String delete(@PathVariable("name") String name){
        System.out.println("删除Tesla车型:" + name);
        return "success";
    }
}
复制代码

index.jsp页面

<h3>查询Tesla</h3>
<a href="/tesla/cybertruck">Cybertruck</a>
<h3>增加Tesla车型</h3>
<form action="/tesla" method="post">
  <button type="submit">增加Semi Truck</button>
</form>
<h3>更新Tesla车型</h3>
<a href="/tesla/model3">更新Model 3</a>
<h3>删除Tesla车型</h3>
<a href="/tesla/roadster">删除Roadster</a>
复制代码

逐个点击,查看控制台输出,其中更新和删除最终调用的是get()方法

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

想要从页面发起PUT和DELETE请求需要用到Spring MVC中的HiddenHttpMethodFilter,可以将普通请求转换为PUT和DELETE请求 在web.xml中配置Filter

<!--Rest支持-->
<filter>
    <filter-name>hiddenHttpMethodFilter</filter-name>
    <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>hiddenHttpMethodFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
复制代码

改造页面的请求,使用表单发起PUT和DELETE请求

<h3>更新Tesla车型</h3>
<form action="/tesla/model3" method="post">
  <input type="hidden" name="_method" value="put">
  <button type="submit">更新Model 3</button>
</form>
<h3>删除Tesla车型</h3>
<form action="/tesla/roadster" method="post">
  <input type="hidden" name="_method" value="delete">
  <button type="submit">删除Roadster</button>
</form>
复制代码

点击更新和删除按钮,控制台输出相应的内容

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

解决页面报错的问题,增加isErrorPage="true"

<%@ page contentType="text/html;charset=UTF-8" language="java" isErrorPage="true" %>
复制代码

二、获取请求参数

默认方式获取请求中参数的值

  • 在方法入参中增加一个和请求中参数名相同的参数,就可以接收请求中参数的值
  • 如果请求中没有输入参数,则控制器方法中参数的值为null

新建一个ParamController

@Controller
public class ParamController {
    @RequestMapping("/param")
    public String getParam(String username){
        System.out.println("请求中的传输的数据为:" + username);
        return "success";
    }
}
复制代码

浏览器中输入http://localhost:8080/param?username=stark

5cf8d74e05164914a5268e6b87d28152_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

@RequestParam注解获取请求中的参数的值

ParamsController中增加方法

@RequestMapping("/param")
public String getParam(@RequestParam("user") String username){
    System.out.println("请求中的传输的数据为:" + username);
    return "success";
}
复制代码

浏览器中输入http://localhost:8080/param?user=stark

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

@RequestParam("user")这句代码就相当于

request.getParameter("user")
复制代码

@RequestParam的属性

  • value:指定要获取参数的参数名
  • required:参数是否是必传的,默认为true,必传
  • defaultValue:指定参数默认值,默认为null

测试required属性

启动tomcat,浏览器输入http://localhost:8080/param, 不带user参数会报错

4f3dc2c7da1345f2872c607bb7aebcc8_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

修改getParam方法,在@RequestParam中增加属性required=false,重启Tomcat,再次访问http://localhost:8080/param

2823aac9abce4885bbe63b7d21582d19_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

不传user参数,页面不再报错,并且user默认的值为null

1906853879784b75982a18ffefd9306b_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

测试defaultValue属性

给getParam方法增加,defaultValue属性,defaultValue=“默认值”,浏览器输入http://localhost:8080/param, 控制台打印出设置的默认值

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

@RequestHeader注解获取请求头

获取请求中的Key的值,在ParamController中新增方法getHeaders

@RequestMapping("/headers")
public String getHeaders(@RequestHeader(value = "User-Agent",required = false, defaultValue = "默认值") String userAgent){
    System.out.println("请求头中的Key User-Agent的值为:" + userAgent);
    return "success";
}
复制代码

浏览器中输入http://localhost:8080/headers,控制台中打印出User-Agent的值,与@RequestParam有三个同样的属性,且用法一致

245273573d0d4d68922267e28f276d7e_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


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