@jianhua.cheng

初学者对 Servlet、JSP 及 Web 容器之间关系的理解

March 23, 2016

Servlet就是一个 Java 程序,一个Servlet应用程序经常包含一个或者多个Servlet也就是当用户发送请求,例如提交表单,那么需要一个或多个Servlet协同作用,而访问的jsp页面也是一个Servlet。当每次我们发送请求时,Servlet应用程序中的service()方法就会被触发执行一次。当初次访问一个Servlet时,init()方法会触发执行一次,之后的请求都是执行service()方法。

如果你觉得奇怪,为什么没看到过service()这个方法,那是因为我们一般用的是通过继承HttpServlet来实现Servlet,而在HttpServlet中一般的请求我们只要@override doGet()doPost()方法即可实现我们对请求的处理。而HttpServlet中的service()方法会根据请求的类型调用对应的doGet()doPost()等等方法,所以只要实现doGet()doPost()方法等等即可。

为什么说jsp也是一个Servlet呢,那是因为当我们使用Servlet/JSP容器时,例如最常用的Tomcat会将jsp文件转化成相应的一个Servlet程序,jsp页面的主体就转化成相应代码位于service()方法当中。jsp技术只是将开发变得简单,然而基本原理还是不变的,实现及其复杂的Servlet就由Tomcat这一类的容器来实现,我们只要实现jsp页面就可以了。

访问Servlet只需为地址添加映射到Servlet类即可或者是@WebServlet注解实现。

Servlet是一个接口,含有五个方法:

  • init。仅在第一次访问 Servlet 时调用,之后不再调用。
  • service。每次请求 Servlet 时,Servlet 容器都会调用这个方法。第一次调用 init,之后调用 service。这里编写 Servlet 要实现的处理代码。
  • destroy。销毁 Servlet 时,Servlet 容器就会调用这个方法。
  • getServletInfo……
  • getServletConfig……

类与接口


Jianhua Cheng

Written by Jianhua Cheng who lives and works in Shanghai. Try to build something more attractive and interesting. You can follow him on Twitter, Github