一、基本概念
在开始了解Servlet之前,我们首先要知道的是,什么是Servlet? Servlet 是运行在 Web 服务器或应用服务器上的程序,它是一个用来动态创建WEB内容的中间组件,是 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。Servlet还是一个实现类,实现了javax.servlet.Servlet接口。主要用于处理HTTP请求和生成响应。
二、创建Servlet
要创建一个Servlet程序,就必须要实现Servlet接口,一般是写一个类继承HttpServlet类,并重写里面的doGet()和doPost()方法,就能处理前端发送的GET或POST请求。
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class ServletTest extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
super.doGet(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
super.doPost(request, response);
}
}
然后在配置servlet,关于Servlet的配置有两种方式。 第一种是通过web.xml文件进行配置
<servlet>
<servlet-name>ServletTest</servlet-name>
<servlet-class>com.powernode.ServletTest</servlet-class>
</servlet>
<servlet-mapping>
<!-- 这个servlet-name必须和上面的servlet-name一致才能映射上 -->
<servlet-name>ServletTest</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
</web-app>
第二种是使用@WebServlet注解进行配置,只要写在写在类上就可以了
@WebServlet("/test")
public class ServletTest extends HttpServlet {
}
第三步就是在写具体代码了。
三、Servlet执行原理
第一步:当前端页面会向给服务器发送请求,当服务器接收到客户端浏览器的请求之后,会解析请求的路径,获取访问Servlet资源的路径。
第二步:查找web.xml文件,看是否配置了这个路径
第三步:(如果有)找到对应的servlet-class的全类名
第四步:Tomcat服务器会将字节码文件加载进内存,并创建其对象。
第五步:调用其方法。
四、Servlet的生命周期
Servlet的生命周期有加载和实例化、初始化、请求处理和销毁四个阶段
加载和实例化
加载:当Tomcat服务器首次接收到Servlet的请求时,Tomcat会将Servlet类字节码文件加载到内存中。 实例化:加载完类文字节码之后,会实例化servlet类对象。
初始化
初始化是通过init()方法来执行的,这个方法只执行一次,同时也说明Servlet在内存中只存在一个对象
@Override
public void init() throws ServletException {
super.init();
}
请求处理
每次访问Servlet时,都会调用Servlet的service()方法,然后service()方法根据请求方式调用doGet()或doPost()方法。service()方法可执行多次。
销毁
当服务器关闭时,destroy()就会执行。注意:只有服务器正常关闭时,才会执行destroy()方法,一般用于释放资源。
@Override
public void destroy() {
super.destroy();
}
以上就是Servlet的基本知识啦,有不对的请大佬在评论区指正!