zoukankan      html  css  js  c++  java
  • 一起学SpringMVC之Request方式

    本文主要以一些简单的小例子,简述在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访问示例

    如下所示:

     1 /**
     2      * GET请求方式
     3      * @return
     4      */
     5     @RequestMapping(value="testGet",method=RequestMethod.GET)
     6     public ModelAndView testGet(String uname){
     7         String msg="GET方式访问,uname="+uname;
     8         System.out.println(msg);
     9         ModelAndView mav=new ModelAndView("HelloWorld");
    10         mav.addObject("msg", msg);
    11         return mav;
    12         
    13     } 

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

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

    POST方式

    访问特点

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

    SpringMVC中POST方式示例

    如下:

     1 /**
     2      * POST请求方式
     3      * @return
     4      */
     5     @RequestMapping(value="testPost",method=RequestMethod.POST)
     6     public ModelAndView testPost(String uname){
     7         String msg="POST方式访问,uname="+uname;
     8         System.out.println(msg);
     9         ModelAndView mav=new ModelAndView("HelloWorld");
    10         mav.addObject("msg", msg);
    11         return mav;
    12         
    13     } 

    前端访问代码

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

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

    PUT方式访问及步骤

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

    SpringMVC中PUT方式步骤如下:

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

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

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

    1 <!-- 设置过滤器 -->
    2   <filter>
    3       <filter-name>filter</filter-name>
    4       <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
    5   </filter>
    6   <filter-mapping>
    7       <filter-name>filter</filter-name>
    8       <url-pattern>/*</url-pattern>
    9   </filter-mapping>

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

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

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

    DELETE方式访问及步骤

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

    SpringMVC支持Delete方式访问的步骤

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

    如下所示:

     1 /**
     2      * DELETE请求方式
     3      * @return
     4      */
     5     @RequestMapping(value="testDelete",method=RequestMethod.DELETE)
     6     public ModelAndView testDelete(String uname){
     7         String msg="DELETE方式访问,uname="+uname;
     8         System.out.println(msg);
     9         ModelAndView mav=new ModelAndView("HelloWorld");
    10         mav.addObject("msg", msg);
    11         return mav;
    12         
    13     } 

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

    方式如下:

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

    请求参数

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

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

    如下所示:

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

    前端访问方式

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

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

     1 /**
     2      * 请求参数,设置参数是否必填
     3      * @param name
     4      * @param age
     5      * @return
     6      */
     7     @RequestMapping(value="testParam2",method=RequestMethod.POST)
     8     public ModelAndView testParam2(@RequestParam("uname") String name,@RequestParam(value="uage",required=false,defaultValue="11")int age){
     9         String msg="POST方式访问,请求参数,name="+name;
    10         String msg1="POST方式访问,请求参数,age="+age;
    11         System.out.println(msg);
    12         System.out.println(msg1);
    13         ModelAndView mav=new ModelAndView("HelloWorld");
    14         mav.addObject("msg", msg+"
    "+msg1);
    15         return mav;
    16         
    17     }

    获取请求Header信息

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

     1 /**
     2      * 获取请求头部信息,如果多个value,用数组表示
     3      * @param header
     4      * @return
     5      */
     6     @RequestMapping(value="testHeader",method=RequestMethod.POST)
     7     public ModelAndView testHeader(@RequestHeader("Accept-Language") String header){
     8         String msg="请求头部信息,header="+header;
     9         System.out.println(msg);
    10         ModelAndView mav=new ModelAndView("HelloWorld");
    11         mav.addObject("msg", msg);
    12         return mav;
    13         
    14     }

    获取请求cookie信息

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

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

    备注

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

  • 相关阅读:
    如何在dede栏目设置中添加自定义字段(dede二次开发-纯抄贴)
    dedecms内容页 上下篇 添加文章描述方法
    关于透明层----背景透明字不透明的效果
    什么是JavaScript闭包终极全解之一——基础概念
    phpcms v9中调用多栏目的方法--get标签(备实例)
    PHP识别电脑还是手机访问网站
    PHP中 post 与get的区别 详细说明
    js 处理数据里面的空格
    mysql中的unix_timestamp函数
    PHP中date函数月和日带0问题
  • 原文地址:https://www.cnblogs.com/hsiang/p/11406460.html
Copyright © 2011-2022 走看看