JAVA-EE设计模式的适配器设计模式改造servlet------计算机网络经典

用户发出一次请求就会执行以下操作
Servlet通过反射机制被tomcat创建对象
再它自己调用自己的init方法(对象已经存在了)
再调用service方法,只要用户发出一次请求,就调用一次service方法
这个对象是假单例,我们没有权限去创建这个对象,但是这个对象的构造方法不是私有化的
init初始化,service服务
destroy方法也是只执行一次,在tomcat销毁对象之前调用
destroy执行时,servlet对象仍然存在(对象仍未被销毁)
我们就可以在destroy方法内执行如关闭流,关闭数据库连接等一系列操作
构造方法,init方法,destroy方法执行一次,service方法发送几次请求就执行几次
程序员手动提供了有参数的构造方法,会导致实例化异常,没有无参数构造方法
为什么不要写构造方法代替init,因为init方法更安全,构造方法有概率导致错误
servlet规范有要求,不建议编写构造方法,因为容易导致对象无法实例化,所以有存在的必要
使用最多的是service方法,这个使用是最多的,init和destroy方法使用次数都较少
通常在资源没有关闭的时候,抓紧时间关闭,还有没保存的,抓紧时间保存
我们编写一个类直接实现servlet接口的缺点
我们只需要service方法,大部分方法不需要
我们需要使用适配器模式
适配器模式,让我们不再直接实现接口,而是继承一个实现接口的公共类
实现了精简代码,避免类的成员方法过于繁杂的缺点
类似于我们不再将手机直接接到220V的高压电上,而是通过手机充电器转接的方式
编写一个GenericServlet类,这个类是一个抽象类,有一个抽象方法service
因为此方法必定被重写,GenericServlet实现Servlet接口,GenericServlet是一个适配器,以后编写的所有Servlet类继承它
并重写service方法
用户发出一次请求就会执行以下操作
Servlet通过反射机制被tomcat创建对象
再它自己调用自己的init方法(对象已经存在了)
再调用service方法,只要用户发出一次请求,就调用一次service方法
这个对象是假单例,我们没有权限去创建这个对象,但是这个对象的构造方法不是私有化的
init初始化,service服务
destroy方法也是只执行一次,在tomcat销毁对象之前调用
destroy执行时,servlet对象仍然存在(对象仍未被销毁)
我们就可以在destroy方法内执行如关闭流,关闭数据库连接等一系列操作
构造方法,init方法,destroy方法执行一次,service方法发送几次请求就执行几次
程序员手动提供了有参数的构造方法,会导致实例化异常,没有无参数构造方法
为什么不要写构造方法代替init,因为init方法更安全,构造方法有概率导致错误
servlet规范有要求,不建议编写构造方法,因为容易导致对象无法实例化,所以有存在的必要
使用最多的是service方法,这个使用是最多的,init和destroy方法使用次数都较少
通常在资源没有关闭的时候,抓紧时间关闭,还有没保存的,抓紧时间保存
我们编写一个类直接实现servlet接口的缺点
我们只需要service方法,大部分方法不需要
我们需要使用适配器模式
适配器模式,让我们不再直接实现接口,而是继承一个实现接口的公共类
实现了精简代码,避免类的成员方法过于繁杂的缺点
类似于我们不再将手机直接接到220V的高压电上,而是通过手机充电器转接的方式
编写一个GenericServlet类,这个类是一个抽象类,有一个抽象方法service
因为此方法必定被重写,GenericServlet实现Servlet接口,GenericServlet是一个适配器,以后编写的所有Servlet类继承它
并重写service方法
package com.bjpowernode.javaweb.servlet;

import jakarta.servlet.*;

import java.io.IOException;

//编写一个标准通用的servlet,后续的servlet类继承它就好,作为适配器存在
public abstract class GenericServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public abstract void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException;

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}
package com.bjpowernode.javaweb.servlet;

import jakarta.servlet.*;

import java.io.IOException;

//编写一个标准通用的servlet,后续的servlet类继承它就好,作为适配器存在
public abstract class GenericServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }

    @Override
    public abstract void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException;

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}
package com.bjpowernode.javaweb.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;

import java.io.IOException;

public class LoginServlet extends GenericServlet
{
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("正在登录");
    }
}

package com.bjpowernode.javaweb.servlet;

import jakarta.servlet.ServletException;
import jakarta.servlet.ServletRequest;
import jakarta.servlet.ServletResponse;

import java.io.IOException;

public class LoginServlet extends GenericServlet
{
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("正在登录");
    }
}
package com.bjpowernode.javaweb.servlet;

import jakarta.servlet.*;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;

public class StudentServlet 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 {
        System.out.println("Service");
        Connection connection = null;
        PreparedStatement ps = null;
        ResultSet set = null;
        servletResponse.setContentType("text/html");
        PrintWriter writer = servletResponse.getWriter();
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:13306/powernode";
            String user = "root";
            String password = "abc123";
            connection = DriverManager.getConnection(url,user,password);
            String sql = "select id,name from t_student";
            ps = connection.prepareStatement(sql);
            set = ps.executeQuery();
            while (set.next())
            {
                String id = set.getString("id");
                String name = set.getString("name");
                writer.println(id + "," + name);
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        finally {
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            if (set != null) {
                try {
                    set.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            if (ps != null) {
                try {
                    ps.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}

package com.bjpowernode.javaweb.servlet;

import jakarta.servlet.*;

import java.io.IOException;
import java.io.PrintWriter;
import java.sql.*;

public class StudentServlet 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 {
        System.out.println("Service");
        Connection connection = null;
        PreparedStatement ps = null;
        ResultSet set = null;
        servletResponse.setContentType("text/html");
        PrintWriter writer = servletResponse.getWriter();
        try
        {
            Class.forName("com.mysql.jdbc.Driver");
            String url = "jdbc:mysql://127.0.0.1:13306/powernode";
            String user = "root";
            String password = "abc123";
            connection = DriverManager.getConnection(url,user,password);
            String sql = "select id,name from t_student";
            ps = connection.prepareStatement(sql);
            set = ps.executeQuery();
            while (set.next())
            {
                String id = set.getString("id");
                String name = set.getString("name");
                writer.println(id + "," + name);
            }
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
        finally {
            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            if (set != null) {
                try {
                    set.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
            if (ps != null) {
                try {
                    ps.close();
                } catch (SQLException e) {
                    throw new RuntimeException(e);
                }
            }
        }
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>studentServlet</servlet-name>
        <servlet-class>com.bjpowernode.javaweb.servlet.StudentServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>studentServlet</servlet-name>
        <url-pattern>/servlet/student</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>com.bjpowernode.javaweb.servlet.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/LoginServlet</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>VipServlet</servlet-name>
        <servlet-class>com.bjpowernode.javaweb.servlet.VipServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>VipServlet</servlet-name>
        <url-pattern>/VipServlet</url-pattern>
    </servlet-mapping>
</web-app>

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>studentServlet</servlet-name>
        <servlet-class>com.bjpowernode.javaweb.servlet.StudentServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>studentServlet</servlet-name>
        <url-pattern>/servlet/student</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>com.bjpowernode.javaweb.servlet.LoginServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/LoginServlet</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>VipServlet</servlet-name>
        <servlet-class>com.bjpowernode.javaweb.servlet.VipServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>VipServlet</servlet-name>
        <url-pattern>/VipServlet</url-pattern>
    </servlet-mapping>
</web-app>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值