一、Servlet简介:
随着互联网技术的逐步普及,以及人们对互联网要求提高,以前那种静态网页已经不再是适应,我们看到今天的网页不但有flash,vide等等,显然
以前的那种静态网页展示无法解决,为了解决这个问题,SUN公司提供了一门用于解决上述出现的问题的技术,这就是Servlet技术。
Servlet是sun公司提供的一门用于开发动态web资源的技术。
Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:
编写一个Java类,实现servlet接口。
把开发好的Java类部署到web服务器中。
二、Servlet的运行过程:
Servlet程序是由WEB服务器调用,web服务器收到客户端的Servlet访问请求后:
1.Web服务器首先检查是否已经装载并创建了该Servlet的实例对象。如果是,则直接执行第4步,否则,执行第2步。
2.装载并创建该Servlet的一个实例对象。
3.调用Servlet实例对象的init()方法。
创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用Servlet的service()方法并将请求和响应对象作为参数传递进去。
4.WEB应用程序被停止或重新启动之前,Servlet引擎(WEB服务器中调用该Servlet的类)将卸载Servlet,并在卸载之前调用Servlet的destroy()方法。
三、Servlet的生命周期:
1.说到生命周期,那么我们就不得不提一下周期的概念,那么什么是生命周期的概念呢?
生命周期定义:一件事物,什么时候生,什么时候死,以及在其生存阶段的某一时点会触发的事件,统称为该事物的生命周期。
Servlet的生命周期:
通常情况下,服务器会在Servlet第一次被调用时创建该Servlet类的实例对象(servlet出生);一旦被创建出来,该Servlet实例就会驻留在内存中,为后续请求服务;直至web容器退出,servlet实例对象才会被销毁(servlet死亡)。
在Servlet的整个生命周期内,Servlet的init方法只有在servlet被创建时被调用一次。
而对一个Servlet的每次访问请求都导致Servlet引擎调用一次servlet的service方法。对于每次访问请求,Servlet引擎都会创建一个新的HttpServletRequest请求对象和一个新的HttpServletResponse响应对象,
然后将这两个对象作为参数传递给它调用的Servlet的service()方法,service方法再根据请求方式分别调用doXXX方法。servlet被销毁前,会调用destroy() 方法。
2.Servlet接口的实现类:
我们知道,如果我们要实现Servlet接口,就必须全部实现里面的全部方法,然而里面的所有的方法并不是我们想要的,那这个时候,我们实现这个方法又有什么用呢?
所以为了解决这个问题,我们一般不会去实现该接口,而是会去继承该类的实现类,这样我们只要实现我们想要的方法就行;
2.1SUN公司提供了通常用的实现类:
Servlet接口SUN公司定义了两个默认实现类,分别为:GenericServlet、HttpServlet。
HttpServlet指能够处理HTTP请求的servlet,它在原有Servlet接口上添加了一些与HTTP协议处理方法,它比Servlet接口的功能更为强大。因此开发人员在编写Servlet时,通常应继承这个类,而避免直接去实现Servlet接口。
HttpServlet在实现Servlet接口时,覆写了service方法,该方法体内的代码会自动判断用户的请求方式,如为GET请求,则调用HttpServlet的doGet方法,如为Post请求,则调用doPost方法。因此,开发人员在编写Servlet时,
通常只需要覆写doGet或doPost方法,而不要去覆写service方法。
由于客户端是通过URL地址访问web服务器中的资源,所以Servlet程序若想被外界访问,必须把servlet程序映射到一个URL地址上,这个工作在web.xml文件中使用<servlet>元素和<servlet-mapping>元素完成。
<servlet>元素用于注册Servlet,它包含有两个主要的子元素:<servlet-name>和<servlet-class>,分别用于设置Servlet的注册名称和Servlet的完整类名。
一个<servlet-mapping>元素用于映射一个已注册的Servlet的一个对外访问路径,它包含有两个子元素:<servlet-name>和<url-pattern>,分别用于指定Servlet的注册名称和Servlet的对外访问路径。例如:
复制代码 代码如下:
<servlet>
<servlet-name>servlet3</servlet-name>
<servlet-class>cn.baidu.serlvet.Demo3Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servlet3</servlet-name>
<url-pattern>/demo3</url-pattern>
</servlet-mapping>