SpringMVC参数传递 HttpServletRequest,HttpServletResponse和HttpSession

2017-11-27 16:44:51 douunderstand 阅读数 8560更多

分类专栏: SpringMVC
 
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。

除了model,@RequestParam @PathVariable可以传递参数外,还有HttpServletRequest和HttpServletResponse也可以进行参数传递。

Web服务器收到一个http请求,会针对每个请求创建一个HttpServletRequest和HttpServletResponse对象,向客户端发送数据找HttpServletResponse,从客户端取数据找HttpServletRequest.


HttpServletRequest

HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户这些信息。

主要功能:参数解析,Cookie读取,http请求字段,文件上传

1.请求行

getMethod(); 获得请求方式
getQueryString() ; 返回请求行中的参数部分。
getRequestURI(); 返回请求行中的资源名部分。
getRequestURL();返回客户端发出请求时的完整URL。

例子

  1. @Controller
  2. public class IndexController {
  3. @RequestMapping(path={"/request"},method={RequestMethod.GET})
  4. @ResponseBody
  5. public String index(HttpServletRequest request) {
  6. StringBuilder sb = new StringBuilder();
  7. sb.append(request.getMethod()+"<br>");
  8. sb.append(request.getQueryString()+"<br>");
  9. sb.append(request.getRequestURI()+"<br>");
  10. sb.append(request.getRequestURL()+"<br>");
  11. return sb.toString();
  12. }
  13. }
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

页面输出:

我们还能获取请求消息头的信息

2.请求消息头

String getHeader(String name) 根据请求消息头名称称得到请求消息头信息值
Enumeration getHeaderNames() 得到所有请求消息头名称
Enumeration getHeaders(String name) 根据头名称得到相同名称请求头信息值
String getCookies() 获取请求消息头中的cookie值

例子

  1. @Controller
  2. public class IndexController {
  3. @RequestMapping("/request")
  4. @ResponseBody
  5. public String index(HttpServletRequest request) {
  6. StringBuilder sb = new StringBuilder();
  7. Enumeration<String> headerNames = request.getHeaderNames();
  8. while (headerNames.hasMoreElements()) { //读取请求消息头
  9. String name = headerNames.nextElement();
  10. sb.append(name + ":" + request.getHeader(name) + "<br>");
  11. }
  12. return sb.toString();
  13. }
  14. }
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

请求消息头的信息就被全部打印出来了

通过这种方法来获取请求的一系列信息,比如通过user-agent来判断用户是通过手机还是电脑来登陆页面,从而可以实现相对应的跳转。

获取cookie值

  1. @Controller
  2. public class IndexController {
  3. @RequestMapping("/request")
  4. @ResponseBody
  5. public String index(HttpServletRequest request) {
  6. StringBuilder sb = new StringBuilder();
  7. if(request.getCookies()!=null){
  8. for(Cookie cookie :request.getCookies()){
  9. sb.append("Cookie: " + cookie.getName()+" value: "+ cookie.getValue());
  10. }
  11. }
  12. return sb.toString();
  13. }
  14. }
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

3. 获得客户机请求参数(客户端提交的数据)

getParameter(name)方法 获取请求中的参数,该参数是由name指定
getParameterValues(String name)方法 获取指定名称参数的所有值数组。它适用于一个参数名对应多个值的情况。如页面表单中的复选框,多选列表提交的值。
getParameterNames() 方法返回一个包含请求消息中的所有参数名的Enumeration对象。通过遍历这个Enumeration对象,就可以获取请求消息中所有的参数名。
getCharacterEncoding() 返回请求的字符编码方式
getAttributeNames()返回当前请求的所有属性的名字集合赋值:setAttribute()
getAttribute(String name) 返回name指定的属性值
getsession()返回和客户端相关的session,如果没有给客户端分配session,则返回null
getParameterMap():返回一个保存了请求消息中的所有参数名和值的Map对象。Map对象的key是字符串类型的参数名,value是这个参数所对应的Object类型的值数组
RequestDispatcher.forward() 方法的请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。方法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。
setCharacterEncoding(“utf-8”);
getReader() 获取请求体的数据流
getInputStream() 获取请求的输入流中的数据


HttpSerlvetResponse

HttpServletResponse对象代表服务器的响应。这个对象中封装了向客户端发送数据、发送响应头,发送响应状态码的方法。

主要功能:页面内容返回,cookie下发,Http字段设置,headers
1.响应行

setStatus(int sc) 设置响应状态码

响应状态码:200=服务器端OK
404=NOT FOUND 请求资源不存在
500=服务器端代码错误

  1. @Controller
  2. public class IndexController {
  3. @RequestMapping("/request")
  4. @ResponseBody
  5. public String index(HttpServletResponse response) {
  6. response.setStatus(404); //我们将状态设置成404
  7. return "hello";
  8. }
  9. }
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

可以看到页面依然正常显示

但是我们通过Restlet Client看其HTTP状态,为404

2.响应头

setHeader(String name,String value) //设置响应头信息
sendRedirect(String location) //请求重定向
addHeader(String name,String value) //增加相应头信息
addCookie(Cookie cookie) //添加Cookie

  1. response.setHeader("content-type", "text/html;charset=UTF-8"); //告知浏览器使用什么码表
  2. //告知客户端不缓存
  3. response.setHeader("pragma", "no-cache");
  4. response.setHeader("cache-control", "no-cache");
  5. response.setDateHeader("expires", 0);
  6. //添加Cookie
  7. response.addCookie(new Cookie(String name ,String value))
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

3.响应正文(主体)

getWrite(); // 字符输出流
getOutputStream(); //字节输出流
setCharacterEncoding(String charset) //告知服务器使用什么编码
setContentType(String type)

比如我们可以通过getOutputStream(); 返回图片,验证码等信息。

4.请求重定向

response.sendRedirect()//请求重定向,让客户端去访问另一个服务器

例子

  1. @Controller
  2. public class IndexController {
  3. @RequestMapping("/request")
  4. @ResponseBody
  5. public String index(HttpServletResponse response)throws IOException {
  6. response.sendRedirect("/home");
  7. return "hello"; //也可以直接 return "redirect:/home"
  8. }
  9. @RequestMapping("/home")
  10. @ResponseBody
  11. public String home(HttpServletResponse response) {
  12. return "hahah";
  13. }
  14. }
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

页面输出:hahah


PS:
一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理,称之为转发 /307
一个web资源收到客户端请求后,通知浏览器去访问另外一个web资源进行处理,称之为重定向/302

文章最后发布于: 2017-11-27 16:44:51

SpringMVC参数传递 HttpServletRequest,HttpServletResponse和HttpSession的更多相关文章

  1. The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes limit

    如果你是通过搜索来到本文的,相信你应该是遇到了如下的错误 The code of method _jspService(HttpServletRequest, HttpServletResponse) ...

  2. 使用SpringMVC参数传递时,解决get请求时中文乱码的问题

    问题描述: 使用SpringMVC参数传递时, 遇到get请求中文信息时,页面应答会显示中文乱码. 解决办法: 一,  我们需要把request.getParameter(“参数名”)获取到的字符串先 ...

  3. SpringMVC参数传递方案

    SpringMVC参数传递方案 登录 @PostMapping("/login") @ResponseBody public Map login(String username, ...

  4. HttpServletRequest&HttpServletResponse对象

    HttpServletRequest&HttpServletResponse对象不是由我们来创建的,而是由tomcat服务器创建,那么我们就可以直接来使用这两个 对象 A: HttpServl ...

  5. springmvc通过HttpServletRequest进行参数传递

    @RequestMapping("/itemEdit") public String itemEdit(HttpServletRequest request, Model mode ...

  6. 8.SpringMVC参数传递

    页面参数传递到controller, 可被同名(与页面标签上的name名对应)的参数接收,用request设值,页面再取出来. 注意乱码解决办法: ①如果是get提交,则在tomcat的server. ...

  7. SpringMvc参数传递中乱码问题

    问题描述: 当传递中文参数到controller类时,无乱是get方式还是post方式都出现乱码 解决: 1.保证所有的页面编码都是utf-8,包括jsp页面,浏览器编码设置和eclipse的编码设置 ...

  8. 02 http,servlet,servletconfig,HttpServletRequest ,HttpServletResponse

    Http协议 协议:双方在交互.通讯的时候, 遵守的一种规范.规则.http协议:针对网络上的客户端 与 服务器端在执行http请求的时候,遵守的一种规范. 其实就是规定了客户端在访问服务器端的时候, ...

  9. springMvc参数传递的方法

    package cn.edu.hj.controller; import java.util.Map; import javax.servlet.http.HttpServletRequest; im ...

随机推荐

  1. java各种jar的下载地址和源码下载地址

    1.jboss http://jbossmarshalling.jboss.org/downloads2.netty https://netty.io/downloads.html3.spring h ...

  2. 移动端H5开发自适应技巧

    移动端H5开发,必要要做到自适应各种分辨率的手机,下面由我为大家大致说一下,需要3步走 第一:head标签中添加: <meta name="viewport" content ...

  3. 第十九篇 jQuery初步学习

    jQuery 初步学习   jQuery可以理解为是一种脚本,需要到网上下载,它是一个文件,后缀当然是js的文件,它里面封装了很多函数方法,我们直接调用即可,就比方说,我们用JS,写一个显示与隐藏,通 ...

  4. leetcode240 搜索二维矩阵 II

    题目: 编写一个高效的算法来搜索 m x n 矩阵 matrix 中的一个目标值 target.该矩阵具有以下特性: 每行的元素从左到右升序排列. 每列的元素从上到下升序排列. 示例: 现有矩阵 ma ...

  5. Linux上安装postgres 10.5

    由于接触了华为的elk大数据平台,里面封装的是postgres ,就想着安装一下,熟悉一下postgres数据. 安装包下载:https://www.postgresql.org/ftp/source ...

  6. init container

    init container与应用容器在本质上是一样的, 但它们是仅运行一次就结束的任务, 并且必须在成功执行完成后, 系统才能继续执行下一个容器, 可以用在例如应用容器启动前做一些初始化工作,当in ...

  7. 抄来的,占个位儿【百度架构师是怎样搭建MySQL分布式集群】

    1.准备集群搭建环境 使用6台虚拟机来搭建MySQL分布式集群,相应的实验环境与对应的MySQL节点之间的对应关系如下图所示:     管理节点(MGM):这类节点的作用是管理MySQLCluster ...

  8. 【hdu 6067】Big Integer

    题意 给你一个 \((k-1)\times (n+1)\) 的 \(01\) 矩阵 \(g\),求满足下列条件的 \(k(k\le 10)\) 进制整数的数量: 1. 不超过 \(n\) 位且数的最高 ...

  9. Gym - 101915D Largest Group 最大团

    给你一个二分图 问你最大团为多大 解一:状压DP 解二:二分图最大匹配 二分图的最大团=补图的最大独立集 二分图最大独立集=二分图定点个数-最大匹配 //Hungary #include<bit ...

  10. Highcharts基本名词解释

    1.Highcharts基本组成: 2.名词解释 lang 语言文字对象 所有Highcharts文字相关的设置 chart 图表 图表区.图形区和通用图表配置选项 colors 颜色 图表数据列颜色 ...