servlet原理及生命周期

来源:互联网 发布:mysql执行多个sql文件 编辑:程序博客网 时间:2024/05/14 23:27

        首先servlet是一个客户端连接服务端后台的一个载体,通过servlet对象,我们可以完成整个从客户发送请求到后台处理数据,最后将重新将反馈结果返回给用户的过程。

不管任何事物都有自己的生命周期,servlet也不例外,他的整个生命周期的开始起源于客户端第一个反问后台的请求,当用户发送请求后,servlet会被服务器创建,并执行init()方法,该方法在整个周期仅仅执行一次,并且需要强调的一点就是,servlet是属于单线程的,当多个客户端请求同时访问同一个servlet的时候就会出现数据同步问题,我们前一阵子就出现过这个问题,我们的soap远程接口就是走的servlet,里面需要调用到数据库的信息,所以我们把dao的引用对象放在了成员对象这个位置,时常造成了接口自动关闭的情况,所以这个问题一定需要注意,那就是成员变量是整个servlet所共享的,而同时servlet又是属于单线程的,因此当我们去调用了dao的对象时,这个dao也是一个单线程的存在,我们的解决方法就是将引用对象dao放在了方法里面,或者每次去请求dao的时候都会new一个新的dao,这样我们的下一版接口就没有在出现过这样的现象。

         说到了init方法之后,最重要的就是service这个方法,在每次的请求都会执行一次这个方法,最后当服务器关闭的时候会先执行destory方法,结束整个servlet的周期。

         一般我们都是自己编写一个类去继承servlet这接口 重写他的方法,最后在配置文件中配置他的映射,当服务器启动的时候我们访问映射的url,就可以执行自己的servlet,他的整个原理和流程是这样的:

        首先第一步:当我们输入了url之后,服务器会先在web.xml中去查找有没有对应的映射存在。

        然后下一步:如果没有找到映射,一般都会出现404的页面,找到了之后,他会根据这个映射再去找对应的servlet对象的全限定类名,基本现在的框架都是使用这种配置文件的方式来做的,提高了程序的灵活性和降低了耦合度,因为在java中,当我得到了一个对象的全限定名之后,就可以通过class forname将对象class加载进内存,然后通过获得他的构造方法得到这个对象,再通过method得到对象的全部方法,最后可以使用invok来执行这个对象的具体方法。

       最后我们自己的servlet就可以被执行了。我们所要做的事情很非常简单,无非就是创建一个类继承servlet,重写方法,并在web.xml配置自己创建这个类的全路径,其他的服务器都会帮我们完成。


原创粉丝点击