0
点赞
收藏
分享

微信扫一扫

HttpServlet,GenericServlet



在这里我们讲到了​​Servlet例子与注解配置​​,但是这种实现Servlet的方式每次都要实现5个方法,而对我们来说用最多的往往只是service方法,而其他方法是没用的。所以我们换一种方式来实现Servlet



我们先看一下Servlet的体系结构

HttpServlet,GenericServlet_HttpServlet

发现Servlet的实现类:GenericServlet

那我们就不实现Servlet接口了,去继承GenericServlet类看一下



HttpServlet,GenericServlet_HttpServlet_02

package com.lingaolu.servlet; import javax.servlet.*; import javax.servlet.annotation.WebServlet; import java.io.IOException; /** * @author 林高禄 * @create 2020-07-06-10:46 */ @WebServlet(value="/demo2") public class ServletDemo2 extends GenericServlet { @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { System.out.println("/demo2"); } }

 运行访问

HttpServlet,GenericServlet_HttpServlet_03

后台输出

HttpServlet,GenericServlet_Servlet_04 是不是相当方便,因为其他方法GenericServlet已经重写了,只留了一个service抽象方法,所以我们只需要重写一个方法就可以了,其他方法如果需要那就重写就行



但是还有更方便的,我们看一下GenericServlet的体系

HttpServlet,GenericServlet_GenericServlet_05

 GenericServlet有一个子类:HttpServlet



那我们就集成HttpServlet看一下


HttpServlet,GenericServlet_GenericServlet_06



发现竟然不用重写任何方法,我们就去HttpServlet看一下源码

protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String method = req.getMethod(); long lastModified; if (method.equals("GET")) { lastModified = this.getLastModified(req); if (lastModified == -1L) { this.doGet(req, resp); } else { long ifModifiedSince; try { ifModifiedSince = req.getDateHeader("If-Modified-Since"); } catch (IllegalArgumentException var9) { ifModifiedSince = -1L; } if (ifModifiedSince < lastModified / 1000L * 1000L) { this.maybeSetLastModified(resp, lastModified); this.doGet(req, resp); } else { resp.setStatus(304); } } } else if (method.equals("HEAD")) { lastModified = this.getLastModified(req); this.maybeSetLastModified(resp, lastModified); 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 { String errMsg = lStrings.getString("http.method_not_implemented"); Object[] errArgs = new Object[]{method}; errMsg = MessageFormat.format(errMsg, errArgs); resp.sendError(501, errMsg); } }


发现HttpServlet已经帮我们实现了service方法,里面对GET、POST等7中请求方式做了判断分别走不同的逻辑,那我们实际上的是需要重写这7个请求方法就可以了,实际上我们常用的就是GET和POST,我们的ServletDemo3就重写这2个方法

package com.lingaolu.servlet; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; import java.io.IOException; /** * @author 林高禄 * @create 2020-07-06-10:46 */ @WebServlet(value="/demo3") public class ServletDemo3 extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doGet(req, resp); System.out.println("doGet......"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { super.doPost(req, resp); System.out.println("doPost......"); } }




我们知道浏览器直接访问的走的get请求,所以我们启动访问一下

HttpServlet,GenericServlet_java_07



后台输出

HttpServlet,GenericServlet_ide_08



下面演示doPost请求



我用Postman演示

HttpServlet,GenericServlet_ide_09



后台输出

HttpServlet,GenericServlet_ide_10



不会使用的postman的那就自己写一个表单请求吧......




举报

相关推荐

0 条评论