这几天在看headfirst servlet jsp,看到一堆的servlet、servlet,老实说很烦,虽然现在也没有人直接用servlet了,但其实搞java的除了用netty,现在大部分人其实都是在基于servlet做开发。然后呢,servlet不就是一个接口类吗?按C++讲就是一个动态库的接口标准,你写的servlet就是一个接口实现而已,或者也可以是一个库,struts2就是个实现了servlet接口的库,然后struts2又开放了自己库流程中的接口,最后开发人员就在那个接口标准下实现业务逻辑代码。拿到以前的C++程序标准来讲,这就是维护人员干的活,根本不算开发,C++服务程序开发的标准肯定是从main函数开始的,你的代码看不到main函数,那就是个维护人员。所以,C++在新的web时代根本赶不上步伐,C++没有像sun公司这样的企业来定义一整个解决方案来推广,形象的比喻就是每个C++开发者都认为自己能够造汽车发动机,并且也乐此不彼,但sun提供了汽车的发动机等基本模块,发动各种阿猫阿狗来给汽车图图颜色、做个新外形,分分钟做出C++要好几天好几个月要完成的东西。
但是呢,现在java也不行了,也不够快和简单了。
什么是Servlet:
Servlet是运行在web服务器端(web容器,如tomcat)的程序,它与Applet相对,Applet是运行在客户端的程序。
Servlet的主要作用是处理客户端的请求,并把处理结果响应给客户端。生成动态网页。
Servlet的本质:
Servlet的本质是实现了javax.servlet.Servlet接口的Java类。javax.servlet.GenericServlet实现了Servlet接口,实现了Servlet基本的特征和功能,能够接受客户端发出的请求和产生响应信息。而javax.servlet.http.HttpServlet又继承了javax.servlet.GenericServlet类,所以我们编写的Servlet继承HttpServlet即可。
它的整个过程为:(Servlet的生命周期)
客户端发送请求给服务器端(Tomcat)。(若容器还不存在Servlet的实例,则容器先加载Servlet类,然后创建一个ServletConfig对象,这里包含了Servlet的初始化配置信息。并创建一个Servlet实例,然后通过Servlet实例的init()方法初始化该实例。)
容器接收到客户端请求,创建ServletRequest和ServletResponse对象,再调用service(ServletRequest req,ServletResponse res)方法,通过servletRequest对象获得请求的信息,通过servletResponse对象生成这个请求的相应结果。然后销毁ServletRequest和ServletResponse对象。
Web终止时,servlet容器调用servlet对象的destroy()方法,然后销毁servlet,同时也销毁servlet对象相关联的servletConfig对象,释放servlet所占用的资源。
其中init()和destroy()方法在整个生命周期内只执行一次。