标签:
HTTP协议是HyperText Transfer Protocol的缩写,即超文本传输协议。是由w3c(万维网联盟)制定的一种应用层协议,用来定义浏览器与web服务器之间如何通信以及通信的数据格式。
因为BS架构中的通信模块就是以HTTP这个协议作为标准协议的,所以对该协议有所了解可以更好的编写程序。
HTTP协议的通信过程可以分为以下四个步骤:
在这个过程中,一次请求对应一次连接,当浏览器再次发请求给服务器时,Web服务器并不知道这就是上次发请求的客户端,这也是HTTP协议的一个特点-无状态协议。这种需要时建立连接,使用结束后立即断开连接的方式使得Web服务器可以利用有限的连接为尽可能多的客户提供服务。也正是具备了这样的特点,才使得BS结构能够承载企业级应用的大量访问。
在HTTP协议控制的数据走向中,既包括客户端发送给服务器端的请求数据也包括服务器端返回给客户端的响应信息,而具有一定规范的数据格式是保证通信标准的第一要素。借助于一些浏览器的插件或者浏览器本身内嵌的功能模块,可以实现对请求数据、响应数据的抓取,熟练掌握这些数据的主要部分,可以有利于理解BS模型中的一些处理问题的方式。通常情况下的请求数据包及响应数据包结构如图 – 14所示。
图- 14
请求数据包包含三个部分:
请求数据包常见结构如图 – 15 所示。
图- 15
响应数据包也包含三个部分:
响应数据包常见结构如图 – 16 所示。
图- 16
1.6. Servlet如何处理HTTP协议 1.6.1. 如何控制通信数据 HTTP协议在Web容器这端主要表现为通信数据的到达以及响应数据的返回。于是Web容器将这两部分数据解释为两个对象,一个是与请求数据对应的HttpServletRequest对象,一个是与响应数据对应的HttpServletResponse对象。对于Servlet来讲,主要的业务逻辑过程就是从请求对象中获取数据,经过加工后将结果附着在响应对象中发送回客户端。 1.6.2. HttpServletRequest对象 借助于HttpServletRequest对象可以实现很多操作,如读取请求行、消息头信息,取得路径信息等。使用如下代码可以实现相关功能。 01.package web; 02. 03.import java.io.IOException; 04.import java.io.PrintWriter; 05.import java.util.Arrays; 06.import java.util.Enumeration; 07. 08.import javax.servlet.ServletException; 09.import javax.servlet.http.HttpServlet; 10.import javax.servlet.http.HttpServletRequest; 11.import javax.servlet.http.HttpServletResponse; 12. 13. 14.public class RequestServlet extends HttpServlet { 15. 16. protected void service(HttpServletRequest req, HttpServletResponse resp) 17. throws ServletException, IOException { 18. Enumeration e = req.getHeaderNames (); 19. while (e.hasMoreElements ()){ 20. String headerName = e.nextElement ().toString (); 21. System.out.println (headerName+":"+req.getHeader (headerName)); 22. } 23. System.out.println (req.getMethod ()); 24. System.out.println (req.getProtocol ()); 25. System.out.println (req.getRequestURI ()); 26. System.out.println (req.getRequestURL ()); 27. System.out.println (req.getServletPath ()); 28. } 29.} 1.6.3. HttpServletResponse对象 HttpServletResponse对象最主要的作用即设置给浏览器的响应内容及浏览器的解码方式,此外设置cookie及重定向也都是响应对象的功能。这些功能对应的代码实现如下所示。 01.package web; 02. 03.import java.io.IOException; 04.import java.io.PrintWriter; 05. 06.import javax.servlet.ServletException; 07.import javax.servlet.http.HttpServlet; 08.import javax.servlet.http.HttpServletRequest; 09.import javax.servlet.http.HttpServletResponse; 10. 11. 12.public class ResponseServlet extends HttpServlet { 13. 14. protected void service(HttpServletRequest req, HttpServletResponse resp) 15. throws ServletException, IOException { 16. resp.setContentType("text/html;charset=gbk"); 17. resp.setStatus(404); 18. } 19. 20.}
标签:
原文地址:http://www.cnblogs.com/pyfreshman/p/4815023.html