servlet02 请求和响应的三大部分、servlet的原理
1 HTTP协议
1.1 什么是http协议
超文本传输协议
就是 W3C 指定的规范
规定了浏览器和服务器怎么通信以及通信的数据格式

1.2 怎么通信
建立连接
发送请求
返回响应
断开连接
2 请求数据和响应数据 的数据格式
3 开发者的工作
1 package web; 2 3 import java.io.IOException; 4 import java.io.PrintWriter; 5 import java.text.SimpleDateFormat; 6 import java.util.Date; 7 import java.util.Enumeration; 8 9 import javax.servlet.ServletException; 10 import javax.servlet.http.HttpServlet; 11 import javax.servlet.http.HttpServletRequest; 12 import javax.servlet.http.HttpServletResponse; 13 14 /** 15 * 请求数据和响应数据 的数据格式 16 * 1 请求数据 17 * 请求行 : 请求的基础信息 18 * 消息头 : 业务数据的描述 19 * 实体内容 : 具体的业务数据 20 * 2 相应数据 21 * 状态行 : 响应的基础信息 22 * 消息头 : 业务数据的描述 23 * 实体内容 : 具体的业务数据 24 * 25 * 对于开发者而言需要做些什么 26 * 1 不需要开发者做的 27 * 浏览器和服务器通信(即:建立连接和打包/发送数据)的过程已经由他们实现了 28 * 请求数据的请求行和消息头都由浏览器实现了 29 * 响应数据的状态行和大部分消息头都由服务器实现了 30 * 2 需要开发者做的 31 * 请求及响应的业务数据由开发者提供(其实对数据业务的逻辑处理对于一个开发者而言是最重要的) 32 * 使用 request 处理请求数据, 使用 response 处理响应数据 33 * @author Administrator 34 * 35 */ 36 public class Work extends HttpServlet { 37 38 protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { 39 // 1 请求数据 -->> 通过 request 实例操作请求(request实例是服务器的通信组件根据需要自动创建的,传入的形参 req 就是一个request 的实例) 40 // 1.1 请求行 -->> 由浏览器的通信组件实现 41 System.out.println("请求方式:" + req.getMethod()); 42 System.out.println("访问路径:" + req.getServletPath()); 43 System.out.println("协议类型:" + req.getProtocol()); 44 // 1.2 消息头 -->> 由浏览器的通信组件实现 45 // > 消息头的内容是按照 key-value 的形式进行存储的 46 // public Enumeration<String> getHeaderNames(); 47 // 该方法可以返回请求实例 request 的头部信息的名字,返回值是一个迭代器 (Enumeration是更加古老的迭代器) 48 Enumeration<String> e = req.getHeaderNames(); 49 while(e.hasMoreElements()) { // 利用迭代器模式获取头部信息的 key 值 (JDBC中获取结果集时也是利用的迭代器模式) 50 String key = e.nextElement(); // 获取下一个 (开始时是在第一个前面) 51 String value = req.getHeader(key); // 获取到 key 值后再通过 request 的方法获取 value 值 52 System.out.println(key + " -->> " + value); // 打印输出 53 } 54 55 // 1.3 实体内容 -->> 由开发人员实现 56 // 本案例没有实体内容 57 58 // 2 相应数据 -->> 通过 response 实例操作请求(response实例是服务器的通信组件根据需要自动创建的,传入的形参 res 就是一个response的实例) 59 // 2.1 状态行 -->> 由服务器的通信组件实现 60 // 服务器会自动填写 61 // 2.2 消息头 -->> 大部分有服务器实现,只有格式部分由开发人员实现 62 res.setContentType("text/html;charset=utf-8"); // 设置格式(只需要设置这一个,其它的是服务器自动填写的) 63 // 2.3 实体内容 -- 由开发人员实现 64 Date date = new Date(); 65 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 66 String now = sdf.format(date); 67 68 PrintWriter out = res.getWriter(); 69 out.println("<p>三少你好,现在的日期是:"+now+"</P>"); 70 } 71 }
4 注册案例


5 servlet原理

浙公网安备 33010602011771号