Servlets 是 J2EE 中的一个概念。我感觉他是 J2EE 规范中比较底层的东西,兼容 J2EE 规范的框架,最终都必需符合 Servlets 的接口规范,比如将 Servlets API 封装整合成更易用、更强大的上层接口。它类似于 WSGI,提供了一个应用程序(你的业务代码)与 Web 容器(如 Tomcat,Websphere)间交互的方式。
一个 Servlets 需要实现 3 个函数,这 3 个函数都由 Web 容器去调用,而不是业务代码自己调用:
init()
:Web 容器启动时,会且仅会调用一次,一般做一些资源初始化service()
:每个 HTTP 请求到达 Web 容器时,Web 容器会创建一个线程去执行这段代码destroy()
:Servlets 生命周期结束时(比如 Web 容器停止、reload 配置),会且仅会调用一次,可以用来做清洁工作,如断开数据库连接,缓存写入磁盘等
示例如下:
package example;
import javax.servlet.*;
import java.io.IOException;
import java.io.PrintWriter;
public class HelloServlet implements Servlet {
private ServletConfig servletConfig;
public void init(ServletConfig servletConfig) throws ServletException {
this.servletConfig = servletConfig;
}
public ServletConfig getServletConfig() {
return servletConfig;
}
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
servletResponse.setContentType( "text/html" );
PrintWriter out = servletResponse.getWriter();
out.println( "<html><head>" );
out.println( "<title>A Sample Servlet!</title>" );
out.println( "</head>" );
out.println( "<body>" );
out.println( "<h1>Hello, World!</h1>" );
out.println( "</body></html>" );
out.close();
}
public String getServletInfo() {
return "Hello Servlet";
}
public void destroy() { }
}
还有一个更上层的 Servlet 类,叫 HttpServlet
,多了一些 doGet()
, DoPost()
函数。