本文主要以一些简单的小例子,简述在SpringMVC开发过程中,经常用到的Request方面的内容,仅供学习分享使用,如有不足之处,还请指正。

概述

在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。如果要支持其他方式进行访问,则必须在表单中增加Hidden元素,然后再SpringMVC中过滤器进行拦截,再重新封装请求方式。

Request常见访问方式

  1. GET - 从指定的资源请求数据。
  2. POST - 向指定的资源提交要被处理的数据

GET方式

访问的特点:

  1. GET 请求可被缓存
  2. GET 请求保留在浏览器历史记录中
  3. GET 请求可被收藏为书签
  4. GET 请求不应在处理敏感数据时使用
  5. GET 请求有长度限制
  6. GET 请求只应当用于取回数据

SpringMVC中GET访问示例

如下所示:

 /**
* GET请求方式
* @return
*/
@RequestMapping(value="testGet",method=RequestMethod.GET)
public ModelAndView testGet(String uname){
String msg="GET方式访问,uname="+uname;
System.out.println(msg);
ModelAndView mav=new ModelAndView("HelloWorld");
mav.addObject("msg", msg);
return mav; }

前端可以通过请求的URL访问,也可以表单(method=get)的方式访问,如下所示:

     <form name="form1" action="testGet" method="get" >
<span>GET方式提交</span><br />
<input name="uname" type="text" />
<input name="submit" type="submit" value="提交" />
</form>

POST方式

访问特点

  1. POST 请求不会被缓存
  2. POST 请求不会保留在浏览器历史记录中
  3. POST 不能被收藏为书签
  4. POST 请求对数据长度没有要求

SpringMVC中POST方式示例

如下:

 /**
* POST请求方式
* @return
*/
@RequestMapping(value="testPost",method=RequestMethod.POST)
public ModelAndView testPost(String uname){
String msg="POST方式访问,uname="+uname;
System.out.println(msg);
ModelAndView mav=new ModelAndView("HelloWorld");
mav.addObject("msg", msg);
return mav; }

前端访问代码

POST方式通常采用form的方式,如下所示:

 <form name="form2" action="testPost" method="post" >
<span>POST方式提交</span><br />
<input name="uname" type="text" />
<input name="submit" type="submit" value="提交" />
</form>

PUT方式访问及步骤

PUT方式是把消息本体中的消息发送到一个URL,跟POST类似,但不常用。

SpringMVC中PUT方式步骤如下:

1. 设置路径的访问方式为PUT

 /**
* PUT请求方式
* 原始请求,默认只支持GET,POST请求方式,如有要支持PUT和DELETE,
* 需要在Form表单(表单的请求方式必须为POST)中,增加一个hidden标签,name="_method" value="访问方式"
* @return
*/
@RequestMapping(value="testPut",method=RequestMethod.PUT)
public ModelAndView testPut(String uname){
String msg="PUT方式访问,uname="+uname;
System.out.println(msg);
ModelAndView mav=new ModelAndView("HelloWorld");
mav.addObject("msg", msg);
return mav; }

2. 在web.xml中设置过滤器

 <!-- 设置过滤器 -->
<filter>
<filter-name>filter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

3. form表单中增加hidden访问控件

如下所示:method必须为post,hidden的name=_method,value=PUT,属于固定写法。

 <form name="form3" action="testPut" method="post" >
<span>PUT方式提交</span><br />
<input type="hidden" name="_method" value="PUT">
<input name="uname" type="text" />
<input name="submit" type="submit" value="提交" />
</form>

DELETE方式访问及步骤

DELETE主要用于删除指定资源。

SpringMVC支持Delete方式访问的步骤

1. 设置路径访问方式为DELETE

如下所示:

 /**
* DELETE请求方式
* @return
*/
@RequestMapping(value="testDelete",method=RequestMethod.DELETE)
public ModelAndView testDelete(String uname){
String msg="DELETE方式访问,uname="+uname;
System.out.println(msg);
ModelAndView mav=new ModelAndView("HelloWorld");
mav.addObject("msg", msg);
return mav; }

2. 在配置好过滤器的前提下,前端访问

方式如下:

 <form name="form4" action="testDelete" method="post" >
<span>DELETE方式提交</span><br />
<input type="hidden" name="_method" value="DELETE">
<input name="uname" type="text" />
<input name="submit" type="submit" value="提交" />
</form>

请求参数

请求参数可以采用的restful的方式进行提取,也可以采用参数的方式进行获取。如果前端请求参数和函数参数名一致,则可以自动匹配。

如果不一致,则可以使用@RequestParam("uname")来声明

如下所示:

     /**
* 测试请求参数,如果参数名称和前端页面参数不一致,则可以使用@RequestParam("uname")来声明
* @param uname
* @return
*/
@RequestMapping(value="testParam",method=RequestMethod.POST)
public ModelAndView testParam(@RequestParam("uname") String name){
String msg="POST方式访问,请求参数,name="+name;
System.out.println(msg);
ModelAndView mav=new ModelAndView("HelloWorld");
mav.addObject("msg", msg);
return mav; }

前端访问方式

     <form name="form6" action="testParam" method="post" >
<span>测试Param</span><br />
<input name="uname" type="text" /><br />
<input name="uage" type="text" /><br />
<input name="submit" type="submit" value="提交" />
</form>

设置是否必须访问和默认值

 /**
* 请求参数,设置参数是否必填
* @param name
* @param age
* @return
*/
@RequestMapping(value="testParam2",method=RequestMethod.POST)
public ModelAndView testParam2(@RequestParam("uname") String name,@RequestParam(value="uage",required=false,defaultValue="11")int age){
String msg="POST方式访问,请求参数,name="+name;
String msg1="POST方式访问,请求参数,age="+age;
System.out.println(msg);
System.out.println(msg1);
ModelAndView mav=new ModelAndView("HelloWorld");
mav.addObject("msg", msg+"\r\n"+msg1);
return mav; }

获取请求Header信息

@RequestHeader注解可以轻松获取请求的Header信息,如下所示:获取Accept-Language,并赋给参数header

 /**
* 获取请求头部信息,如果多个value,用数组表示
* @param header
* @return
*/
@RequestMapping(value="testHeader",method=RequestMethod.POST)
public ModelAndView testHeader(@RequestHeader("Accept-Language") String header){
String msg="请求头部信息,header="+header;
System.out.println(msg);
ModelAndView mav=new ModelAndView("HelloWorld");
mav.addObject("msg", msg);
return mav; }

获取请求cookie信息

如下所示:获取cookie中的JESSIONID并赋给参数

 /**
* 获取cookie中的值,服务端在客户端第一次请求时,会分配一个session给客户端,其中包含sessionid
* @param sessionId
* @return
*/
@RequestMapping(value="testCookie",method=RequestMethod.POST)
public ModelAndView testCookie(@CookieValue("JSESSIONID") String sessionId){
String msg="请求cookie信息,JSESSIONID="+sessionId;
System.out.println(msg);
ModelAndView mav=new ModelAndView("HelloWorld");
mav.addObject("msg", msg);
return mav; }

备注

快乐很简单,就是春天的鲜花,夏天的绿荫,秋天的野果,冬天的漫天飞雪。

一起学SpringMVC之Request方式的更多相关文章

  1. springmvc中request的线程安全问题

    SpringMvc学习心得(四)springmvc中request的线程安全问题 标签: springspring mvc框架线程安全 2016-03-19 11:25 611人阅读 评论(1) 收藏 ...

  2. SpringMVC从Request域中获取数据

    SpringMVC从Request域中获取数据的三种方式 SpringMVC环境自行搭建, 约定存在如下目录和文件:/WEB-INF/pages/success.jsp 方式一:传入Model对象 前 ...

  3. 【转】跟着开涛学SpringMVC

    跟着开涛学SpringMVC 第一章源代码下载 博客分类: 跟开涛学SpringMVC 跟开涛学SpringMVC  源代码请到附件中下载. 其他下载: 跟着开涛学SpringMVC 第一章源代码下载 ...

  4. 跟我学SpringMVC目录汇总贴、PDF下载、源码下载

    国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html内部邀请码:C8E245J (不写邀请码,没有现金送)国内私 ...

  5. spring+springMVC集成(annotation方式)

    spring+springMVC集成(annotation方式) SpringMVC+Spring4.0+Hibernate 简单的整合 MyBatis3整合Spring3.SpringMVC3

  6. Spring Web MVC中的页面缓存支持 ——跟我学SpringMVC系列

    Spring Web MVC中的页面缓存支持 ——跟我学SpringMVC系列

  7. 学SpringMVC收藏

     一个较完整的SpringMVC工程的配置 2014-01-22 17:17:25 标签:java spring springMVC 配置 springSecurity web.xml 原创作品,允许 ...

  8. Struts2,springMVC获取request和response

    springMVC获取request和response1:在BaseController中加入: protected HttpServletRequest request;   protected H ...

  9. SpringMVC的注解方式

    mvc-servlet.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=&qu ...

随机推荐

  1. WebGL简易教程(十四):阴影

    目录 1. 概述 2. 示例 2.1. 着色器部分 2.1.1. 帧缓存着色器 2.1.2. 颜色缓存着色器 2.2. 绘制部分 2.2.1. 整体结构 2.2.2. 具体改动 3. 结果 4. 参考 ...

  2. 与karma、angular的第一次亲密接触

    首先要了解什么是karma,karma干嘛用的,它的好朋友jasmine又是啥?这些文章可以帮助你: karma干嘛的? angular与karma1 angular与karma2 看了以上几篇文章之 ...

  3. Mybatis整合spring详细教程(适合小白童鞋)

    目录 1.整合思路 2.整合需要的jar包 3.整合的步骤 4.Dao的开发的两种实现方式 6.Dao的开发的实现方式总结图 @ Mybatis整合spring其实就是SSM框架中SM的整合集成. 1 ...

  4. ios宏定义应该呆在恰当的地方

    项目为了看起来整洁 并减少不必要的多次拼写 我们会把这样的方法 做成宏定义 那么问题来了 很多文件同时用到一个或多个宏定义 写完之后就会变成这个样子 看起来很乱 阅读性也不好 那么问题来了怎么解决嘞 ...

  5. [FPGA]Verilog 60s秒表计时器(最大可计时间长达9min)

    [FPGA]Verilog 60s秒表计时器 1.引述 这次的实验来自于本人本科课程数电结课时的自选题目.由于这次上传是后知后觉,学校已将小脚丫板子回收,所以在这篇文章中没法贴出代码结果的效果图了,但 ...

  6. 【JS】310- 使用 focusout 事件,解决 iOS 键盘收起不归位问题

    点击上方"前端自习课"关注,学习起来~ ,0);            }        }, 这时,我们问题得到解决了,当从输入框输入内容,然后点击键盘的完成收起键盘,效果符合我 ...

  7. VMware“该虚拟机似乎正在使用中”

    问题现象: 在用VMware虚拟机的时候,有时会发现打开虚拟机时提示"该虚拟机似乎正在使用中.如果该虚拟机未在使用,请按"获取所有权(T)"按钮获取它的所有权.否则,请按 ...

  8. NodeJS4-5静态资源服务器实战_优化压缩文件

    浏览器控制台看一下RequestHeader有一个Accept-Encoding,而RespondHeaders中也会有一个Content-Encoding和他进行对应. Accept-Encodin ...

  9. hdu 1028 Ignatius and the Princess III (n的划分)

    Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ...

  10. logging in kubernetes

    background docker docker的日志输出可以通过指定driver输出到不同的位置,常用的是journald和json-file. 使用journald日志输出可能受限于jourand ...