HTTP协议+两种请求方式(get、post)+Servlet接收和处理请求

文章目录

      • HTTP协议
        • http请求
        • 两种http请求方式
          • GET方式
          • POST方式
          • GET请求和POST请求的区别
        • http响应
        • Servlet处理接收和响应请求
          • HttpServletRequest
          • HttpServletResponse

HTTP协议

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通信协议来传递数据。

http请求

1.http协议规定了客户端–服务器之间应该以何种格式来传输数据, 而当客户端连接上服务器后,向服务器按照规定格式请求某个web资源时,称之为客户端向服务器发送了一个http请求。

2.一个http请求包括: 请求行, 请求头, 请求体(可以没有)

(1)请求行

http请求方式;
请求资源名称;
http版本。
例如:post index.jsp HTTP/1.1

(2)请求头包含主机地址,以及客户端的一些环境信息,以键值对的方式进行传递

HTTP协议+两种请求方式(get、post)+Servlet接收和处理请求_第1张图片

(3)请求体: 提交表单的数据都在请求体中

post请求方式中传递给服务器的参数,请求体中的参数以键值对形式传递,多个键值对之间用&连接,服务器收到后再解析.
例如:account=123&passwd=321

两种http请求方式

GET方式

1.超链接访问,默认是GET方式;

<a href="https://www.baidu.com">百度GETa>

2.form表单提交,不指定method,默认是GET方式;

<form action="#" >form>
POST方式

form表单提交,指定method为post

<form action="#" method="post">form>
GET请求和POST请求的区别

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上, 会被浏览器的历史记录缓存,这样别人在查看历史记录时就会拿到你的账号和密码信息.

http响应

1.一个http响应代表服务器向客户端回送的数据, 包括: 响应行, 响应头, 响应体;

2.响应行

http协议版本;
用于描述服务器对请求的处理结果.
例如:HTTP/1.1(协议版本) 200(状态码) OK(状态码描述)

状态码:服务器和浏览器用于确定状态的固定数字号码

200:请求成功;
302:请求重定向;
400:语义有误,当前请求无法被服务器理解或请求参数有误;
404:请求资源不存在,通常是路径写错了或者服务器资源删除了;
500:服务器内部错误(代码异常).

3.响应头用于描述服务器的基本信息,以及数据描述;

4.响应体代表服务器向客户端浏览器回送的正文.

Servlet处理接收和响应请求

客户端向服务器发送请求时会调用service()方法,根据请求的方式调用doGet()/doPost()方法,而接收和响应请求依赖于方法中的参数

HttpServletRequest req
HttpServletResponse resp
HttpServletRequest

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

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的内容敬请期待…

你可能感兴趣的:(Javaweb,java,servlet,web,http)