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条评论来说两句吧...