原视频地址:https://www.bilibili.com/video/BV1vb41187jH?p=36
1. 代码在每个Servlet类中都需要编写,如何封装
封装后在每一个具体的Servlet类中不写这样的代码,但是还能达到同样的效果。
HttpServlet
继承了GenericServlet
,重写了Service方法,另外提供了doPost
和doGet
方法供子类调用子类Servlet处理POST请求,重写了
HTTPServlet
中的doPost
方法,当前端传来的请求时POST请求时,HttpServlet
中的service方法调用子类重写的doPost
方法。但是当前端传来的请求错误的为GET请求时,HttpServlet
中的service方法调用HTTPServlet
中的默认的doGet
方法,返回错误信息。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// HttpServlet类的原理,下面这些代码不是官方提供的,只是为了介绍原理
public class HttpServlet extends GenericServlet {
// 重写了GenericServlet中的service方法
public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest)req;
HttpServletResponse response = (HttpServletResponse)res;
service(request, response);
}
// 供上面的service方法调用,处理HttpServletRequest,HttpServletResponse
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String method = request.getMethod();
if ("GET".equals(method)) {
doGet(request, response);
} else if ("POST".equals(method)) {
doPost(request, response);
}
}
// doGet和doPost供上面的方法调用与子类重写
public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
// 返回错误信息
.......
}
public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
// 返回错误信息
.......
}
}重点:
- 编写一个
Servlet
类应当继承HTTPServlet
,get
请求重写doGet
方法,post
请求重写doPost
方法 doGet
和doPost
方法可以等同看做main方法。
1
2
3
4
5
6
7
8// LoginServlet.java文件
public class LoginServlet extends javax.servlet.http.HttpServlet {
// 该servlet处理的是post请求,所以重写doPost方法。如果前端错误的发送了get请求,会调用HttpServlet中的默认doGet方法,在这个方法中返回错误信息。
public void doPost(HttpServletRequest request, HttpServletResponse response) {
response.getWriter.getWriter().print("login......");
}
}- 编写一个
当浏览器发送的请求方式和后台的处理方式不一致时,会出现错误,错误码405