HttpServletrequest 与HttpServletResponse总结汇总
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
http协议
浏览器需要URL找到服务器当中的资源,浏览器传给服务器一个请求,服务器对这个请求进行相应的处理(比如增删改查),服务器根据处理结果返回给浏览器,浏览器根据返回结果进行相应的处理(比如显示网页显示图片),那么浏览器和服务器怎么相互传输数据,数据如何解析,传输什么格式的数据需要制定好一套规则,HTTP协议就应运而生了,这是一群外国人(www)勾搭之后产生的,HTTP协议自出现以来,主要解决的就是浏览器和服务器数据交换的格式问题,所以HTTP协议定义了一套数据格式,一个http请求一般含有请求方法,请求地址,http协议版本,和header,这些header就相当于http协议提供的功能,你设置相应的header可以让服务器产生相应的行为,服务器响应中一般包含协议版本,状态码和状态码描述,和一大堆header,不同的是请求和响应所支持的header 并不一样,具体的参观相应的介绍,http与web开发的联系中有request 和response对象,使用相应的方法可以取到http请求中header内容也可以返回相应的http内容给浏览器,还有一点就是response 当中定义一大把状态码和状态描述,比如200对相应ok,404对应找不到,
由来
Web服务器收到一个http请求,会针对每个请求创建一个HttpServletRequest和HttpServletResponse对象,向客户端发送数据找HttpServletResponse,从客户端取数据找HttpServletRequest;
HTTP 协议是基于请求-响应的协议,客户端请求一个文件,服务器对该请求进行响应。HTTP 使用TCP 协议,默认使用80 端口。最初的HTTP 协议版本是HTTP/0.9,后被HTTP/1.0 替代。目前使用的版本是HTTP/1.1,
在HTTP 协议中,总是由主动建立连接、发送HTTP 请求的客户端来初始化一个事务。服务器不负责连接客户端,或创建一个到客户端的回调连接(callback connection)。
HttpServletRequest
公共接口类HttpServletRequest继承自ServletRequest.客户端浏览器发出的请求被封装成为一个HttpServletRequest对象。所有的信息包括请求的地址,请求的参数,提交的数据,上传的文件客户端的ip甚至客户端操作系统都包含在其内。
一个HTTP 请求包含以下三部分:
a.请求地址(URL)
b.请求头(Request headers)
c.实体数据(Entity body)
举例如下
POST /examples/default.jsp HTTP/1.1
Accept: text/plain; text/html
Accept-Language: en-gb
Connection: Keep-Alive
Host: localhost
User-Agent: Mozilla/4.0 (compatible; MSIE 4.01; Windows 98)
Content-Length: 33
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
lastName=Franks&firstName=Michael
每个HTTP 请求都会有一个请求方法,HTTP1.1 中支持的方法包括,GET、POST、HEAD、OPTIONS、
PUT、DELETE 和TRACE。互联网应用中最常用的是GET 和POST。
URI 指明了请求资源的地址,通常是从网站更目录开始计算的一个相对路径,因此它总是以斜线“/”开头的。URL 实际上是URI 的一种类型,请求头(header)中包含了一些关于客户端环境和请求实体(entity)的有用的信息。例如,客户端浏览器所使用的语言,请求实体信息的长度等。每个请求头使用CRLF(回车换行符,“\r\n”)分隔。注意请求头的格式:
请求头名+英文空格+请求头值
常用方法
1.获得客户机信息
getRequestURL方法返回客户端发出请求时的完整URL。
getRequestURI方法返回请求行中的资源名部分。
getQueryString 方法返回请求行中的参数部分。
getRemoteAddr方法返回发出请求的客户机的IP地址
getRemoteHost方法返回发出请求的客户机的完整主机名
getRemotePort方法返回客户机所使用的网络端口号
getLocalAddr方法返回WEB服务器的IP地址。
getLocalName方法返回WEB服务器的主机名
getMethod得到客户机请求方式
getServerPath()获取请求的文件的路径
2.获得客户机请求头
getHeader(string name)方法
getHeaders(String name)方法
getHeaderNames方法
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地址不变。方法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。
request.setCharacterEncoding("utf-8");
getReader() 获取请求体的数据流
getInputStream() 获取请求的输入流中的数据
通过输入输出流获取:getInputStream()和getReader()
在读取的时候通过流对象.read()方法读取
Eg:
StringBuffer receiveMessage = new StringBuffer();
Scanner scanner = new Scanner(request.getInputStream(), "GBK");
while (scanner.hasNext()) {
receiveMessage.append(scanner.next());
}
scanner.close();
String json =receiveMessage.toString()
JSONObject obj = new JSONObject(json);
openId = obj.get("openid").toString();
出现乱码的原因和解决
1.java程序中默认的是中文字符----unicode
2.系统会把在java程序中的unicode字符按照某种字符集编码的方式转换成字节数组,再通过浏览器输出,浏览器在输出的时候要进行解码,只有在这两种方式一样的情况下,才不会出现乱码。
注:(1)某种字符编码是用reponse对象去设置的,而且必须是在out.println之前使用,要不会出现错误,会抛找不到设置的字符编码而出错。
设置编码的两种方式:
response.setContentType("text/html;charset=utf-8");
request.setCharacterEncoding("utf-8");
(2)浏览器会把字节数组转换成字符
3.系统默认的编码方式为ISO8859-1,如果没有指定字符编码,则输出的都是乱码,而且ISO8859-1不支持中文,所以不管浏览器在解码的时候用的是什么字符集编码,在浏览器上的都是乱码。