1、HTTP协议属于应用层协议;
OSI七层网络模型 | TCP/IP四层概念模型 | 对应网络协议 |
---|---|---|
应用层(Application) | HTTP、TFTP、FTP、NFS、WAIS、SMTP | |
表示层(Presentation) | 应用层 | Telnet、Rlogin、SNMP、Gopher |
会话层(Session) | SMTP、DNS | |
传输层(Transport) | 传输层 | TCP、UDP |
网络层(Network) | 网络层 | IP、TCMP |
数据链路层(Data Link) | 数据链路层 | FDDI、Ethernet、Arpanet、PDN |
物理层(Physical) | IEEE 802.1A,IEEE 802.2到IEEE 802.11 |
2、超文本传输协议(HyperText Transfer Protocol),服务器传输超文本到本地浏览器的传输协议, 是互联网上应用最为流行的一种网络协议, 用于定义客户端浏览器和服务器之间交换数据的过程;
3、HTTP协议基于TCP/IP通信协议来传递数据。
1.http协议规定了客户端–服务器之间应该以何种格式来传输数据, 而当客户端连接上服务器后,向服务器按照规定格式请求某个web资源时,称之为客户端向服务器发送了一个http请求。
2.一个http请求包括: 请求行, 请求头, 请求体(可以没有)
(1)请求行
http请求方式;
请求资源名称;
http版本。
例如:post index.jsp HTTP/1.1
(2)请求头包含主机地址,以及客户端的一些环境信息,以键值对的方式进行传递
(3)请求体: 提交表单的数据都在请求体中
post请求方式中传递给服务器的参数,请求体中的参数以键值对形式传递,多个键值对之间用&连接,服务器收到后再解析.
例如:account=123&passwd=321
1.超链接访问,默认是GET方式;
<a href="https://www.baidu.com">百度GETa>
2.form表单提交,不指定method,默认是GET方式;
<form action="#" >form>
form表单提交,指定method为post
<form action="#" method="post">form>
1.GET方式主要是从服务器获取信息,而POST主要是向服务器提交信息;
2.GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变;
GET提交, 请求的数据会附在URL之后(就是把数据放置在HTTP协议头中), 以?分割URL和传输数据, 多个参数用&连接; 如果提交的数据是英文字母或数字,原文发送; 如果是空格转换为+ ; 如果是中文/其它字符,则直接将字符串用BASE64加密,像%E8%BD%AE%E5%9B%9E%E4%B9%90%E5%9B%AD,其中%xx中的xx是以16进制表示的ASCII, 例如:
https://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1&rsv_idx=1&tn=baidu&wd=%E8%BD%AE%E5%9B%9E%E4%B9%90%E5%9B%AD&fenlei=256&rsv_pq=b58d23ed00000d9f&rsv_t=8130aXzXsMgj%2F5zI77wC%2Bp%2F2meb54dF1AURjZlXWZTc%2BZGY2CRVjB0GmQiI&rqlang=cn&rsv_dl=ih_0&rsv_enter=1&rsv_sug3=1&rsv_sug1=1&rsv_sug7=001&rsv_sug2=1&rsv_btype=i&rsp=0&rsv_sug9=es_2_1&rsv_sug4=4306&rsv_sug=5
POST提交: 把提交的数据放置在HTTP包的包体中,即请求体中,因此不会在地址栏显示。
3.GET方式提交的数据大小一般受限制,而POST则没有这种限制;
首先声明:HTTP协议本身没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。
因此,这里的限制都是实际开发中存在的限制, GET方式在特定浏览器和服务器中会对URL长度进行限制, 很多时候都是因为浏览器地址栏是文本框的原因,而文本框通常是由大小限制的,因传输数据就会受到URL的长度限制;
POST由于不是通过URL传值,理论上数据不会受到限制。但实际各个WEB服务器会规定对post提交数据大小进行限制,如Apache、IIS6都有各自的配置要求.
4.安全性
(1)POST的安全性要比GET的安全性高;
(2)通过GET提交的数据,用户名和密码将明文出现在URL上, 会被浏览器的历史记录缓存,这样别人在查看历史记录时就会拿到你的账号和密码信息.
1.一个http响应代表服务器向客户端回送的数据, 包括: 响应行, 响应头, 响应体;
2.响应行
http协议版本;
用于描述服务器对请求的处理结果.
例如:HTTP/1.1(协议版本) 200(状态码) OK(状态码描述)
状态码:服务器和浏览器用于确定状态的固定数字号码
200:请求成功;
302:请求重定向;
400:语义有误,当前请求无法被服务器理解或请求参数有误;
404:请求资源不存在,通常是路径写错了或者服务器资源删除了;
500:服务器内部错误(代码异常).
3.响应头用于描述服务器的基本信息,以及数据描述;
4.响应体代表服务器向客户端浏览器回送的正文.
客户端向服务器发送请求时会调用service()方法,根据请求的方式调用doGet()/doPost()方法,而接收和响应请求依赖于方法中的参数
HttpServletRequest req
HttpServletResponse resp
1.HttpServletRequest是ServletRequest的子接口,但是它比ServletRequest多了一些针对Http协议的方法;
2.请求和响应是Web交互最基本的模式,在Servlet中,用HttpServletRequest来表示请求,封装了请求的信息,可以从中回去任何请求的信息.
3.获取客户机/服务器基本信息的常用方法
getMethod():获取客户端请求方式;
getScheme():获取请求协议;
getRemoteAddr():获取发出请求的客户端的IP地址;
getServerName():获取服务器名(ip/域名)
getServletPort():获取服务器的端口号.
4.request获取请求参数
getParameter("name"):通过请求的name获取一个String类型的值;
getParameterVAlues("name"):通过请求的name获取一个String类型的数组;
setCharacterEncoding("编码格式"):为post请求过来的数据进行编码设置,解决中文乱码问题.
HttpServletResponse是ServletResponse的子接口, Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个代表响应的HttpServletResponse对象.
使用HttpServletResponse对象实现响应,本质上从服务器向客户端响应数据,使用给的是IO流的方式.
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//设置响应内容的编码,可以同时设置Response所使用的的字符集编码和浏览器打开所用的字符集编码
resp.setContentType("text/html;charset=utf-8");
PrintWriter writer = resp.getWriter();
writer.write("响应成功!
");
}
提出问题:虽然本章我们做到了服务器对客户端响应网页内容,但是如果我们需要响应一个很复杂的页面怎么办?
回答: 这就需要我们创建一个新的页面—>jsp, 再从servlet跳转到jsp页面。servlet负责后端逻辑, jsp负责显示结果。
jsp的内容敬请期待…