1、引入适配器

  • [x] 我们编写service方法,其他大部分情况下是不需要使用的,代码很丑陋

    2、适配器设计模式Adapter

    2.1 实例

  • [x] 手机连直接插到220V的电压下,手机就报废了,找一个充电器,这个充电器就是一个适配器。手机连接适配器,适配器连接220V的电压,这样问题就解决了

    2.2 方法

  • [x] 编写一个GenericServlet类,这个类是一个抽象类,其中有一个抽象方法service

  • GenericServlet实现Servlet接口
  • GenericServlet是一个是适配器
  • 以后编写所有的Servlet类继承GenericServlet,重写service方法即可 ```java package servlet;

import jakarta.servlet.*;

import java.io.IOException;

/**

  • @Author: 小雷学长
  • @Date: 2022/3/17 - 19:47
  • @Version: 1.8 */

/**

  • 编写一个标准通用的Servlet,起名:GenericServlet
  • 以后所有的Servlet类都不要直接实现Servlet接口了
  • 以后所有的Servlet类都要继承GenericServlet类
  • GenericServlet 就是一个适配器 */ public abstract class GenericServlet implements Servlet { @Override public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override public ServletConfig getServletConfig() {

    1. return null;

    }

    /**

    • 抽象方法,这个最常用,所以要求子类必须实现service方法
    • @param servletRequest
    • @param servletResponse
    • @throws ServletException
    • @throws IOException */ @Override public abstract void service(ServletRequest servletRequest, ServletResponse servletResponse)
      1. throws ServletException, IOException;
  1. @Override
  2. public String getServletInfo() {
  3. return null;
  4. }
  5. @Override
  6. public void destroy() {
  7. }

}

  1. ```java
  2. package servlet;
  3. import jakarta.servlet.ServletException;
  4. import jakarta.servlet.ServletRequest;
  5. import jakarta.servlet.ServletResponse;
  6. import java.io.IOException;
  7. /**
  8. * @Author: 小雷学长
  9. * @Date: 2022/3/17 - 21:03
  10. * @Version: 1.8
  11. */
  12. public class VipServlet extends GenericServlet {
  13. @Override
  14. public void service(ServletRequest servletRequest, ServletResponse servletResponse)
  15. throws ServletException, IOException {
  16. System.out.println("VIP");
  17. }
  18. }
  1. package servlet;
  2. import jakarta.servlet.ServletException;
  3. import jakarta.servlet.ServletRequest;
  4. import jakarta.servlet.ServletResponse;
  5. import java.io.IOException;
  6. public class LoginServlet extends GenericServlet{
  7. @Override
  8. public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
  9. System.out.println("Login");
  10. }
  11. }
  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  5. version="4.0">
  6. <servlet>
  7. <servlet-name>loginServlet</servlet-name>
  8. <servlet-class>servlet.LoginServlet</servlet-class>
  9. </servlet>
  10. <servlet-mapping>
  11. <servlet-name>loginServlet</servlet-name>
  12. <url-pattern>/login</url-pattern>
  13. </servlet-mapping>
  14. <servlet>
  15. <servlet-name>VIPServlet</servlet-name>
  16. <servlet-class>servlet.VipServlet</servlet-class>
  17. </servlet>
  18. <servlet-mapping>
  19. <servlet-name>VIPServlet</servlet-name>
  20. <url-pattern>/VIP</url-pattern>
  21. </servlet-mapping>
  22. <servlet>
  23. <servlet-name>aservlet</servlet-name>
  24. <servlet-class>servlet.AServlet</servlet-class>
  25. <!--<load-on-startup>0</load-on-startup>-->
  26. </servlet>
  27. <servlet-mapping>
  28. <servlet-name>aservlet</servlet-name>
  29. <url-pattern>/a</url-pattern>
  30. </servlet-mapping>
  31. <servlet>
  32. <servlet-name>bservlet</servlet-name>
  33. <servlet-class>servlet.BServlet</servlet-class>
  34. <!--<load-on-startup>1</load-on-startup>-->
  35. </servlet>
  36. <servlet-mapping>
  37. <servlet-name>bservlet</servlet-name>
  38. <url-pattern>/b</url-pattern>
  39. </servlet-mapping>
  40. </web-app>

3、改造GenericServlet

3.1 关于init方法

  • 在提供了GenericServlet之后,init方法仍然会被调用
  • init方法是Tomcat服务器调用的
  • Tomcat服务器先创建了ServletConfig对象,如何调用init方法,将ServletConfig对象传给了init方法