springmvc怎么解析post_SpringMVC注解完全解析(上)

学习是一个循序渐进的过程,了解SpringMVC的背景和概念之后,我们就要去深入学习一下SpringMVC。我们知道,SpringMVC基于一套MVC注解,将普通的POJO类变为控制器,而无需实现任何接口,所以注解在SpringMVC中的地位是无法撼动的,下面就对SpringMVC中的注解做一个解析。

@RequestMapping

首先来看一下RequestMapping,这是一个很重要的API,我们在编写入门案例的时候就用过,它可以注解在其它方法上,并指定请求路径。

当然,RequestMapping可不是只能修饰方法,它还能够修饰类,例如下面的这个例子:

@RequestMapping("/springmvc")

@Controller

public class HelloWorld {

@RequestMapping("/test")

public String hello() {

System.out.println("hello world");

return "success";

}

}

此时若要想通过url地址访问该类下的hello()方法,应该怎么写呢(只需加上类注解即可)?url地址即为 /springmvc/test,我们测试一下:

由此我们得知:

类定义处:提供初步的请求映射信息,相对于Web应用的根目录

方法定义处:提供进一步的映射信息,相对于类定义处的URL,若类定义处未标记@RequestMapping,则方法处标记的URL相对于Web应用的根目录

很显然,@RequestMapping的作用远不止如此,否则,我也不必大费周章地来写它,所以,我们来看它的下一个功能:映射请求参数、请求方法或请求头

1.映射请求参数、请求方法或请求头

@RequestMapping除了可以使用请求URL映射请求外,还可以使用请求方法、请求参数以及请求头映射请求。

@RequestMapping的valie、method、params以及heads分别表示请求URL、请求方法、请求参数和请求头,它们之间是与的关系,联合使用多个条件可让请求映射更加精确化。

看一个例子:

@RequestMapping("/springmvc")

@Controller

public class HelloWorld {

@RequestMapping(value = "/testMethod", method = RequestMethod.POST)

public String testMethod() {

System.out.println();

return "success";

}

}

在这里我们将映射路径设置为了/springmvc/testMethod,这是由类和方法注解共同组成的,然后将请求方式设置为Post请求。

测试页面:

pageEncoding="UTF-8"%>

Insert title here

运行结果:

但需要注意的是,由于你设置的请求方式为Post,所以如果不是Post请求程序就会报错,无法正常运行。

该方式在实际开发中是十分常用的配置。

@RequestMapping同样还支持请求参数和请求头的设置,请求参数和请求头支持简单的表达式,例如:

param1:表示请求必须包含名为param1的请求参数

!param1:表示请求不能包含名为param1的请求参数

param!=value1:表示请求包含名为param1的请求参数,但其值不能为value1

{“param1=value1”,“param2”}:表示请求必须包含名为param1和param2的请求参数,且param1参数的值必须为value1

请求头与其类似。

使用@RequestMapping设置的映射地址还支持通配符,不过通配符必须使用Ant风格,Ant风格资源地址支持三种匹配符:

?:匹配文件名中的一个字符

*:匹配文件名中的任意字符

**:匹配多层路径

我们举个例子:

@RequestMapping("/springmvc")

@Controller

public class HelloWorld {

@RequestMapping("testAntPath/*/abc")

public String testAntPath() {

System.out.println("testAntPath");

return "success";

}

}

这样配置的意思是:我们在testAntPath和abc之间添加任意字符都可以访问到该方法,如:/testAntPath/test/abc、/testAntPath/test2/abc等。另外两种通配符与其类似,就不做重复讲解了。

2.@PathVariable

@PathVariable能够映射URL绑定的占位符,带占位符的URL是Spring3.0新增的功能,该功能在SpringMVC向REST目标挺进发展过程中具有里程碑意义。

通过@PathVariable可以将URL中占位符参数绑定到控制器处理方法的参数中:URL中的{xxx}占位符可以通过@PathVariable{“xxx”}绑定到操作方法的参数中。

看一个例子:

@RequestMapping("/springmvc")

@Controller

public class HelloWorld {

@RequestMapping("testPathVariable/{id}")

public String testPathVariable(@PathVariable("id") Integer id) {

System.out.println("testPathVariable" + id);

return "success";

}

}

通过这样的配置我们就能够获取到URL地址中占位符的参数并绑定到处理方法的参数中,我们测试一下:

既然说到了REST,那就简单地聊一聊吧。

REST:即Representational State Transfer。(资源)表现层状态转化,是目前最流行的一种互联网软件架构。它结构清晰、符合标准、易于理解、扩展方便,所以正得到越来越多网站的采用。

资源(Resources):网络上的一个实体,或者说是网络上的一个具体信息,它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的存在。可以用一个URI(统一资源定位符)指向它,每种资源对应一个特定的URI,要获取这个资源,访问它的URI就可以,因此URI即为每一个资源的独一无二的识别符。

表现层(Representation):把资源具体呈现出来的形式,叫做它的表现层。

状态转化(State Transfer):每发出一个请求,就代表了客户端和服务器的一次交互过程。HTTP协议,是一个无状态的协议,即所有的状态都保存在服务器端。因此,如果客户端想要操作服务器,必须通过某种手段,让服务端发生"状态转化",而这种转化是建立在表现层之上的,所以就是"表现层转化"。具体说,就是HTTP协议里面,四个表示操作方式的动作词:GET、POST、PUT、DELETE,它们分别对应四种基本操作:GET用来获取资源;POST用来新建资源;PUT用来更新资源;DELETE用来删除资源。

示例:

/order/1 HTTP GET :得到id = 1的order

/order/1 HTTP DELETE :删除id = 1的order

/order/1 HTTP PUT :更新id = 1的order

/order HTTP POST :新增order

以上是一个REST风格的增删改查示例。

但事实上浏览器form表单只支持GET与POST请求,而DELETE、PUT等请求并不支持,为此,Spring3.0添加了一个过滤器(HiddenHttpMethodFilter),该过滤器可以将这些请求转换为标准的http方法,使得浏览器间接支持GET、POST、PUT和DELETE请求。

说了一大堆,不如一个实际案例看得明白,我们就通过一个例子来使用一下该过滤器。

首先在web.xml文件中配置过滤器:

HiddenHttpMethodFilter

org.springframework.web.filter.HiddenHttpMethodFilter

HiddenHttpMethodFilter

/*

接着我们在jsp页面创建四个表单,分别对应四种请求方式:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值