我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第n篇文章,点击查看活动详情
1. Servlet 简介
Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
通俗的讲,servlet是运行在web服务器如tomcat这样应用服务器上的一段程序,他可以响应http协议的请求,并且实现用户自己的逻辑,最终将结果返回到用户的客户端(浏览器)。
2. Servlet 生命周期与对应方法
-
初始化阶段——init() 在 Servlet 的整个生命周期内,init() 方法只被调用一次,有可能是在服务器启动时加载,也有可能是第一次请求过来时加载。
-
运行阶段——service() Servlet 生命周期中最核心的阶段。在该阶段中,Servlet 容器会为当前的请求创建一个 ServletRequest 对象和一个 ServletResponse 对象(它们分别代表 HTTP 请求和 HTTP 响应),并将这两个对象作为参数传递给 Servlet 的 service() 方法。service() 方法从 ServletRequest 对象中获得用户的详细请求信息并处理该请求,通过 ServletResponse 对象生成响应结果。
-
销毁阶段——destroy() 当服务器停止时,Servlet 容器需要回收 Servlet 对象所占用的内存,在回收之前,会自动调用该对象的 destroy() 方法做好回收内存前的准备,辟如关闭后台线程。和 init() 方法类似,destroy() 方法也只会被调用一次。
3. HttpServlet
我们真正使用的更多是HttpServlet接口,HttpServlet接口实现了SevletConfig和Servlet两个接口。
在应用的时候,我们一般需要重写HttpServlet接口实现类的doGet()或者doPost()等方法,在调用这些方法时,需要传入HttpServletRequest与HttpServletResponse两个参数。
@WebServlet(name = "annotation",urlPatterns = "/*")
public class AnnotationServlet extends HttpServlet {
@Override
protected void doGet(
HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
PrintWriter writer = resp.getWriter();
writer.print("this is servlet html");
writer.flush();
writer.close();
}
}
doGet()或者doPost()主要是通过重写父类的service()方法来实现具体的请求。
4. ServletConfig
public interface ServletConfig {
//用于获取Servlet名,web.xml中定义的servlet-name public
String getServletName();
//获取应用本身(非常重要)
public ServletContext getServletContext();
//获取init-param中的配置参数
public String getInitParameter(String name);
//获取配置的所有init-param名字集合
public Enumeration<String> getInitParameterNames();
}
ServletConfig 提供了解析并提取xml配置文件的方法,另外提供了getServletContext()方法来获取Servlet的上下文,每个Servlet只有一个上下文,不同的Servlet可以通过其进行通信。