Servlet入门
我们都知道网页有静态和动态之分。静态的只能看看,而动态可以实现客户端和服务器的交互,比如登录的功能,我们输入用户名和密码后提交到服务器,服务器会处理这些信息,如果正确的话则进入主页。若不正确,则给出提示信息。
Servlet是sun公司提供的一门用于开发动态web资源的技术。按照这套规范写出来的Servlet可以放置到web应用中在Servlet容器中运行.
Servlet的继承结构
Servlet------接口
–GenericServlet------抽象类----只有其中的service方法是抽象方法
–HttpServlet------类(在GenericServlet类的基础上对HTTP协议进行了优化,并且实现了其中的service抽象方法,在其中判断了请求的请求方式,并根据请求方式的不同分别调用不同的doXXX()方法)
–自己的servlet
ServletRequest
–HttpServletRequest
ServletResponse
–HttpServletResponse
实现Servlet的三种方式
方式一:编写一个类去实现Servlet接口(必须重写Servlet接口里面所有的抽象方法)
方式二:编写一个类去继承GenericServlet抽象类(重写生命周期的service方法(抽象方法))实现这个Service方法在其中写处理请求的代码
方式三:编写一个类去继承HttpServlet抽象类(没有抽象方法!根据页面的提交方式决定重写doGet或者doPost方法)
Servlet的调用过程
(1)在浏览器输入地址,浏览器先去查找hosts文件,将主机名翻译为ip地址,如果找不到就再去查询dns服务器将主机名翻译成ip地址。
(2)浏览器根据ip地址和端口号访问服务器,组织http请求信息发送给服务器。
(3)服务器收到请求后首先根据Host请求头判断当前访问的是哪台虚拟主机。
(4)服务器根据http请求头中的请求URI判断当前访问的是哪个web应用。
(5)服务器根据http请求头中的请求URI判断当前访问的是web应用中的哪个web资源。
(6)检查web应用的web.xml文件,如果根据路径找到具体的servlet处理类的全路径名交给该servlet处理,如果找不到就交给缺省servlet处理。
(7)这个过程中浏览器只知道自己发出来http请求,不久就收到了http响应,浏览器不知道也不关心服务器内部是如何处理的。浏览器和服务器之间的关系是非常单纯的,只有HTTP协议。
(8)解析请求、封装RequestResponse对象、创建Servlet、调用Service方法都是服务器自动进行的,开发人员只需要写好Servlet配置进容器中即可,无需操心具体的底层实现
servlet的生命周期
Servlet第一次被访问到时创建对象,创建出来后立即执行init方法执行初始化的操作。
从此以后该对象一直驻留在内存中为后续的对这个Servlet的请求进行服务。
在存活期间,每次对Servlet 的调用都会导致Service方法的执行,根据Http请求方式,调用service()方法中对应的doGet()或doPost()方法,并将响应结果返回。
直到服务器关闭或web应用移除出容器时,随着web应用的销毁Servlet对象销毁掉,在销毁之前调用destory方法执行善后工作。