Servlet
# Servlet
# xml配置
<servlet>
<servlet-name>DemoServlet</servlet-name>
<servlet-class>servlets.DemoServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DemoServlet</servlet-name>
<url-pattern>/demo</url-pattern>
</servlet-mapping>
----另一种方法是直接在Servlet的class类上添加注解,注意要加/---
@WebServlet("/edit")
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 继承关系
public abstract class GenericServlet implements Servlet,ServletConfig,Serializable{}
public abstract class HttpServlet extends javax.servlet.GenericServlet {}
public class Demo1Servlet extends HttpServlet{}
1
2
3
2
3
javax.servlet.Servlet接口:
void init(config)——初始化方法
void service(request,response)——服务方法
void destroy()——销毁方法
javax.servlet.GenericServlet抽象类:
- void service(request,response)——抽象
javax.servlet.http.HttpServlet 抽象子类:
- void service(request,response)——不是抽象的
# Servelet服务方法
String method = req.getMethod();获取请求方式
if判断,根据请求方式不同,决定去调用不同的do方法
如果定义的servlet没有实现doGet方法,但是网页发送一个get请求,那么就会调用父类HttpServlet的doGet方法,而HttpServlet.doGet()只会显示404或者405.
# Servlet生命周期
对应三个Servlet三个方法init(),service(),destroy()
Tomcat只会通过反射创建一个Servlet实例,所有的请求都是这个实例去响应。第一次请求耗时较长。
第一次请求的相应时间比较慢,因为需要实例化和初始化,但是可以提高系统启动速度。如果提高相应速度,应该设置servlet初始化时间。
通过<load-on-startup>设置servlet启动的先后顺序,如果值小0或者没有设置时,表示首次请求才会加载初始化servlet;当值≥0时,表示容器在启动时就加载初始化servlet,数字越小,启动越靠前。
servlet在容器中是单例的,线程不安全的。(多个客户端线程共享修改这个实例的变量)
编辑 (opens new window)
上次更新: 2023/12/15, 15:49:57