Servlet(Server Applet),全称Java Servlet,未有中文译文。是用Java编写的服务器端程序。其主要功能在于交互式地浏览和修改数据,生成动态Web内容。狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,通常状况下,人们将Servlet理解为后者。java
Servlet运行于支持Java的应用服务器中。从实现上讲,Servlet能够响应任何类型的请求,但绝大多数状况下Servlet只用来扩展基于HTTP协议的Web服务器。数据库
其实咱们能够将servlet想简单一点,不用考虑那么多。
它就是用Java语言编写的一套接口,介于浏览器(HTTP客户端)和数据库(HTTP服务器)之间(实际存在服务器上),用于处理HTTP请求。
代码编写好以后,还不能直接使用,须要部署到一个servlet容器(好比tomcat)。由这个容器接收请求,并分发给对应的servlet去处理,最后再由容器响应。浏览器
servlet部署在容器中,他的生命周期也是由容器管理的。须要注意的是容器启动的时候,servlet不必定被加载,servlet只在收到请求的时候才会被加载和实例化。而这以后,若是没有特殊状况(好比容器内存回收),那么servlet实例会直到服务器关闭才被销毁。tomcat
servlet能够由 javax.servlet 和 javax.servlet.http 包建立,它里面提供了五个方法:bash
咱们重点关注 一、三、5 三个方法。
init()是初始化方法,只在servlet第一次接受请求时执行一次,与之类似的是destroy()方法,只在servlet销毁时执行才执行一次,这两个方法在一个servlet实例中都只执行一次。服务器
service()方法就是处理HTTP请求的方法,每次请求的时候都会调用这个方法,这个方法能够被执行屡次。ide
这里讲解三种建立servlet的方式ui
public class ServletDemo1 implements Servlet {
//public ServletDemo1(){}
//当Servlet第一次被建立对象时执行该方法,该方法在整个生命周期中只执行一次
public void init(ServletConfig arg0) throws ServletException {
System.out.println("=======init=========");
}
//对客户端响应的方法,该方法会被执行屡次,每次请求该servlet都会执行该方法
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
System.out.println("hehe");
}
//当Servlet被销毁时执行该方法
public void destroy() {
System.out.println("******destroy**********");
}
//当中止tomcat时销毁的servlet。
public ServletConfig getServletConfig() {
return null;
}
public String getServletInfo() {
return null;
}
}
复制代码
这种方法比较少用spa
public class ServletDemo2 extends GenericServlet {
@Override
public void service(ServletRequest arg0, ServletResponse arg1)
throws ServletException, IOException {
System.out.println("heihei");
}
}
复制代码
最经常使用的方法code
public class ServletDemo3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("haha");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("ee");
doGet(req,resp);
}
}
复制代码
关于HttpServlet、GenericServlet 和 Servlet 的关系是这样的:
GenericServlet 是 Servlet 的一个子类抽象类,对其中的 init() 和 destroy() 提供了默认实现,能够直接调用 ServletConfig 中的方法。继承这个类必须重写service()方法。
HttpServlet 也是一个抽象类,它进一步继承并封装了 GenericServlet,因为这个类还扩展了HTTP的内容,所以还须要传入HttpServletRequest 和 HttpServletResponse两个参数。
这里须要了解的是,JSP也是HttpServlet的扩展,只不过是使用了HTML的书写格式,在其中加入Java代码。也就是说JSP也是一个servlet。