[置顶] “非主流”Web容器之TomJetty之让服务动起来
传送门 ☞ 1.Web服务内功经脉
传送门 ☞ 3.掀起请求盖头来
传送门 ☞ 4.静态页面启程
上一节我们对于实现TomJetty服务器做了一些与Web有关的知识铺垫和回顾。那么从本节正式开始实现TomJetty服务器的“山寨”之旅。要想实现一个服务器,第一步要把服务器建立起来,并且能够正常运行,才能等待来自客户端的请求。考虑到这一点,我们本节就来处理TomJetty服务器的创建和启动工作。
一、服务器建立
1.新建一个名为TomJetty的Java工程。
2.在工程根目录下新建一个tomjetty.config文件,用于提供服务器配置参数。
tomjetty.port=8080
tomjetty.requestheader.class=cn.lynn.tomjetty.RequestHeaderParserImpl
3.编写一个工具类TomJettyUtil,用于程序读取服务器配置参数值。
package cn.lynn.tomjetty;
import java.io.IOException;
import java.io.FileInputStream;
import java.util.Properties;public class TomJettyUtil {private static Properties props = new Properties();static {try {props.load(new FileInputStream(".//tomjetty.config"));} catch (IOException e) {e.printStackTrace();System.exit(0);}}public static String getValue(String key) {return props.getProperty(key);}
}
4.编写一个TomJetty类继承于Thread类,用于封装服务器对象。
public class TomJetty extends Thread {private static ServerSocket server;private Socket socket;public TomJetty(Socket socket) {this.socket = socket;}...
}
5.为TomJetty类提供openServer()和closeServer()方法,用于封装打开和关闭服务器的细节操作。
public static void openServer() throws Exception {server = new ServerSocket(Integer.parseInt(TomJettyUtil.getValue("tomjetty.port")));while (true) {new TomJetty(server.accept()).start();}}public static void closeServer() throws Exception {if (server != null) {if (!server.isClosed()) {server.close();}}
}
到这里为止,TomJetty服务器已经建立完毕,并且提供了openServer()和closeServer()方法,供外部程序调用,以执行打开和关闭服务器的操作。
二、服务器启动
编写一个服务器启动类StartTomJetty。
package cn.lynn.tomjetty;public class StartTomJetty {public static void main(String[] args) {try {TomJetty.openServer();} catch (Exception e) {try {TomJetty.closeServer();} catch (Exception e1) {e1.printStackTrace();}}}}
这样一来,TomJetty服务器就能正常启动了,控制台无任何异常出现出现^_^。当然,它什么也不会做。因为在run()方法中没有进行任何操作^_^。好了,现在服务器的创建和启动工作都已完成,可以等待来自客户端的请求。但是当真的有请求来到时,目前的TomJetty服务器会感到“束手无策”,不知道请求到底要做什么、需要什么东西。这还谈什么交互呢?因此在下一节里我们将掀开HTTP请求头的神秘面纱,让TomJetty服务能够认识它,明白它的意图!
[置顶] “非主流”Web容器之TomJetty之让服务动起来相关推荐
- [置顶] 自己动手写Web容器之TomJetty之六:动态页面引入
传送门 ☞ Android兵器谱 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 传送门 ☞ 1.Web服务内功经脉 传送门 ☞ 2.让服务动起来 传送门 ☞ ...
- 分布式专题-高性能的Web容器之Nginx02-Nginx的应用实战
目录导航 前言 反向代理 负载均衡 upstream 其他配置信息 proxy_next_upstream proxy_connect_timeout proxy_send_timeout proxy ...
- [置顶]Java Web学习总结(25)——MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建...
这次换了台电脑,所以需要重新配置一次项目开发环境,过程中的种种,记录下来,便于以后再次安装,同时给大家一个参考. 1.JDK的安装 首先下载JDK,这个从sun公司官网可以下载,根据自己的系统选择64 ...
- web实现置顶、置底功能、聊天页面、锚点、滚动条、vue、scrollTop、scrollIntoView、scrollHeight
目录 前言 1.代码实现 3.scrollTop实现置顶置底(方式一) 4.scrollIntoView实现置顶置底(方式二) 5.总结 前言 在项目中遇到聊天功能,功能涉及置顶和置底知识,由此记录一 ...
- 3.BI可视化编辑器之右击菜单的“置顶、置底“实现
一.思路 1.每次push到list数组的时候,新增一个z用来管理图层的叠放,z应该有个默认值0,如果有z值去多个z值中比较获取最大的,这样拖拽的时候,会是最高层级的的 2.样式的话z-index因为 ...
- 阅读目录(置顶)(长期科技领域知识)
第一期:适用于数据项目的7种强大的开源工具 第二期:四种正确的微服务部署方式 第三期:开源和赚钱何去何从 第四期:Web前端和Java开发哪个薪资更高,发展前景更好? 第五期:干货总结:中级前端工程师 ...
- jQuery实现表格行上移下移和置顶
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <meta name ...
- html字体置顶,2020年应使用的3种CSS字体属性
原标题:2020年应使用的3种CSS字体属性 来源 | dev.to/nickbulljs 译者 | 鬼哥 如果您使用具有不同字体粗细的非系统字体,则字体文件的大小将很大.浏览器将需要更多时间来下载它 ...
- 前端取消置顶功能_双十一来临,怎么让便签app记录的清空购物车便签内容置顶显示? - 学显...
其实,作为一款多功能便签备忘录软件工具,敬业签还支持对便签内容执行"置顶"操作,以便突出该备忘录内容的重要性呢!所以,需要清空购物车的小伙伴,赶快对"清空购物车" ...
最新文章
- 量子信息技术研究现状与未来——郭光灿
- 在DLL编程中调用模版类时出现的类似class“XXX”需要有 dll 接口由 class“XXX”的客户端使用的warning的解决方案...
- PuTTy:PuTTy的简介、安装、使用方法之详细攻略
- .Net Cancellable Task - APM异步超时机制扩展
- libgdx 学习笔记七 Libgdx模块概述
- 【IOI2018】狼人【Kruscal重构树】【主席树】
- Unix操作系统目录存放内容
- 【C语言进阶深度学习记录】二十五 指针与数组的本质分析二
- 五、spring-data-Jpa 数据库操作
- 解决datepicker设置选中日期setDate不生效问题
- Windows8下设置VS默认启动方式为管理员启动
- 【被网上巨坑了】 win10+php5.6-ts-vc11-x64配置imagick的经历
- 制作纯天然无污染的微软官方win10Pe(超详细)
- Go语言值不值得学,发展前景怎么样?
- 如何应用计算机键盘截图,键盘怎么截图
- python学习 Day08 字符串和正则表达式
- 副业该怎么选择,适合新手的四个副业项目,零基础也可操作的兼职
- 老爷“鸡”升级小记!
- 详细排错,linux报错:Found option without preceding group in config file,Fatal error in defaults handling,
- 百度新闻推荐真的在推荐新闻吗
热门文章
- python datetime 加一个月_Python日期的加减等操作的示例
- gateway配置mysql_使用Gateway配置路由以及动态路由
- pnpm 是更快的包管理工具
- TCP如何实现可靠性传输
- 应对计算机领域中后门,网络课程论坛中长尾现象的应对策略——以《计算机应用基础》网络课程为例...
- 只会java_只会码代码的你和Java工程师之间的差距有大?
- python docs库_python库之_thread
- NodeJS自定义包和模块的导入(require)、导出(exports)
- Android让控件位于底部
- Python用正则表达式匹配ABAC和AABB的词语