一、Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
Servlet继承体系:Servlet(接口)---> GenericServlet(抽象类) ---> HttpServlet(抽象类)
二、Servlet接口:
package javax.servlet;
import java.io.IOException;
public interface Servlet {
void init(ServletConfig var1) throws ServletException;
ServletConfig getServletConfig();
void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;
String getServletInfo();
void destroy();
}
Servlet中的生命周期方法:
1. 被创建:执行init方法,只执行一次
Servlet什么时候被创建?
默认情况下,第一次被访问时,Servlet被创建。
Servlet的init方法,只执行一次,说明一个Servlet在内存中只存在一个对象,Servlet是单例的
多个用户同时访问时,可能存在线程安全问题。
解决:尽量不要在Servlet中定义成员变量。即使定义了成员变量,也不要对修改值
2. 提供服务:执行service方法,执行多次
每次访问Servlet时,Service方法都会被调用一次。
3. 被销毁:执行destroy方法,只执行一次
Servlet被销毁时执行。服务器关闭时,Servlet被销毁
只有服务器正常关闭时,才会执行destroy方法。
destroy方法在Servlet被销毁之前执行,一般用于释放资源
三、GenericServlet抽象类:
实现了Servlet, ServletConfig, Serializable多个接口,将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象方法。将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可。
四、HttpServlet抽象类:
继承了GeneriServlet类,对HTTP协议进行了简单的封装。
HttpServlet的响应流程:web端向Servlet发出http请求 --> Servlet容器解析请求,并将请求信息封装到HttpRequest对象里,同时创建HttpResponse对象 --> Servlet容器将两个对象作为参数调用HttpServlet的service方法 --> service方法通过web端请求数据的方式调用相对应的doXxx()方法。
HttpServlet的使用方法:
只需要继承HttpServlet重写对应的doXxx()方法。(通常只用到了doPost()与doGet方法)
@WebServlet("/servletDemo") //配置虚拟路径
public class ServletDemo extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet...");
System.out.println(req);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("dePost...");
}
}
五、虚拟路径的配置
urlpartten:Servlet访问路径(注释法)
一个Servlet可以定义多个访问路径 : @WebServlet({"/d4","/dd4","/ddd4"})
路径定义规则:
1. /xxx:路径匹配
2. /xxx/xxx:多层路径,目录结构
3. *.do:扩展名匹配