http协议以及获取其中信息的方法文档格式.docx
《http协议以及获取其中信息的方法文档格式.docx》由会员分享,可在线阅读,更多相关《http协议以及获取其中信息的方法文档格式.docx(24页珍藏版)》请在冰点文库上搜索。
servlet-name>
HelloServlet<
/servlet-name>
servlet-class>
d_servlet.HelloServlet<
/servlet-class>
/servlet>
--servlet的映射配置-->
servlet-mapping>
HelloServlet<
url-pattern>
/hello<
/url-pattern>
/servlet-mapping>
4)访问servlet
http:
8080/myweb/hello
2Http协议入门
2.1什么是http协议
http协议:
对浏览器客户端和服务器端之间数据传输的格式规范
2.2查看http协议的工具
1)使用火狐的firebug插件(右键->
firebug->
网络)
2)使用谷歌的“审查元素”
3)使用系统自带的telnet工具(远程访问工具)
a)telnetlocalhost8080访问tomcat服务器
b)ctrl+]回车可以看到回显
c)输入请求内容
GET/day09/helloHTTP/1.1
Host:
localhost:
d)回车,即可查看到服务器响应信息。
2.3http协议内容
请求(浏览器-》服务器)
User-Agent:
Mozilla/5.0(WindowsNT6.1;
WOW64;
rv:
35.0)Gecko/20100101Firefox/35.0
Accept:
text/html,application/xhtml+xml,application/xml;
q=0.9,*/*;
q=0.8
Accept-Language:
zh-cn,en-us;
q=0.8,zh;
q=0.5,en;
q=0.3
Accept-Encoding:
gzip,deflate
Connection:
keep-alive
响应(服务器-》浏览器)
HTTP/1.1200OK
Server:
Apache-Coyote/1.1
Content-Length:
24
Date:
Fri,30Jan201501:
54:
57GMT
thisishelloservlet!
3Http请求
GET/day09/helloHTTP/1.1-请求行
8080--请求头(多个key-value对象)
--一个空行
name=eric&
password=123456--(可选)实体内容
3.1请求行
GET/day09/helloHTTP/1.1
#http协议版本
http1.0:
当前浏览器客户端与服务器端建立连接之后,只能发送一次请求,一次请求之后连接关闭。
http1.1:
当前浏览器客户端与服务器端建立连接之后,可以在一次连接中发送多次请求。
(基本都使用1.1)
#请求资源
URL:
统一资源定位符。
http:
8080/day09/testImg.html。
只能定位互联网资源。
是URI的子集。
URI:
统一资源标记符。
/day09/hello。
用于标记任何资源。
可以是本地文件系统,局域网的资源(//192.168.14.10/myweb/index.html),可以是互联网。
#请求方式
常见的请求方式:
GET、POST、HEAD、TRACE、PUT、CONNECT、DELETE
常用的请求方式:
GET和POST
表单提交:
<
formaction="
提交地址"
method="
GET/POST"
>
form>
GETvsPOST区别
1)GET方式提交
a)地址栏(URI)会跟上参数数据。
以?
开头,多个参数之间以&
分割。
GET/day09/testMethod.html?
password=123456HTTP/1.1
Referer:
http:
8080/day09/testMethod.html
b)GET提交参数数据有限制,不超过1KB。
c)GET方式不适合提交敏感密码。
d)注意:
浏览器直接访问的请求,默认提交方式是GET方式
2)POST方式提交
a)参数不会跟着URI后面。
参数而是跟在请求的实体内容中。
没有?
POST/day09/testMethod.htmlHTTP/1.1
password=123456
b)POST提交的参数数据没有限制。
c)POST方式提交敏感数据。
3.2请求头
text/html,image/*--浏览器接受的数据类型
Accept-Charset:
ISO-8859-1--浏览器接受的编码格式
gzip,compress--浏览器接受的数据压缩格式
en-us,zh---浏览器接受的语言
www.it315.org:
80--(必须的)当前请求访问的目标地址(主机:
端口)
If-Modified-Since:
Tue,11Jul200018:
23:
51GMT--浏览器最后的缓存时间
//www.it315.org/index.jsp--当前请求来自于哪里
Mozilla/4.0(compatible;
MSIE5.5;
WindowsNT5.0)--浏览器类型
Cookie:
name=eric--浏览器保存的cookie信息
close/Keep-Alive--浏览器跟服务器连接状态。
close:
连接关闭keep-alive:
保持连接。
51GMT--请求发出的时间
3.3实体内容
只有POST提交的参数会放到实体内容中
3.4HttpServletRequest对象
HttpServletRequest对象作用是用于获取请求数据。
1.tomcat服务器接收到浏览器发送的请求数据,然后封装到HttpServetRequest对象
2.tomcat服务器调用doGet方法,然后把request对象传入到servlet中。
核心的API:
请求行:
request.getMethod();
请求方式
request.getRequetURI()/request.getRequetURL()请求资源
request.getProtocol()请求http协议版本
请求头:
request.getHeader("
名称"
)根据请求头获取请求值
request.getHeaderNames()获取所有的请求头名称
实体内容:
request.getInputStream()获取实体内容数据(注意:
POST方式)
案例:
publicclassRequestDemo1extendsHttpServlet{
/**
*1)tomcat服务器接收到浏览器发送的请求数据,然后封装到HttpServetRequest对象
*2)tomcat服务器调用doGet方法,然后把request对象传入到servlet中。
*/
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
/**
*3)从request对象取出请求数据。
*/
//t1(request);
//t2(request);
}
//为了接收POST方式提交的请求
@Override
protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresp)
*3.3请求的实体内容
InputStreamin=request.getInputStream();
//得到实体内容
byte[]buf=newbyte[1024];
intlen=0;
while((len=in.read(buf))!
=-1){
Stringstr=newString(buf,0,len);
System.out.println(str);
}
privatevoidt2(HttpServletRequestrequest){
*3.2请求头
Stringhost=request.getHeader("
Host"
);
//根据头名称的到头的内容
System.out.println(host);
//遍历所有请求头
Enumeration<
String>
enums=request.getHeaderNames();
//得到所有的请求头名称列表
while(enums.hasMoreElements()){//判断是否有下一个元素
StringheaderName=enums.nextElement();
//取出下一个元素
StringheaderValue=request.getHeader(headerName);
System.out.println(headerName+"
:
"
+headerValue);
privatevoidt1(HttpServletRequestrequest){
*3.1请求行格式:
(GET/ch06/ServletDemo1HTTP/1.1)
System.out.println("
请求方式:
+request.getMethod());
//请求方式
URI:
+request.getRequestURI());
//请求资源
URL:
+request.getRequestURL());
http协议版本:
+request.getProtocol());
//http协议
}
3.5service和doXX方法区别
publicclassRequestDemo2extendsHttpServlet{
/**
*注意:
tomcat服务器首先会调用servlet的service方法,然后在service方法中再根据请求方式来分别
调用对应的doXX方法
*(例如,如果是GET请求方式,在service方法中调用doGet方法)
*
*因为最常的请求方式是GET和POST,所以编写servlet程序,只需要覆盖doGet和doPost即可!
protectedvoidservice(HttpServletRequestreq,HttpServletResponseresp)
System.out.println(req.getMethod());
service方法被调用"
*该方法用于接收浏览器的Get方式提交的请求
GET方式提交"
*该方法用于接收浏览器的Post方式提交的请求
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
Post方式提交"
3.6案例-获取浏览器的类型(user-agent)
publicclassRequestDemo3extendsHttpServlet{
response.setContentType("
text/html;
charset=utf-8"
//获取请求头:
user-agent
StringuserAgent=request.getHeader("
user-agent"
System.out.println(userAgent);
//判断用户使用的浏览器类型
if(userAgent.contains("
Firefox"
)){
response.getWriter().write("
你正在使用火狐浏览器"
}elseif(userAgent.contains("
Chrome"
你正在使用谷歌浏览器"
Trident"
你正在使用IE浏览器"
}else{
地球上没有这个浏览器,建议使用火狐浏览器"
3.7传递的请求参数如何获取
GET方式:
参数放在URI后面
POST方式:
参数放在实体内容中
获取GET方式参数:
request.getQueryString();
获取POST方式参数:
request.getInputStream();
问题:
但是以上两种不通用,而且获取到的参数还需要进一步地解析。
所以可以使用统一方便的获取参数的方式:
request.getParameter("
参数名"
根据参数名获取参数值(注意,只能获取一个值的参数)
request.getParameterValue("
参数名“);
根据参数名获取参数值(可以获取多个值的参数)
request.getParameterNames();
获取所有参数名称列表
3.8请求参数编码问题
修改POST方式参数编码:
request.setCharacterEncoding("
utf-8"
修改GET方式参数编码:
手动解码:
Stringname=newString(name.getBytes("
iso-8859-1"
),"
publicclassRequestDemo4extendsHttpServlet{
*设置参数查询的编码
*该方法只能对请求实体内容的数据编码起作用。
POST提交的数据在实体内容中,所以该方法对POST方法有效!
*GET方法的参数放在URI后面,所以对GET方式无效!
request.setCharacterEncoding("
/*System.out.println("
GET方式"
//接收GET方式提交的参数
Stringvalue=request.getQueryString();
System.out.println(value);
*/
*统一方便地获取请求参数的方法
System.out.println(request.getMethod()+"
方式"
//getParameter(name):
根据参数名得到参数值(只能获取一个值的参数)
Stringname=request.getParameter("
name"
*手动重新解码(iso-8859-1字符串->
utf-8字符串)
/*if("
GET"
.equals(request.getMethod())){
name=newString(name.getBytes("
}*/
Stringpassword=request.getParameter("
password"
password=newString(password.getBytes("
System.out.println(name+"
="
+password);