Servlet简介
介绍
- 课外小知识:没有注解前,Spring是通过xml文件实现依赖注入、配置等功能的
- Servlet是一个用来处理服务端请求和响应的组件
- 它是JavaEE的规范之一,也就是一个Java接口,由Web服务器负责运行,也就是说Tomcat服务器也就是Servlet容器
快速入门
-
实现Servlet接口即可使用它来处理请求并响应
-
使用:Servlet接口的五个方法,顾名思义,无需多言
@WebServlet("/dish") public class ServletDemo implements Servlet { // 按照配置初始化 void init(ServletConfig servletConfig) { } // 通过读取xml文件或注解等获得配置信息(如数据库连接信息等) public ServletConfig getServletConfig() { return null; } // 处理请求并响应,业务逻辑 public void service(ServletRequest servletRequest, ServletResponse servletResponse) { System.out.println("Hello"); } // 提供关于Servlet的简短描述如版本等或者用来调试 public String getServletInfo() { return ""; } public void destroy() { } }
再深一点(
-
在实际开发时,我们为了简化开发专注于业务逻辑,往往通过继承HttpServlet来处理请求并响应
-
HttpServlet已经实现了Servlet接口,并实现了service()方法,源码如下
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 = req.getDateHeader("If-Modified-Since"); if (ifModifiedSince < lastModified) { 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); } }
-
而我们只需要重写doGet()、doPost()等方法即可
@WebServlet("/demo") public class ServletDemo extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //TODO GET 请求方式处理逻辑 System.out.println("get..."); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //TODO Post 请求方式处理逻辑 System.out.println("post..."); } }
参考文章:都2023年了,Servlet还有必要学习吗?一文带你快速了解Servlet_servlet用得多吗-优快云博客