service、doGet和doPost的区别
一、Servlet的继承体系结构
servlet → 接口
↓
GenericServlet → 抽象类
↓
HttpServlet → 抽象类
- GenericServlet:将Servlet接口中其他的方法做了默认空实现。而只有service()方法没有被实现。在将来可以继承GenericServlet,实现service方法。
- HttpServlet:对Http协议的一种封装简化操作。使用时定义类继承HttpServlet,覆写doGet和doPost方法
二、作用
- doGet():处理get请求
- doPost():处理post请求
- service():处理get/post方式请求。如果servlet中同时定义了这三种方法,那么servlet会调用service方法。
package com.zhstudy.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/demo01") public class GetPostService extends HttpServlet{ @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执行了。。。。"); } }
效果图
三、注意
注意:
- 如果在覆写的service方法中调用了父类的service方法 super.service(req, resp); 则service方法处理完后,会再次根据请求方式响应的doGet和doPost方法执行。所以,一般情况下,是不在覆写的service中调用父类的service方法的,避免出现405错误
package com.zhstudy.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @WebServlet("/demo01") public class GetPostService extends HttpServlet{ @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执行了。。。。"); } }
效果图
![]()
在这里post请求就不给大家演示了,如果想查看效果,就自己在HTML的form标签中的mothed属性中添加post请求即可。