SpringMVC(三):Ant类型风格和RESTFUL风格

目录

1.解决参数乱码

2.Ant类型风格路径

3 RESTFUL风格

3.1 支持路径的占位符

3.2 简介

3.2.1资源

3.2.2 资源的表述

3.2.3 状态转移

3.3 RESTFUL的实现

3.4 发送put和delete请求


1.解决参数乱码

        在我们获取参数时,经常遇见参数乱码情况,我们可以通过使用SpringMVC提供的编码过滤器CharacterEncodingFilter 。

1.1 在web.xml中配置

<!--配置springMVC的编码过滤器-->
    <filter>
        <filter-name>CharacterEncodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
        <init-param>
            <param-name>forceEncoding</param-name>
            <param-value>true</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>CharacterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

注:

SpringMVC中处理编码的过滤器一定要配置到其他过滤器之前,否则无效

2.Ant类型风格路径

通配符说明
?表示任意的单个字符(不包括?)
*表示任意的0个或多个字符(不包括?和/)
**表示任意层数的任意目录(必须用//包住,如:/**/)

例子:

路径说明
/xiao/?e可以匹配/xiao/ye,/xiao/ee等等
/xiao/*可以匹配/xiao/ye,/xiao/apple等等·该目录下所有文件
/**/ye可以匹配/xiao/ye,/apple/xiaoye/ye等等

3 RESTFUL风格

3.1 支持路径的占位符

原始方式:/deleteUser?id=1

rest方式:/user/delete/1

        SpringMVC路径中的占位符常用于RESTful风格中,当请求路径中将某些数据通过路径的方式传输到服务器中,就可以在相应的@RequestMapping注解的value属性中通过占位符{xxx}表示传输的数据,在通过@PathVariable注解,将占位符所表示的数据赋值给控制器方法的形参。

<a th:href="@{/testRest/1/admin}">测试路径中的占位符-->/testRest</a><br>
 @RequestMapping("/testRest/{id}/{username}")
    public String testRest(@PathVariable("id") String id, @PathVariable("username") String username) {
        System.out.println("id:" + id + ",username:" + username);
        return "success";
    }//最终输出的内容为-->id:1,username:admin

最终输出的内容为-->id:1,username:admin

3.2 简介

REST:Representational State Transfer,表现层资源状态转移

3.2.1资源

        资源是一种看待服务器的方式,即,将服务器看作是由很多离散的资源组成。每个资源是服务器上一个可命名的抽象概念。因为资源是一个抽象的概念,所以它不仅仅能代表服务器文件系统中的一个文件、数据库中的一张表等等具体的东西,可以将资源设计的要多抽象有多抽象,只要想象力允许而且客户端应用开发者能够理解。与面向对象设计类似,资源是以名词为核心来组织的,首先关注的是名词。一个资源可以由一个或多个URI来标识。URI既是资源的名称,也是资源在Web上的地址。对某个资源感兴趣的客户端应用,可以通过资源的URI与其进行交互。

3.2.2 资源的表述

        资源的表述是一段对于资源在某个特定时刻的状态的描述。可以在客户端-服务器端之间转移(交换)。资源的表述可以有多种格式,例如HTML/XML/JSON/纯文本/图片/视频/音频等等。资源的表述格式可以通过协商机制来确定。请求-响应方向的表述通常使用不同的格式。

3.2.3 状态转移

        状态转移说的是:在客户端和服务器端之间转移(transfer)代表资源状态的表述。通过转移和操作资源的表述,来间接实现操作资源的目的。

3.3 RESTFUL的实现

        具体说,就是 HTTP 协议里面,四个表示操作方式的动词:GET、POST、PUT、DELETE。它们分别对应四种基本操作:GET 用来获取资源,POST 用来新建资源,PUT 用来更新资源,DELETE用来删除资源。

        REST 风格提倡 URL 地址使用统一的风格设计,从前到后各个单词使用斜杠分开,不使用问号键值对方式携带请求参数,而是将要发送给服务器的数据作为 URL 地址的一部分,以保证整体风格的一致性。

操作传统方式rest风格
查询getUserById?id=1user/1-->get请求方式
保存saveUseruser-->post请求方式
删除deleteUser?id=1user/1-->delete请求方式
更新updateUseruser-->put请求方式

3.4 发送put和delete请求

由于浏览器只支持发送get和post方式的请求,那么该如何发送put和delete请求呢?

        SpringMVC 提供了 HiddenHttpMethodFilter 帮助我们 POST 请求转换为 DELETE PUT 请求.

HiddenHttpMethodFilter 处理put和delete请求的条件:

a>当前请求的请求方式必须为post

b>当前请求必须传输请求参数_method

满足以上条件,HiddenHttpMethodFilter 过滤器就会将当前请求的请求方式转换为请求参数

method的值,因此请求参数method的值才是最终的请求方式

在web.xml中注册HiddenHttpMethodFilter

<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>

        目前为止,SpringMVC中提供了两个过滤器:CharacterEncodingFilter和

HiddenHttpMethodFilter,在web.xml中注册时,必须先注册CharacterEncodingFilter,再注册HiddenHttpMethodFilter

原因:

        在 CharacterEncodingFilter 中通过 request.setCharacterEncoding(encoding) 方法设置字

符集的request.setCharacterEncoding(encoding) 方法要求前面不能有任何获取请求参数的操作

而 HiddenHttpMethodFilter 恰恰有一个获取请求方式的操作。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值