Servlet 处理各种类型请求

1. Servlet处理各种请求

  • service:处理所有请求
  • doGet:处理GET请求
  • doPost:处理POST请求
  • doPut:处理PUT请求
  • doDelete:处理DELETE请求
  • doHead:处理HEAD请求
  • doOptions:处理OPTIONS请求
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
public class MyServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet");
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doPost");
}

@Override
protected void doDelete(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doDelete");
}

@Override
protected void doPut(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doPut");
}

@Override
protected void doHead(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doHead");
}

@Override
protected void doOptions(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doOptions");
}
}

如果你重写了service,又重写了doXxx,那么只有service会被调用

1
2
3
4
5
6
7
8
9
10
/** 只调用service */
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("service");
}

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet");
}

但是如果你在service中调用父类的service,则会发现,doXxx也会被调用。这说明,父类的service会根据请求的类型,调用对应的doXxx

1
2
3
4
5
6
7
8
9
10
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("service");
super.service(req, resp);
}

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("doGet");
}

2. 405错误:请求方式不支持

如果调用了父类的service,你又没有重写相应的doXxx,则发起请求时,就返回HTTP Status 405 – Method Not Allowed,表示服务器无法处理该请求

1
2
3
4
5
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("service");
super.service(req, resp);
}

panchaoxin wechat
关注我的公众号
支持一下