一、课程回顾
web入门
(1)web服务软件作用:把本地资源共享给外部访问
(2)tomcat服务器基本操作
启动:%tomcat%/bin/startup.bat
关闭:%tomcat%/bin/shutdown.bat
访问tomcat主页:
http://localhost:8080
(3)web应用目录结构
|--WebRoot 根目录
|--静态资源(html+css+javascript+images+xml) 可以直接被浏览器访问到的
|--WEB-INF
|--classes 存放class字节码文件
|--lib 存放jar包文件
Web.xml web应用的配置文件,配置servlet
(4)Servlet技术:用java语言开发动态资源的技术
开发一个Servlet程序的步骤:
1) 创建一个java类,继承HttpServlet类
2) 重写HttpServlet类的doGet方法
3) 把写好的servlet程序交给tomcat服务器运行!!!
A、 把编译好的servlet的class文件拷贝到tomcat的一个web应用中。(web应用的WEB-INF/classes目录下)
B、 在当前web应用的web.xml文件中配置servlet
<!—servlet配置-->
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>gz.itcast.HelloServlet</servlet-class>
</servlet>
<!—servlet的映射配置-->
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
4) 访问servlet
http://localhost:8080/myweb/hello
二、http协议入门
2.1什么是http协议
http协议:对浏览器客户端和服务器端之间数据传输的格式规范
/*
tcp/ip协议:关注的是客户端与服务器之间数据是否传输成功
http协议:是在tcp/ip协议之前封装的一层协议。关注的是数据传输的格式是否规范
*/
2.2查看http协议的工具
(1)使用火狐的firebug插件,右键->firebug->网络
(2)使用谷歌的“审查元素”
(3)使用系统自带的telnet工具(远程访问工具)
A、telnet localhost8080 访问tomcat服务器
B、ctrl+] 回车 可以看到回显
C、输入请求内容
GET /day08_web/hello HTTP/1.1
Host:localhost:8080
D、 回车,即可查看到服务器相应信息
2.3http协议内容
请求(浏览器--à服务器)
GET /day08_web/hello HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:54.0) Gecko/20100101Firefox/54.0
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
响应(服务器--à浏览器)
HTTP/1.1 200
Content-Type: text/html;charset=utf-8
Content-Length: 100
Date: Fri, 14 Jul 2017 11:45:35 GMT
三、http请求
GET /day08_web/hello HTTP/1.1 请求行
Host: localhost:8080 请求头(多个key-value对象)
User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:54.0) Gecko/20100101Firefox/54.0
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Connection: keep-alive
Upgrade-Insecure-Requests: 1
-----一个空行
Name=eric&password=123456 (可选)实体内容
3.1请求行
GET/day08_web/hello HTTP/1.1
#http 协议版本
http1.0:当前浏览器客户端与服务器端建立连接之后,只能发送一次请求,一次请求之后连接关闭
http1.1:当前浏览器客户端与服务器端建立连接之后,可以在一次连接中发送多次请求。(基本都使用1.1)
#请求资源
URL:统一资源定位符 http://localhost:8080/day08_web/testImg.html只能定位互联网资源,是URI的子集
URI:统一资源标记符/day08_web/hello 用于标记任何资源。可以是本地文件系统,局域网的资源,可以是互联网
#请求方式
常见的请求方式:GET、POST、HEAD、TRACE、PUT、CONNECT、DELETE
常用的请求方式:GET和POST
表单提交:
<form action=”提交地址” method=”GET/POST”>
<form>
GET vs POST区别
(1)GET方式提交
1)地址栏(URI)会跟上参数数据,以?开头,多个参数之间以&分割
GET /day08_web/testMethod.html?name=123&password=133 HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1;rv:54.0) Gecko/20100101 Firefox/54.0
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Referer:http://localhost:8080/day08_web/testMethod.html
Connection: keep-alive
Upgrade-Insecure-Requests: 1
2)GET提交参数数据有限制,不超过1kb
3)GET方式不适合提交敏感密码
4)注意:浏览器直接访问的请求,默认提交方式是GET方式
(2)POST方式提交
1)参数不会跟在URI后面。参数而是跟在请求的实体内容中,没有?开头,多个参数之间以&分割
POST /day08_web/testMethod.html HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1;rv:54.0) Gecko/20100101 Firefox/54.0
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate
Content-Type:application/x-www-form-urlencoded
Content-Length: 21
Referer:http://localhost:8080/day08_web/testMethod.html
Connection: keep-alive
Upgrade-Insecure-Requests: 1
name=123&password=345 实体
2)POST提交的参数数据没有限制
3)POST方式提交敏感数据
3.2请求头
Host: localhost:8080 (必须的)当前请求访问的目标地址(主机:端口)
User-Agent: Mozilla/5.0 (Windows NT 6.1;rv:54.0) Gecko/20100101 Firefox/54.0 浏览器类型
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 浏览器可以接收的数据类型
Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3 浏览器接收的语言
Accept-Encoding: gzip, deflate 浏览器接受的数据压缩格式
Referer: http://localhost:8080/day08_web/testMethod.html 当前请求来自于哪里
Connection: keep-alive 浏览器根服务器连接状态 close:连接关闭keep-alive保持连接
发生变化了
Accept-Charset:ISO-8859-1 浏览器接受的编码格式
If-Modified-Since: Fri, 14 Jul 201713:37:23 GMT 浏览器最后的缓存时间
Cookie:name=eric 浏览器保存的cookie信息
Date: Fri, 14 Jul 2017 13:37:23 GMT 请求发出时间
3.3实体内容
只有POST提交的参数会放到实体内容中
3.4HttpServletRequest对象
HttpServletRequest对象作用是用于获取请求数据
核心的API:
请求行:
request.getMethod(); //请求方式
request.getRequestURI(); / request.getRequestURL(); //请求资源
request.getProtocol(); //请求http协议版本
请求头:
request.getHeader(“名称”); //根据请求头获取请求值
request.getHeaderNames(); //获取所有的请求头名称
实体内容:
request.getInputStream(); //获取实体内容数据
3.5 传递的请求参数如何获取
GET方式:参数放在URI后面
POST方式:参数放在实体内容中
获取GET方式参数:
request.getQueryString();
获取POST方式参数
request.getInputStream();
问题:但是以上两种不通用,而且获取到的参数还需要进一步地解析,所以选择使用同一方便的获取参数的方式:
核心的API:
request.getParameter(“参数名”);根据参数名获取参数值(注意:只能获取一个值的参数)
request.getParameterValue(“参数名”);根据参数名获取参数值(可以获取多个值的参数)
request.getParameterNames();获取所有参数名称列表
3.6 请求参数编码问题
修改POST方式编码:
request.setCharacterEncoding(“utf-8”);
修改GET方式参数编码
手动解码:Stringname = new String(name.getBytes(“iso-8859-1”),”utf-8”);
备注:经过测试,发现,GET方式不需要设置,但,POST方式必须要设置编码格式
四、Http响应
HTTP/1.1 200 OK 响应行
Content-Type: text/html;charset=utf-8 编码格式
Content-Length: 100 响应头
Date: Fri, 14 Jul 2017 11:45:35 GMT
一个空行
This is hello servlet!!! 实体内容
4.1响应行
#Http协议版本
#状态码:服务器处理请求的结果(状态)
100----199 表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理
200----299 百世成功接收请求并已完成整个处理过程,常用200
300----399 为完成请求,客户需进一步细化请求。例如,请求的资源已经移动一个新地址,常用302/307、和304
400----499 客户端的请求有错误,常用404
500----599 服务器端出现错误,常用500
常见的状态:
200:表示请求处理完成并完美返回
302:表示请求需要进一步细化
404:表示客户访问的资源找不到
500:表示服务器的资源发送错误。(服务器内部错误)
#状态描述
4.2常见的响应头
Bdpagetype: 1
Bdqid: 0x844282240006eb64
Bduserid: 0
Cache-Control: private
Connection: Keep-Alive
Content-Encoding: gzip 表示服务器发送给浏览器的数据压缩类型
Content-Type: text/html; charset=utf-8 表示服务器发送给浏览器的数据类型及内容编码
Cxy_all:baidu+a547653150c69b197f6473ac164b604d
Date: Sat, 15 Jul 2017 11:54:12 GMT
Expires: Sat, 15 Jul 2017 11:54:06 GMT
Server: BWS/1.1 表示服务器的类型
Set-Cookie: BDSVRTM=0; path=/ 表示服务器发送给浏览器的cookie信息(会话管理用到)
BD_HOME=0; path=/
H_PS_PSSID=1422_21108_18560_20930; path=/;domain=.baidu.com
Strict-Transport-Security: max-age=172800
Vary: Accept-Encoding
X-Powered-By: HPHP
X-Ua-Compatible: IE=Edge,chrome=1
Transfer-Encoding: chunked
Location:http://www.it315.org/index.jsp 表示重定向的地址,该头和302的状态码一起使
用
Content-Length: 100 表示服务器发送给浏览器的数据长度
Content-Language:zh-cn 表示服务器支持的语言
Last-Modified:Tue,11 jul 2000 18:23:51GMT 表示服务器资源的最后修改时间
Refresh:1; url=http://www.it315.org 表示定时刷新
Content-Disposition:attachment;filename=aaa.zip 表示告诉浏览器以下载方式打开资源(下载文件时用到)
Expires:-1
Cache-Control:no-cache
Pragma:no-cache 表示通知浏览器不进行缓存
Connection:close/Keep-Alive 表示服务器和浏览器的连接状态。Close关闭连接 keep-alive保存连接
4.3HttpServletResponse对象
HttpServletResponse对象修改响应信息:
响应行:
response.setStatus() 设置状态码
响应头:
response.setHeader(“name”,”value”) 设置响应头
实体内容:
response.getWriter().write();发送字符实体内容
response.getOutputStream().write() 发送字节实体内容
4.4案例一 请求重定向(Location)
response.setStatus(302);
response.setHeader("location","/day08_web/testImg.html");
response.sendRedirect("/day08_web/testImg.html");
4.5案例二 定时刷新(refresh)
response.setHeader("refresh","3;url=/day08_web/testImg.html");//每隔3秒跳转到指定页面
response.setHeader("refresh","1");//每隔1s刷新次页面
4.6案例三 Content-Type 作用
response.setContentType("text/html;charset=utf-8");//服务器发送给浏览器的数据类型和内容编码
五、总结:
http协议:浏览器和服务器之间数据传输的格式规范
5.1http请求:
格式:
请求行:
请求头
空行
实体内容(POST提交的数据在实体内容中)
重点:使用HttpServletRequest对象:获取请求数据
5.2http响应
格式:
响应行
响应头
空行
实体内容(浏览器看到的内容)
重点:使用HttpServletResponse对象:设置响应数据