Servlet-继承结构

Servlet-继承结构

  • Servlet接口
  • GenericServlet抽象类:实现了Servlet接口
  • HttpServlet抽象类:继承了GenericServlet抽象类

Servlet接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package jakarta.servlet;

import java.io.IOException;

public interface Servlet {
//实例化对象后对对象进行初始化
void init(ServletConfig var1) throws ServletException;
//获取Servlet配置文件,返回一个ServletConfig对象
ServletConfig getServletConfig();
//处理用户请求的方法
void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;

String getServletInfo();

void destroy();
}


GenericServlet抽象类

在GenericServlet抽象类中,着重实现的是除service方法外的其他方法的基础配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public abstract class GenericServlet implements Servlet, ServletConfig, Serializable {	

private transient ServletConfig config;

//初始化方法
public void init(ServletConfig config) throws ServletException {
this.config = config;
this.init();
}

//初始化方法的重载
public void init() throws ServletException {
}

//这里的service仍为抽象方法
public abstract void service(ServletRequest var1, ServletResponse var2) throws ServletException, IOException;

//返回ServletConfig配置文件对象
public ServletConfig getServletConfig() {
return this.config;
}

public void destroy() {
}

}

HttpServlet抽象类

在GenericServlet抽象类中,着重实现的是service方法

在这里,一部分程序员喜欢重写service方法,另一部分习惯于重写do…方法

但这并不重要,因为在springMVC中,无需自己配置业务方法😓

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
public abstract class HttpServlet extends GenericServlet {
//这个service方法将ServletRequest、ServletResponse两个对象转为其子类对象HttpServletRequest、HttpServletResponse(父转子)
//并调用其重载的service方法
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
HttpServletRequest request;
HttpServletResponse response;
try {
request = (HttpServletRequest)req;
response = (HttpServletResponse)res;
} catch (ClassCastException var6) {
throw new ServletException(lStrings.getString("http.non_http"));
}

this.service(request, response);
}
//重载的service方法,对请求的方式进行区分,在分别调用其处理业务的方法
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String method = req.getMethod();
if (method.equals("GET")) {
this.doGet(req, resp);
} else if (method.equals("HEAD")) {
this.doHead(req, resp);
} else if (method.equals("POST")) {
this.doPost(req, resp);
} else if (method.equals("PUT")) {
this.doPut(req, resp);
} else if (method.equals("DELETE")) {
this.doDelete(req, resp);
} else if (method.equals("OPTIONS")) {
this.doOptions(req, resp);
} else if (method.equals("TRACE")) {
this.doTrace(req, resp);
} else {
resp.sendError(501, errMsg);
}
}
//默认情况下,所有service调用的do…方法都是返回“此方法不被支持”
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String msg = lStrings.getString("http.method_get_not_supported");
this.sendMethodNotAllowed(req, resp, msg);
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
String msg = lStrings.getString("http.method_post_not_supported");
this.sendMethodNotAllowed(req, resp, msg);
}

}


Servlet-继承结构
http://blog.170827.xyz/2024/04/14/Servlet-继承结构/
作者
XIAOBAI
发布于
2024年4月14日
许可协议