Servlet学习笔记(一)

一、Servlet介绍

Servlet时有Sun公司提供用于开发动态web的一门技术,servlet本质上是一个接口,开发一个动态的web需要两步操作:

1、编写Java类。实现servlet接口

2、Java类部署到服务器中

通常我们把实现了servlet接口的java程序称之为Servlet

二、Servelt的运行过程

Servlet程序是由WEB 服务器调用,服务器收到客户端的Servlet访问请求后:

  1. web服务器首先检查是否已经装载了该servlet的实例对象,如果是,则直接执行步骤4
  2. 装载并创建该Servlet的实例对象
  3. 调用Servlet实例对象的init()方法
  4. 创建一个用于封装HTTP请求消息的HTTPServletRequestD对象和一个代表HTTP相应消息的HttpServletResponse对象,然后点用Servlet的service()方法,并请求和响应对象作为参数传递过去。
  5. Web应用程序被停止或者重新启动之前,Servlet引擎将卸载Servlet,并在卸载之前调用Servlet的destory()方法。

Servlet学习笔记(一)

三、在eclipse创建动态web项目工程,eclipse会自动创建文件目录如下

Servlet学习笔记(一)

四、具体实现运行过程

  1. 1、当用户向浏览器地址栏输入http://ip:port/helloweb/sayHello?name=zs
  2. 浏览器使用ip:port(端口号)连接服务器
  3. 2、浏览器将请求数据按照http协议打成一个数据包(请求数据包)发送给服务器请求数据包的内容包含了请求资源路径(/helloweb/sayHello?name=zs),另外,在请求数据包当中,还会包含浏览器自动生成的一些信息。
  4. 服务器创建两个对象:请求对象(Request)和响应对象(Response)
  5. 服务器解析请求数据包,将解析之后的数据存放到请求对象里面,方便servlet读取请求数据(因为servlet不用解析请求数据包,如果要解析,需要理解http协议)。
  6. 请求对象是HttpServletRequest接口的一个实现。响应对象是HttpServletResponse接口的一个实现,响应对象用于存放servlet处理的结果。
  7. 依据请求资源路径找到相应的servlet配置,通过反射创建servlet实例,然后调用其service() 方法。在调用service()方法时会将事先创建好的请求对象(request)和响应对象(response)作为参数进行传递。

  8. 在servlet内部可以通过request获得请求数据或者通过response设置响应数据。

  9. 服务器从response中获取数据,按照http协议打成一个数据包(响应数据包),发送给浏览器。
    浏览器会解析响应数据包,取出相应的数据,生成相应的界面。

五、Servlet接口实现类

 HttpServlet指能够处理HTTP请求的servlet,它在原有Servlet接口上添加了一些与HTTP协议处理方法,它比Servlet接口的功能更为强大。因此开发人员在编写Servlet时,通常应继承这个类,而避免直接去实现Servlet接口。
  HttpServlet在实现Servlet接口时,覆写了service方法,该方法体内的代码会自动判断用户的请求方式,如为GET请求,则调用HttpServlet的doGet方法,如为Post请求,则调用doPost方法。因此,开发人员在编写Servlet时,通常只需要覆写doGet或doPost方法,而不要去覆写service方法。

六、http协议通讯过程

1) 浏览器向服务器发送建立连接的请求。
2) 浏览器先将请求数据打包,向服务器发送请求。
3) 服务器处理完请求,然后将数据打包,发送给浏览器。
4) 服务器发送完数据,并闭连接。如果浏览器要向服务器再次发送请求,需要重新建立连接。也就是说,浏览器与服务器之间的连接,只能处理一次请求,然后立即关闭。这种通讯方式,可以让服务器以有限的资源为更多的客户端服务。

其中数据包结构:

1、请求数据包的结构
第一部分:请求行(数据包中的一行内容)包括三部分内容:
请求方式(get/post)  
请求资源路径(端口号之后的内容,比如/appname/servlet)
协议的类型与版本  

2、第二部分:若干消息头
消息头的样式,比如: content-type= text/html; 服务器和浏览器都会遵守这些消息头的约定。 消息头一般由服务器或者浏览器自动生成,但是也可以通过编程的方式生成
第三部分: 实体内容
如果请求方式是post方式,请求参数及值会放在这儿。如果请求方式是get方式,请求参数与值是包含在请求资源路径里面

响应数据包的结构:
第一部分:状态行
协议的类型与版本
状态码(状态码是一个数字,不同的数字代表不同的含义,比如
500: 系统错误(即程序代码有误)
404: 找不到资源(访问路径错误)
200: 正确

第二部分:若干消息头
第三部分:实体内容
服务器返回给浏览器的处理结果