模拟Servlet实现原理

  • 需要知识

    • 配置文件
    • 反射机制

    请添加图片描述请添加图片描述

  • 创建三个角色

    • TomCat —— TomCat 类
    • Servlet ——ServLet接口
    • Web应用程序 ——BankServiceWebApp 类
      • 程序员设置的配置文件——web.properties

  • ServLet接口

package javaWeb;
/**
 * 模拟sun公司
 * 拟定servlet接口/规范
 */
public interface ServLet {
    //提供服务的方法
    void service();
}

  • BankServiceWebApp 类
package javaWeb;

public class BankServiceWebApp implements ServLet {
    @Override
    public void service(){
        System.out.println("BankService's service ");
    }
}

  • web.properties配置文件
bank=javaWeb.BankServiceWebApp
list=src.javaWeb.UserListWebApp
  • TomCat类
package javaWeb;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Properties;
import java.util.Scanner;

/**
 * 充当Tomcat的开发者
 */
public class TomCat {
    public static void main(String[] args) throws Exception {
        System.out.println("TomCat服务器启动,接收用户访问!");
        /**
         * 用户访问服务器的webapp,是提供不同的请求路径
         * 用户的请求路径不同,后台执行的servlet不同
         *
         * 现在利用键盘输入模拟用户传输的请求
         *     用户输入     启动程序
         *     bank     BankServiceWebApp
         *     list     UserListWebApp
         */
        System.out.println("请输入访问路径");
        Scanner s =new Scanner(System.in);
            //获取用户的请求路径  银行业务 用户列表
        String key =s.nextLine();
        /**
         * 将用户输入的请求路径  和  webApp程序做桥梁衔接
         *      即:当用户输入"bank" 时,服务器是如何知道启动BankServiceWebApp
         *          而不是其他的程序
         *      解决方法:
         *          web程序员会将用户输入和web程序做一个衔接,
         *          这个衔接模拟以属性配置文件、Map集合的形式存在的。
         */
        FileReader reader = new FileReader("src/javaWeb/web.properties");
        Properties pro = new Properties();
        pro.load(reader);
        //关闭流
        reader.close();
        //通过key获取value  用户列表对应的value是src\javaWeb\UserListWebApp.java
        String className = pro.getProperty(key);
        System.out.println("用户对应加载的应用名——"+className);
        /**
         * 获取类名之后,利用反射机制运行字节码文件,创建对象
         *      Class.forName方法执行的时候,会导致类加载。类加载时静态代码块会执行
         */
        Class c= Class.forName(className);
        /**
         * 创建对象,利用创建的对象执行方法
         *  此时创建的对象类型对于TomCat的开发人员是不知道的
         *  为了统一类型,所有的webApp实现了Servlet接口
         *  这样,TomCat的开发人员就知道任何webapp都实现了servlet接口
         */
        Object obj = c.newInstance();
        ServLet servlet = (ServLet) obj;
        servlet.service();

    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值