Request&Response总结
Request&Response
Request
请求对象的类视图

请求对象常用方法

获取请求路径
| 返回值 | 方法名 | 说明 |
|---|---|---|
| String | getContextPath() | 获取虚拟目录名称 |
| String | getServletPath() | 获取Servlet映射路径 |
| String | getRemoteAdd() | 获取访问者的ip地址 |
| String | getQueryString() | 获取请求的消息数据 |
| String | getRequestURI | 获取统一资源标识符 |
| StringBuffer | getRequestURL | 获取统一资源定位符 |
getQueryString,获取请求的数据,比如url问号后边的数据
URI是以一种抽象的,高层次概念定义统一资源标识,而URL则是具体的资源标识的方式
URI比URL范围大,URL是URI的一种
url?后边的请求参数,也可以叫做查询字符串 (请求动作是查询,把请求参数作为查询关键字)
获取请求头
| 返回值 | 方法名 | 说明 |
|---|---|---|
| String | getHeader | 根据请求头名称获取一个值 |
| Enumeration<String> | getHeaders | 根据请求头名称获取多个值 |
| Enumeration<String> | getHeaderNames() | 获取所有请求头数据 |
获取请求头参数
| 返回值 | 方法名 | 说明 |
|---|---|---|
| String | getParameter(String name) | 根据名称获取数据 |
| String[] | getParameterValues(String name) | 根据名称获取所有数据 |
| Enumeration<String> | getParameterNames(String name) | 获取所有名称 |
| Map<String,String[]> | getParameterMap(String name) | 获取所有参数的键值对 |
用流读取请求信息
| 返回值 | 方法名 | 说明 |
|---|---|---|
| BufferedReader | getReader | 获取字符输入流 |
| ServletInputStream | getInputStream | 获取字节输入流 |
ServletInputStream常用于获取图片,文件
请求乱码
//设置编码格式 req.setCharacterEncoding("UTF-8");
请求转发特点?
浏览器地址栏不变
域对象中的数据不丢失
负责转发的 Servlet 转发前后的响应正文会丢失 (ServletA的响应正文会丢失,由ServletB响应客户端)
由转发的目的地来响应客户端
应用场景:如果一次请求中这个servlet无法单独完成任务,这时会将这个请求转发给另一个servlet
如果这两个servlet需要共享数据,我们一般使用请求域
请求转发,不会丢失请求域数据,所以共享数据,都使用请求域
请求转发方法?
| 返回值 | 方法名 | 说明 |
|---|---|---|
| RequestDispatcher | getRequestDispatcher(String name) | 获取请求调度对象 |
| void | forward(ServletRequest req,ServletResponse resp) | 实现转发 |
Response
响应类视图
常见状态码
| 状态码 | 说明 |
|---|---|
| 200 | 成功 |
| 302 | 重定向 |
| 304 | 请求资源为改变使用缓存 |
| 400 | 请求错误,厂家爱你于请求参数错误 |
| 404 | 请求资源未找到 |
| 405 | 请求方式不支持(一般是后台只支持post请求,而发起的请求确实get请求,这时候就会提示405) |
| 500 | 服务器错误 |
状态码首位含义
| 状态码 | 说明 |
|---|---|
| 1 | 消息 |
| 2 | 成功 |
| 3 | 重定向 |
| 4 | 客户端错误 |
| 5 | 服务器错误 |
常用方法介绍

字节流响应方法
| 返回值 | 方法名 | 说明 |
|---|---|---|
| ServletOutputStream | getOutputStream | 获取响应字节输出流对象 |
| void | setContentType"text/html;charset=UTF-8") | 设置相应内容类型,解决中文乱码 |
字节流,常用于处理图片,文件
解决字节响应乱码问题
/*
项目中常用的编码格式是u8,而浏览器默认使用的编码是gbk。导致乱码!
解决方式一:修改浏览器的编码格式(不推荐,不能让用户做修改的动作)
解决方式二:通过输出流写出一个标签:<meta http-equiv='content-type' content='text/html;charset=UTF-8'>
解决方式三:response.setHeader("Content-Type","text/html;charset=UTF-8"); 指定响应头信息
解决方式四:response.setContentType("text/html;charset=UTF-8");
*/
//sos.write("<meta http-equiv='content-type' content='text/html;charset=UTF-8'>".getBytes());
//resp.setHeader("Content-Type","text/html;charset=UTF-8");
resp.setContentType("text/html;charset=UTF-8");//常用第四种,告知浏览器采用utf-8编码方式
字符流响应方法
| 返回值 | 方法名 | 说明 |
|---|---|---|
| PrintWriter | getWriter | 获取响应字符输出流对象 |
| void | setContentType("text/html;charset=UTF-8") | 设置响应类型解决乱码 |
解决字符响应乱码
//解决中文乱码
resp.setContentType("text/html;charset=UTF-8");
解决乱码总结
如果是响应解决乱码问题,一般思路就是让浏览器与代码中的编码风格保持一致(utf-8)
resp.setContentType("text/html;charset=UTF-8");如果请求中解决乱码,将gbk编码的中文信息转换为utf-8
//设置编码格式 (将浏览器默认编码gbk的中文信息,转换为utf-8的信息)
req.setCharacterEncoding("UTF-8");
设置缓存时间
缓存:
对于不经常变化的数据,我们可以设置合理缓存时间,以避免浏览器频繁请求服务器。以此来提高效率
方法:
| 返回值 | 方法名 | 说明 |
|---|---|---|
| void | setDateHeader(Stringname,long time) | 设置消息头添加缓存 |
参数1:Expires : 失效的意思 参数2:当前时间+1小时毫秒值(意思就是在1小时之后过期)
设置定时刷新
定时刷新:过了指定时间后,页面自动进行跳转
定时刷新方法
返回值 方法名 说明 void setHeader(String name,String value) 设置消息头定时刷新
请求重定向
重定向:
客户端的一次请求到达后,发现需要其他Servlet来实现功能
特点:
浏览器的地址栏会发生改变,两次请求,请求域对象中不能共享数据,可以重定向到其他服务器
实现原理:
设置响应状态码为203
resp.setStatus(302)
设置响应的资源路径,通过响应消息头location来指定
resp.setHeader("location","/路径名称")
方法:
| 返回值 | 方法名 | 说明 |
|---|---|---|
| void | sendRedire(String name) | 设置重定向 |
重定向与转发区别
重定向:
两次请求
地址栏发生变化
不可以使用request域共享数据 (既然是两次请求,那肯定不能使用请求域中共享的数据)
可以重定向到其他服务器的url
转发:
一次请求
地址栏不发生变化
可以使用request域共享数据
只能转发到自己服务器内部的url
Request&Response总结的更多相关文章
- request response
request 和 response 这两个对象是出现在service方法中.service方法是用来接收请求处理请求,完成响应的. 接受请求指的就是request对象 完成响应指的就 ...
- request \response 总结
request&response request 1.获得信息的方法 1> 获得请求首行信息的方法 *getMethod *getContextP ...
- track message forwards, avoiding request loops, and identifying the protocol capabilities of all senders along the request/response chain
https://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html The TRACE method is used to invoke a remote, ...
- Ng Http Request/response格式转换
angular作为Single Page Application推荐的交互方式当然是基于json的ajax调用.但今天要说的是当你不幸工作在一个遗留或者不可控制的服务上,而这服务是基于非json提交方 ...
- 过滤器中的chain.doFilter(request,response)
Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码.做一些业务逻辑判断等.其工作原理是,只要你在web.xml文件配置好要 ...
- 对chain.doFilter(request,response)的理解
他的作用是将请求转发给过滤器链上下一个对象.这里的“下”指的是哪里 ? 指的是下一个filter,如果没有filter那就是你请求的资源. 一般filter都是一个链,web.xml 里面配置了几个就 ...
- chain.doFilter(request,response)含义
过滤器的生命周期一般都要经过下面三个阶段: 初始化 当容器第一次加载该过滤器时,init() 方法将被调用.该类在这个方法中包含了一个指向 Filter Config 对象的引用.我们的过滤器实际上并 ...
- controlling the variance of request response times and not just worrying about maximizing queries per second
http://highscalability.com/blog/2010/11/4/facebook-at-13-million-queries-per-second-recommends-minim ...
- ZeroMQ之Request/Response (Java)
自己最开始是在cloud foundry中接触过消息服务器(nats),或者说是消息中间件,也算是初步知道了一个消息服务器对于分布式的网络系统的重要性,后来自己也曾想过在一些项目中使用它,尤其是在一些 ...
- 【转】对Django框架架构和Request/Response处理流程的分析
本文转载于疯狂的蚂蚁. 一. 处理过程的核心概念 如下图所示django的总览图,整体上把握以下django的组成: 核心在于中间件middleware,django所有的请求.返回都由中间件来完成. ...
随机推荐
- MongoDB加索引DB崩溃的问题
项目原因,最近在对MongoDB进行数据存储优化 原有问题: 日志数据量比较大,存到一张表,需要手工定时删除数据,且删除数据时间按天算 数据会定时打包到HDFS,查询时间很慢,需要优化 机器内存占 ...
- springMVC基础讲解
一.初识三层架构: 在讲解springMVC之前,先来了解一下什么是三层架构.我们的开发架构一般都是基于两种形式,一种是C/S架构(客户端/服务器),另一种是B/S架构(浏览器服务器).在javaEE ...
- IDEA的基本操作——导入导出jar包
在使用Jmeter工具测试时,有时也需要导出jar包,测试对应功能,或者自己二次开发Jmeter工具,也是需要导出jar包的.既然经常用,所以就总结了下导入导出jar包的方法. 导入jar包 先打开i ...
- Web服务器-正则表达式-整理+复习(3.1.1)
@ 目录 1.常用api 2.例子 3.正则表达式模式 关于作者 参考文章 1.常用api re.match(pattern, string, flags=0) pattern 匹配的正则表达式 st ...
- 利用302绕过http协议限制
360某处ssrf漏洞可探测内网信息(附内网6379探测脚本) http://xss.one/bug_detail.php?wybug_id=wooyun-2016-0229611
- 在python中元组与列表的区别及序列解包
一. 元组与列表的区别 元组中的数据一旦定义就不允许更改. 元组没有append().extend()和insert()等方法,无法向元组中添加元素. 元组没有remove()或pop()方法,也无法 ...
- 2020年的UWP(5)——UWP和Desktop Extension的双向交互
上一篇我们提到了怎么在Desktop Extension中等待并处理UWP端发出的request.在本篇中将描述UWP和Desktop Extension双向交互的场景,即存在从两端各自发出reque ...
- 简单的堆排序-python
AA = raw_input().strip().split(' ') A = [] ###############初始化大堆############### def fixUp(A): k = len ...
- Python朗读excel中的英文单词
安装win32com的时候出现了诸多问题,直接贴代码: 1 ''' 2 #利用python朗读excel里面的单词 3 ''' 4 5 #开始导入所需库 6 import xlrd 7 from bs ...
- c# 递归 yield关键字的用法
1.yield实现的功能 yield return: 先看下面的代码,通过yield return实现了类似用foreach遍历数组的功能,说明yield return也是用来实现迭代器的功能的. u ...