Java 手写Tomcat
1). 创建Java项目Tomcat
2). 创建Servlet接口
public interface IServlet { public void service(); }
3). 创建Tomcat核心主类
public class Core { @SuppressWarnings("resource") public static void main(String[] args) throws Exception { // 打印初始化 System.out.println("Tomcat: Hello! I'm Tomcat, and I'm in the initialization..."); // 睡眠3秒 Thread.sleep(3000); // 初始化完成 System.out.println("Tomcat: Now, I have finished the initializaion."); // 睡眠1秒 Thread.sleep(1000); // 启动 System.out.println("Tomcat: Now I will start the Servlet."); // 读取配置文件,获取Servlet的项目路径名及类包名路径名 FileReader reader = new FileReader("./TomcatConf.txt"); // 创建缓冲读取 BufferedReader bReader = new BufferedReader(reader); // 读取路径 String path = bReader.readLine(); // 读取类名 String className = bReader.readLine(); // 关闭Reader bReader.close(); reader.close(); // 根据已读取的Servlet项目路径名及类包路径名通过URL加载器加载文件系统中的某个.class文件 File file = new File(path); // 这里读取文件系统的URL地址 URL url = file.toURI().toURL(); // 创建持有我们所部署的Web项目路径的URL类加载器,以使Tomcat之外的Web纳入Tomcat的classpath之中 URLClassLoader loader = new URLClassLoader(new URL[]{url}); // 利用反射加载类 Class<?> clazz = loader.loadClass(className); // 转换为Servlet接口执行Service操作 IServlet servlet = (IServlet) clazz.newInstance(); // 实际的Tomcat并不在这里调用Service,仅仅是在进入事件循环,在有浏览器请求时才调用Service servlet.service(); } }
4). 将Tomcat项目导出为Jar包
项目右键->Export...->Java->JAR file->Finish.
5). 再创建一个Java项目,并引入tomcat.jar
6). 创建DaoOperator
/** * 模拟数据库操作 * @author mazaiting */ public class DaoOperator { private String name; public DaoOperator(String name) { this.name = name; } public void operate() throws InterruptedException { System.out.println("I will do much work..."); Thread.sleep(3000); System.out.println(name + " DAOOperator exec succeed."); } }
7). 创建Servlet
public class MyServlet implements IServlet { @Override public void service() { System.out.println("Hello, I'm the Servlet."); System.out.println("Now let's start our web http travel."); try { Thread.sleep(3000); DaoOperator dao = new DaoOperator("MySql"); dao.operate(); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Now I will beleave the web world..");; System.out.println("Bye-bye."); } }
8). 在项目的根目录下创建TomcatConf.txt配置文件
文件内容:
E:\Java\test\MyWeb\bin com.mazaiting.MyServlet
9). 运行tomcat.jar包
10). 控制台打印

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
6月6日云栖精选夜读丨新增16条设计规约!阿里巴巴Java开发手册(详尽版)开放下载!
2018年6月,《阿里巴巴Java开发手册》再次刷新代码规范认知,我们新增了16条设计规约!现免费开放下载,不可错过! 热点热议 新增16条设计规约!阿里巴巴Java开发手册(详尽版)开放下载!作者:山哥在这里重磅干货免费下载!阿里云RDS团队论文被数据库顶会SIGMOD 2018收录作者:桐碧2018阿里巴巴为什么不用 ZooKeeper 做服务发现?作者:技术小能手 知识整理 HiSDP —— 高效的C++软件开发平台作者:中间件小哥HBase的备份以及恢复方案作者:玄陵Python3源码—字符串(str)对象作者:whj0709MySQL慢查询记录原理和内容解析作者:重庆八怪Python3源码—内建对象作者:whj0709 美文回顾 宝宝树获阿里战略投资,估值已达140亿人民币作者:技术小能手Atari联合创始人去世,为什么游戏对AI很重要?作者:技术小能手为爱“+”持,萌化了!公益二代C位出道造型,你们pick哪个?作者:技术小能手物流和电商下一个蓝海在哪里?世界银行喊大家去非洲投资作者:技术小能手曾鸣:互联网的下半场,拼的是协同效应作者:技术小能手进化策略让 AI 开挂,玩游...
- 下一篇
jdk9+版本的bug
今天从jvm大神"你假笨"的公众号上,看到一个jdk 9+版本的编译bug,记录一下: public class JavacEvalBug{ private static String[] array = {""}; static int test(){ System.out.println("evaluated!"); return 0; } public static void main(String[] args) { //相当于int index=test(); array[index] +="a"; array[test()] += "a"; } } test()方法里输出了一个固定字符串,上面这段代码,如果是在jdk8版本里,执行后,只会输出:evaluated! 一次(这符合预期,因为test()只调用了1次) 但如果把jdk升级到jdk9或10,再次编译运行,evaluated!就会输出2次,即test()方法会多执行了1次,如果test()方法是复杂的业务逻辑,比如创建订单/库存扣减之类,这就成大问题了。 原因在于jdk8与jdk9+的编译机制不同,javap -ve...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2全家桶,快速入门学习开发网站教程
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8编译安装MySQL8.0.19
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- CentOS7,CentOS8安装Elasticsearch6.8.6
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Thymeleaf,官方推荐html解决方案