除了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();
页面输出:

我们还能获取请求消息头的信息
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();
请求消息头的信息就被全部打印出来了
通过这种方法来获取请求的一系列信息,比如通过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();
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);
return "hello";
可以看到页面依然正常显示
但是我们通过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);
response.addCookie(new Cookie(String name ,String value))
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";
@RequestMapping("/home")
@ResponseBody
public String home(HttpServletResponse response) {
return "hahah";
页面输出:hahah
PS:
一个web资源收到客户端请求后,通知服务器去调用另外一个web资源进行处理,称之为转发 /307
一个web资源收到客户端请求后,通知浏览器去访问另外一个web资源进行处理,称之为重定向/302
除了model,@RequestParam @PathVariable可以传递参数外,还有HttpServletRequest和HttpServletResponse也可以进行参数传递。Web服务器收到一个http请求,会针对每个请求创建一个HttpServletRequest和HttpServletResponse对象,向客户端发送数据找HttpServletResponse,从客户端取数据找Ht
@RequestMapping("/itemEdit")
public String itemEdit(HttpServletRequest request, Model model) {
//从Request中取id
String strId = request.getParameter("id");
Integer id = ...
在
Servlet API 中,定义了一个
HttpServletResponse 接口,它继承自
ServletResponse 接口。
HttpServletResponse 对象专门用来封装
HTTP 响应消息,简称
response 对象。在
Servlet API 中,定义了一个
HttpServletResponse 接口,它继承自
ServletResponse 接口。
HttpServletResponse 对象专门用来封装
HTTP 响应消息,简称
response 对象。
1.一般使用request.getParameter("xxx");从jsp表单中读取xxx对应值2.也可以不用从jsp表单获取,在url中附带参数,如:http://localhost:8080/controller/login.scaction?name=css&password=123实现:给login.scaction传两个参数:name=css,password=123
格式:http:
在创建
servlet时会覆盖service()方法,或doGet()/doPost(),这些方法都有两个参数,一个为代表请求的
request和代表响应的
response。service方法中的
response的类型是
ServletResponse,而doGet/doPost方法的
response的类型是
HttpServletResponse,
HttpServletResponse是
ServletResponse的子接口,功能和方法更加强大。
二、
response的运行流程
三、通过抓包工
1.获取请求参数
在实际开发中,经常需要获取用户提交的表单数据,例如,用户名,密码,电子邮件等,为了方便获取表单中的请求参数,在HttpServletRequest接口的父类ServletRequest中,定义了一系列获取请求参数的方法。
ServletRequest获取请求参数的方法:
使用字符流输出中文
在 Servlet API 中,定义了一个 HttpServletResponse 接口,它继承自 ServletResponse 接口。HttpServletResponse 对象专门用来封装 HTTP 响应消息,简称 response 对象。
Servlet 容器会针对每次请求创建一个 response 对象,并把它作为参数传递给 Servlet 的
ServletRequestAttributes servletRequestAttributes =(ServletRequestAttributes)RequestContextHolder.currentRequestAttributes();
//获取session
HttpSession s = servletRequestAttributes.getRequest()....
package com.sinocarbon.base.util;
import java.io.UnsupportedEncodingException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import javax.servlet.http.HttpServ...
requestrequest功能介绍获取请求头 获取请求参数 Servlet三大域对象之一 请求包含和请求转发request域方法java void setAttribute(String name, Object value):添加或替换request域属性
Object getAttribute(String name):获取request域指定名称的域属性 ...
SpringMVC获取HttpServletRequest、HttpServletResponse、HttpSession3
通过直接传入Controller层的方法中获取,框架自动传入
// 获取request response session 直接传参可自动获取
@RequestMapping(value = "/testGetRequest", produces = "application/json;charset=UTF-8")
@ResponseBody
public S