SpringMVC参数传递 HttpServletRequest,HttpServletResponse和HttpSession
SpringMVC参数传递 HttpServletRequest,HttpServletResponse和HttpSession
除了model,@RequestParam @PathVariable可以传递参数外,还有HttpServletRequest和HttpServletResponse也可以进行参数传递。
Web服务器收到一个http请求,会针对每个请求创建一个HttpServletRequest和HttpServletResponse对象,向客户端发送数据找HttpServletResponse,从客户端取数据找HttpServletRequest.
HttpServletRequest
HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器时,HTTP请求头中的所有信息都封装在这个对象中,开发人员通过这个对象的方法,可以获得客户这些信息。
主要功能:参数解析,Cookie读取,http请求字段,文件上传
1.请求行
getMethod(); 获得请求方式
getQueryString() ; 返回请求行中的参数部分。
getRequestURI(); 返回请求行中的资源名部分。
getRequestURL();返回客户端发出请求时的完整URL。
例子
@Controller
public class IndexController {
@RequestMapping(path={"/request"},method={RequestMethod.GET})
@ResponseBody
public String index(HttpServletRequest request) {
StringBuilder sb = new StringBuilder();
sb.append(request.getMethod()+"<br>");
sb.append(request.getQueryString()+"<br>");
sb.append(request.getRequestURI()+"<br>");
sb.append(request.getRequestURL()+"<br>");
return sb.toString();
}
}
- 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值
例子
@Controller
public class IndexController {
@RequestMapping("/request")
@ResponseBody
public String index(HttpServletRequest request) {
StringBuilder sb = new StringBuilder();
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) { //读取请求消息头
String name = headerNames.nextElement();
sb.append(name + ":" + request.getHeader(name) + "<br>");
}
return sb.toString();
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
请求消息头的信息就被全部打印出来了
通过这种方法来获取请求的一系列信息,比如通过user-agent来判断用户是通过手机还是电脑来登陆页面,从而可以实现相对应的跳转。
获取cookie值
@Controller
public class IndexController {
@RequestMapping("/request")
@ResponseBody
public String index(HttpServletRequest request) {
StringBuilder sb = new StringBuilder();
if(request.getCookies()!=null){
for(Cookie cookie :request.getCookies()){
sb.append("Cookie: " + cookie.getName()+" value: "+ cookie.getValue());
}
}
return sb.toString();
}
}
- 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=服务器端代码错误
@Controller
public class IndexController {
@RequestMapping("/request")
@ResponseBody
public String index(HttpServletResponse response) {
response.setStatus(404); //我们将状态设置成404
return "hello";
}
}
- 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
response.setHeader("content-type", "text/html;charset=UTF-8"); //告知浏览器使用什么码表
//告知客户端不缓存
response.setHeader("pragma", "no-cache");
response.setHeader("cache-control", "no-cache");
response.setDateHeader("expires", 0);
//添加Cookie
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()//请求重定向,让客户端去访问另一个服务器
例子
@Controller
public class IndexController {
@RequestMapping("/request")
@ResponseBody
public String index(HttpServletResponse response)throws IOException {
response.sendRedirect("/home");
return "hello"; //也可以直接 return "redirect:/home"
}
@RequestMapping("/home")
@ResponseBody
public String home(HttpServletResponse response) {
return "hahah";
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
页面输出:hahah
PS:
一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理,称之为转发 /307
一个web资源收到客户端请求后,通知浏览器去访问另外一个web资源进行处理,称之为重定向/302
SpringMVC参数传递 HttpServletRequest,HttpServletResponse和HttpSession的更多相关文章
- The code of method _jspService(HttpServletRequest, HttpServletResponse) is exceeding the 65535 bytes limit
如果你是通过搜索来到本文的,相信你应该是遇到了如下的错误 The code of method _jspService(HttpServletRequest, HttpServletResponse) ...
- 使用SpringMVC参数传递时,解决get请求时中文乱码的问题
问题描述: 使用SpringMVC参数传递时, 遇到get请求中文信息时,页面应答会显示中文乱码. 解决办法: 一, 我们需要把request.getParameter(“参数名”)获取到的字符串先 ...
- SpringMVC参数传递方案
SpringMVC参数传递方案 登录 @PostMapping("/login") @ResponseBody public Map login(String username, ...
- HttpServletRequest&HttpServletResponse对象
HttpServletRequest&HttpServletResponse对象不是由我们来创建的,而是由tomcat服务器创建,那么我们就可以直接来使用这两个 对象 A: HttpServl ...
- springmvc通过HttpServletRequest进行参数传递
@RequestMapping("/itemEdit") public String itemEdit(HttpServletRequest request, Model mode ...
- 8.SpringMVC参数传递
页面参数传递到controller, 可被同名(与页面标签上的name名对应)的参数接收,用request设值,页面再取出来. 注意乱码解决办法: ①如果是get提交,则在tomcat的server. ...
- SpringMvc参数传递中乱码问题
问题描述: 当传递中文参数到controller类时,无乱是get方式还是post方式都出现乱码 解决: 1.保证所有的页面编码都是utf-8,包括jsp页面,浏览器编码设置和eclipse的编码设置 ...
- 02 http,servlet,servletconfig,HttpServletRequest ,HttpServletResponse
Http协议 协议:双方在交互.通讯的时候, 遵守的一种规范.规则.http协议:针对网络上的客户端 与 服务器端在执行http请求的时候,遵守的一种规范. 其实就是规定了客户端在访问服务器端的时候, ...
- springMvc参数传递的方法
package cn.edu.hj.controller; import java.util.Map; import javax.servlet.http.HttpServletRequest; im ...
随机推荐
- 修改公司VS_UCOS工程BUG调试过程说明
说明:公司里的工程中,使用VS_UCOS来调试应用程序.业务逻辑.方法是嵌入式和VS分别建一个工程,把底层驱动部分分别添加各自需要的源文件,头文件使用同一个.也就是嵌入式的驱动函数名和参数和VS的函数 ...
- Scala学习二——控制结构和函数
一.if表达式有值 val s=if(x>0) 1 else -1,相当于Java中x>0?1:-1(不过不拿呢个在?:中插入语句),而且Scala中可以用混合类型(如if (x>0 ...
- RBAC(基于角色的访问控制)用户权限管理数据库设计
RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联.简单地说,一个用户拥有若干角色,每一个角色拥有若干权限.这样,就构造成“用户-角色- ...
- electron localStorage的bug
在更新 electron 后有可能会读不到 localStorage 里的数据 推测是 localStorage 写在 Chromium 内核里,更新 electron 同时会更新 Chromium, ...
- 使用 java 创建你的第一个区块链(第二部分)
本系列教程的目的是帮助您了解如何开发区块链技术. 在这第二个教程中,我们将: 创建一个简单的钱包: 使用我们的区块链发送已签名的交易: 感觉更酷. 以上这些将使我们拥有自己的加密货币! 从上一个教程开 ...
- 数据绘图工具之Matplotlib
一.安装:绘图和可视化 pip install matplotlib 我们已经下好了anaconda 包含了绘图工具包 直接导入即可 import matplotlib.pyplotlib as pl ...
- JS常用函数原理的实现
本文针对目前常见的面试题,实现了相应方法的核心原理,部分边界细节未处理.后续也会持续更新,希望对你有所帮助. 1.实现一个call函数 // 思路:将要改变this指向的方法挂到目标this上执行并返 ...
- python、第七篇:ORM框架SQLAlchemy
一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取 ...
- centso 7 Keepalived 配置脚本
#!/bin/bash #This is keepalived bashshell. #MASTER/BACKUP yum install -y openssl openssl-devel keepa ...
- TDD明白了,ATDD测试到底是什么?
随着敏捷开发的蓬勃发展.遍地开花,TDD(Test Drive Development测试驱动开发)的概念已经深入软件研发从业者的心中. TDD讲究的是:“测试在先.编码在后”.有别于以往的“先编码. ...