5-Servlet详解4
一、Http请求类型
HTTP 请求有很多类型,常用的有四种:
- GET 读取
- POST 保存
- PUT 修改
- DELETE 删除
二、Servlet 层次结构
以上笔记我们自定义的 Servlet 类均继承了 Servlet
,其实我们只需要关注 service
方法即可,其他方法我们很少用到,那么为了节省空间,我们怎么样能不 overwrite 其他方法呢?这里需要引出 Servlet
的层次结构
Servlet 的层次结构
Servlet–> GenericServlet–>HttpServlet
GenericServlet
实现了 Servlet
接口的同时,为他的子类屏蔽了不常用的方法,子类只需要重写 service 方法即可。
HttpServlet
继承 GenericServlet
,根据请求类型进行分发处理,GET 进入 doGET 方法,POST 进入 doPOST 方法。
开发者自定义的 Servlet 类只需要继承 HttpServlet 即可,重写 doGET 与doPOST方法。
三、自实现GenericeServlet 与 HttpServlet
基于第二节理论,我们自己动手山寨版一个 GenericeServlet
与 HttpServlet
-
山寨版的
GenericeServlet
–>MyGenericServlet.java
package com.sunshine.servlet; import javax.servlet.*; import java.io.IOException; /** * @author 田港 * @version 1.0 * @date 2021-03-28 16:43 */ public class MyGenericServlet implements Servlet { @Override public void init(ServletConfig servletConfig) throws ServletException { } @Override public ServletConfig getServletConfig() { return null; } @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { } @Override public String getServletInfo() { return null; } @Override public void destroy() { } }
-
山寨版的
HttpServlet
–>MyHttpServlet.java
package com.sunshine.servlet; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * @author 田港 * @version 1.0 * @date 2021-03-28 16:44 */ public class MyHttpServlet extends MyGenericServlet { @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { HttpServletRequest request = (HttpServletRequest) servletRequest; // 强转一下 HttpServletResponse response = (HttpServletResponse) servletResponse; // 强转一下 String method = request.getMethod(); // 获取请求类型 switch (method) { case "GET": this.doGet(request, response); break; case "POST": this.doPost(request, response); break; } } public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { } public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { } }
-
自定义 Servlet -->
HelloServlet.java
package com.sunshine.servlet; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * @author 田港 * @version 1.0 * @date 2021-03-28 17:12 */ @WebServlet("/hello") public class HelloServlet extends MyHttpServlet{ @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { response.getWriter().write("helloGet"); } @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException{ response.getWriter().write("HelloPost"); } }
运行项目,我们使用 Postman 或者 IDEA 自带的 HTPP Client
插件测试一下接口。以后我们基于HttpServlet
进行我们自定义的Servlet开发。