《Servlet 介绍 以及Servlet生命周期(详细)》由会员分享,可在线阅读,更多相关《Servlet 介绍 以及Servlet生命周期(详细)(17页珍藏版)》请在金锄头文库上搜索。
1、 Servlet 介绍 以及 Servlet 生命周期(详细) 收藏 关键字: servlet 生命周期在上一篇文档里提到了 CGI 和 Servelt 的对比,并介绍了在 JAVA 编写的应用程序 Servlet 在 服务器上运行主要就是解决了 CGI 进程处理占资源效率高的问题。 Servlet 只是一个名词,具体的解释就是使用 JAVA 编写的一个应用程序,在服务器上运行, 处理请求的信息,并且将处理后的结果回发的客户端。 对于所有的来自于客户端的请求,这段程序即 Servlet 只需要创建一次实例,因此它节省了 大量的内存。Servlet 在初始化后即停驻在内存中,因此每次做出请求时无
2、需重新加载。 具体来看看 Tomcat 容器即 Servlet 容器到底是如何管理 Servlet 的,它的生命周期到底是如 何运行的,其中是如何与 Tomcat 容器实现交互,主要大家认真理解下面的分析,基本上理 解 Servlet 生命周期也是没有问题的。 一Tomcat 是如何加载 Servlet 的(Servlet 的初始化) 还是以 Simon 本人配置的环境举例 找到 urlC:Program FilesApache Software FoundationTomcat 6.0webappsmyappWEB- INF/url下的 web.xml 这个配置文件实际上起到的最直接的作用就
3、是管理 Servlet. 在其中先加上两个 和web.xml 继续第一次测试 Servlet 的配置时的内容,复制替换即可,加的部分用红色标 识 view plaincopy to clipboardprint?102030405060708090100 110120130140150 01. 02. 05. 06. 07.My web application 08. 09. A application for test! 10. 11. 12. ServletDemo 13. servletDemo 14. 15. 16. 0 17. 18. initial 19. 10000 20. 21
4、. servletTest 22. MyServlet 23. 24. 25. 26. servletTest 27. /servletpage 28. 29. 30. 31. servletDemo 32. /t238servlet 33. 34. 新添的一个 Servlet ServletDemo.java 也应该先编译好,然后放到 urlC:Program FilesApache Software FoundationTomcat 6.0webappsmyappWEB-INFclasses/url目录下,此时这个目录应该有 ServletDemo.class 和 MyServlet.cl
5、ass 两个类 文件。 ServletDemo.java view plaincopy to clipboardprint?102030405060708090100 110120130140150 01.import javax.servlet.*; 02. 03.import javax.servlet.http.*; 04.import java.io.*; 05.import java.util.*; 06./* 07.*author : Simon lv 08. 演示 Servlet 的生命周期 09. 继承 HttpServlet 10. ServletDemo 11.*/ 12.
6、public class ServletDemo 13. extends HttpServlet 14. /定义好将回发客户端页面的 MIME 类型,HTML 格式的网页 15. private static final String CONTENT_TYPE = “text/html; charset=GBK“; 16. /计数器 17. int count; 18. /* 19. * init 初始化方法第一次加载只会初始化一次一旦调用即说明了已经创建了 ServeltDemo 的实例,此后这个实例 20. * /将一直停留在 Tomcat 分配的一块内存中,下次有客户端的请求,就不用重复
7、的实 例化 21. * ServletConfig config 参数用来传递 Servlet 在 web.xml 中的配置信息自动封装信息 22. */ 23. public void init(ServletConfig config) throws ServletException 24. super.init(config); 25. 26. /得到配置信息中 initial 参数的值 27. String initial = config.getInitParameter(“initial“); 28. try 29. /转化为数字即计数器 30. count = Integer.p
8、arseInt(initial); 31. catch(NumberFormatException e) 32. count =0; 33. 34. /输出初始化信息 35. System.out.println(“ServletDemo 中的记数器 Servlet 已经初始化成功!“); 36. 37. 38. /* 39. * doGet 处理 40. */ 41. public void doGet(HttpServletRequest request, HttpServletResponse response) throws 42. ServletException, IOExcept
9、ion 43. response.setContentType(CONTENT_TYPE); 44. PrintWriter out = response.getWriter(); 45. out.println(“); 46. out.println(“LifeServletDemo“); 47. out.println(“); 48. count+; 49. out.println(“自从加载后(读取参数化后)“); 50. out.println(“ServletDemo 已经被访问过了“); 51. out.println(count+“ 次“); 52. out.println(“)
10、; 53. out.println(“); 54. out.close(); 55. 56. System.out.println(“ServletDemo 中的的 doGet 方法被执行一次“); 57. 58. 59. /doPost()方法 60. public void doPost(HttpServletRequest request, HttpServletResponse response) throws 61. ServletException, IOException 62. doGet(request, response); 63. 64. 65. /清除资源 66. pu
11、blic void destroy() 67. System.out.println(“ServletDemo 实例资源已经释放!“); 68. 69. 二启动 Tomcat 服务 urlC:Program FilesApache Software FoundationTomcat 6.0bin tomcat6.exe/url 注意红色圈起来的部分 图片 1 见附件 这句话的输出即证明了 在 MyServlet 中的 init 方法被调用了一次! MyServlet.java 中的相关代码: view plaincopy to clipboardprint?01./初始化方法第一次加载只会初始
12、化一次 02. 03. public void init(ServletConfig config) throws ServletException 04. super.init(config); 05. String initial = config.getInitParameter(“initial“); 06. try 07. count = Integer.parseInt(initial); 08. catch(NumberFormatException e) 09. count =0; 10. 11. System.out.println(“MyServlet 中的记数器 Servlet 已经初始化成功!“); 12. 13. 但是我在 MyServlet.java 和上面新加的 ServletDemo.java 中都存在 init()方法,但是为什么 仅仅 MyServlet.java 中的方法被调用了呢?原因就在于在 web.xml 中,指定了 Tomcat 一启 动就初始化的实例 view plaincopy to clipboardprint? 01. 02. 0 03. 04. initial 05. 10000 0