- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
06 Servlet类介绍
Servlet类介绍
2.1 doGet方法和doPost方法:
Servlet中有两个比较重要的方法就是doGet()方法和doPost()方法,这两个方法都是用来传递客户信息的。当我们在浏览器输入一个地址并点击发送后,浏览器就会马上建立一个请求访问,这时Tomcat服务器就会受到请求,随后它会去寻找到我们的Web应用程序(如:myweb工程),然后myweb工程就会去找到我们制定的Servlet来接收服务,而Servlet就会询问我们究竟要调用doGet()方法还是doPost()方法,而这是由发送请求的客户端决定的。
图1:doGet和doPost方法调用流程
在浏览器对Tomcat服务器发出请求的时候会带有一个标签信息---请求头信息,请求头上会注明用户究竟要调用doGet()方法还是doPost()方法。
那么究竟是doGet()方法更好还是doPost()方法更好呢?
doGet()方法又叫做显示式数据传递,它的数据会在URL上呈现出来,它的值会跟在URL地址的后面;而doPost()方法又叫做隐藏式数据传递,它的数据就不会显示在URL上,如秘密的数据提交和一些用户登录信息它就需要使用到doPost()方法进行提交。但是需要注意的是,这两种方式所传递的数据,都会在请求头的部分被封装起来,再发送给Tomcat服务器。
2.2 Servlet的生命周期
首先,浏览器发送请求给Tomcat浏览器,然后Tomcat会确定浏览器究竟要访问一个Web工程,然后Tomcat会访问一个对象实例池(池里存放了一些对象),并在实例池中需找指定的对象,这可能出现对象被寻找到和对象未被需找到两种情况。
图2:Servlet的生命周期示意图
Tomcat服务器如果在Servlet实例池中未找到指定对象,则访问web.xml文件去寻找Servlet-class标记,并将找到的类实例化后再扔进实例池。这时,上面一条路就可以走通了,也就是指定对象被寻找到的情况。
Tomcat服务器如果在Servlet实例池中未找到指定对象,它会将对象取出,并调用对象的doGet()和doPost()方法再将返回的内容交还给Tomcat服务器,Tomcat服务器再将内容返回给浏览器。
需要注意的是,只要Tomcat服务器的服务不正常的停止,只要工程没有被重新部署,Servlet下面的这一条路就最多只会执行一次,因为整个Web工程中仅仅只允许存在一个Servlet对象的存在,这个对象只能被创建一次。所以,当实例池中没有指定的Servlet对象时,这个对象会被创建,但一旦创建了这个对象之后,Tomcat服务器就只会执行上面一条路,无限调用这个对象的doGet()和doPost()方法,而不会再创建新的Servlet对象来使用了,这样做可以大大的优化服务器运行的速度。
Servlet的生命周期由它第一次Tomcat服务器访问开始,在服务器结束或是对Web工程重新部署时关闭。
2.3 Servlet实例的两种构建方式
Servlet的构建方式有两种,一种就是我们上面流程图中所提到的方法,还有一种方法就是提前构建Servlet对象:
在实际操作两种方式之前我们要先了解三个方法destroy()、doGet()、init():
方式一:
将上面三个方法书写好后,我们就可以开始试验了,我们将工程重新部署在服务器上,用浏览器对服务器进行访问:
我们可以看到,第一次对Servlet进行访问时,Servlet对象被创建了,而之后再访问就没有再创建Servlet对象了:
而当服务正常终止或Web工程重新部署时,Servlet对象才会被销毁(需要注意的是,服务正常终止并不是指我们直接点击控制台的红色方框,而是我们需要进入Tocmat服务器的选项,点击停止服务,服务才算是正常终止,否则Servlet对象是不会调用destroy方法的):
方式二:
我们可以通过在web.xml中加入load-on-starup标签,来使Servlet对象提前加载,在标签中书写“1”表示Servlet对象将排在第一位被启动。这时Servlet对象就不再是在网页第一次被访问时被实例化了,而是当我们的服务启动时,Servlet对象就会随着服务的启动一齐被创建出来:
2.4 Servlet类详解:
由下图我们可以看到,Servlet实际上一个接口,而我们最常使用的它的实现类则是HttpServlet类,而我们可以看到的是,HttpServlet类虽然实现了Servlet的方法,同时它还增加的新的方法,这都是出于它的可扩展性来考虑的,开发者在一开始就考虑到了也许以后会出现除了Http以外的协议,那么像下面这样设计,就可以很好的为以后的设置留下后路,因为它并没有将带有协议的S
原创力文档


文档评论(0)