Servelt在JavaEE开发中,占据着举足轻重的作用,起到了连接程序和服务器的重要功能。为何称其为规范呢?它规范了那些东西呢?对于Servlet对象又该如何认识它,了解它呢?
我们先来看一张图片:
这是一张对于我们JavaWeb项目运行流程的简化图,这里边出现了浏览器,服务器,项目程序,数据库四个实体,在这四个实体中间出现了http协议,Servlet规范,JDBC规范三个规则。JDBC前边介绍过,是由sun制定,各种数据库厂商实现,JAVA开发程序员调用的,在数据库厂商和Java程序员中间起到了规范的作用,需要两方都去遵守。而http协议则是由W3C制定的协议,需要浏览器厂商和服务器厂商来实现。而13规范之一Servlet则是由Sun制定,我们Java程序员来实现的,所以说是非常重要的。有了Servlet这套规范,我们的将我们编写的程序部署到Tomcat,weblogic,JBoss等服务器中,因为我们有这套规范约束着呢!下边我们来看一下Servlet的相关知识。
一,Servlet是什么?
简单来说Servlet就是满足我们Servlet规范的“服务器端的小Java程序”。
/** * 需要我们实现J2ee中的Servlet接口(规范) * @author Administrator */ public class ServletExample implements Servlet { //在构造方法执行结束之后,对象创建完毕,init方法马上执行 //只执行一次。这个方法我们称作初始化方法。 //该方法调用的时候Servlet对象刚刚创建完毕,相当于人一生开始的受教育 @Override public void init(ServletConfig arg0) throws ServletException { } //这是一个Servlet对象的核心业务方法。我们主要把业务编写到这个方法中,用户请求一次,执行一次。 //相当于人受完教育后进行工作为人民服务 @Override public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException { } //当服务器容器关闭的时候,或者长时间没有用户再去访问这个Servlet //Servlet对象所占用的内存即将被释放,释放之前会由Tomcat容器自动调用该方法。 //该方法在Servlet对象的内存被回收之前执行。 //该方法执行的时候Servlet对象还没有被销毁。 //该方法也是只执行一次。相当于人一辈子的结束。 @Override public void destroy() { } //下边两个是关于Servlet信息的方法 @Override public ServletConfig getServletConfig() { return null; } @Override public String getServletInfo() { return null; } }
当然在Servlet+Jsp开发时,都是做的B/S开发,在JavaEE.Servlet.Http包下的HttpServlet已经实现了Servlet接口,我们只需要继承HttpServlet,根据我们页面传输的方式重写里边的doPost或者doGet方法,就可以直接写我们的业务程序了。是非常方便的。
二,Servlet的生命周期:
这里需要我们注意的是:Servlet对象,在服务器中是在“单实例多线程环境下”运行的,所以会存在线程安全的问题。
三,讲了Servlet是什么,生命周期,最后我们看一下Servlet的创建本质过程:
首先说一下,每使用一个Servlet时,我们需要在web.xml中进行相关的配置:
<!-- 配置servlet --> <servlet> <servlet-name></servlet-name><!-- 上下关联的名字 --> <servlet-class></servlet-class><!-- servlet类的真实路径 --> </servlet> <servlet-mapping> <servlet-name></servlet-name><!-- 上下关联的名字 --> <url-pattern></url-pattern><!-- servelt的访问路径 --> </servlet-mapping>
创建过程需要按照它的生命周期来看:
1,创建:通过用户的请求路径,解析web.xml文件,获取Servlet的完整类名,通过反射进行实例化对应的Servlet对象:
Class c = Class.forName(“Servlet类全名”);
Servlet servlet = (Servlet)c.newInstance();
2,创建后进行初始化,调用init方法
servlet.init(config); //初始化方法,对象第一次被创建之后调用。只执行一次。(初始化时刻)
3,用户调用时,执行service方法:
servlet.service(request,response); //核心业务方法,用户访问一次必然执行一次。(执行多次)
……..
4,销毁:
servlet.destroy();
正好对应着上边的生命周期,这里想说的就是Servlet也是通过反射机制进行的创建,明白我们底层的创建过程。
Servlet在开发中起着举足轻重的作用,明白它的原理对我们以后的开发学习非常有用。