传送门 ☞ 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之让服务动起来相关推荐

  1. [置顶] 自己动手写Web容器之TomJetty之六:动态页面引入

    传送门 ☞ Android兵器谱 ☞ 转载请注明 ☞ http://blog.csdn.net/leverage_1229 传送门 ☞ 1.Web服务内功经脉 传送门 ☞ 2.让服务动起来 传送门 ☞ ...

  2. 分布式专题-高性能的Web容器之Nginx02-Nginx的应用实战

    目录导航 前言 反向代理 负载均衡 upstream 其他配置信息 proxy_next_upstream proxy_connect_timeout proxy_send_timeout proxy ...

  3. [置顶]Java Web学习总结(25)——MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建...

    这次换了台电脑,所以需要重新配置一次项目开发环境,过程中的种种,记录下来,便于以后再次安装,同时给大家一个参考. 1.JDK的安装 首先下载JDK,这个从sun公司官网可以下载,根据自己的系统选择64 ...

  4. web实现置顶、置底功能、聊天页面、锚点、滚动条、vue、scrollTop、scrollIntoView、scrollHeight

    目录 前言 1.代码实现 3.scrollTop实现置顶置底(方式一) 4.scrollIntoView实现置顶置底(方式二) 5.总结 前言 在项目中遇到聊天功能,功能涉及置顶和置底知识,由此记录一 ...

  5. 3.BI可视化编辑器之右击菜单的“置顶、置底“实现

    一.思路 1.每次push到list数组的时候,新增一个z用来管理图层的叠放,z应该有个默认值0,如果有z值去多个z值中比较获取最大的,这样拖拽的时候,会是最高层级的的 2.样式的话z-index因为 ...

  6. 阅读目录(置顶)(长期科技领域知识)

    第一期:适用于数据项目的7种强大的开源工具 第二期:四种正确的微服务部署方式 第三期:开源和赚钱何去何从 第四期:Web前端和Java开发哪个薪资更高,发展前景更好? 第五期:干货总结:中级前端工程师 ...

  7. jQuery实现表格行上移下移和置顶

    <!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <meta name ...

  8. html字体置顶,2020年应使用的3种CSS字体属性

    原标题:2020年应使用的3种CSS字体属性 来源 | dev.to/nickbulljs 译者 | 鬼哥 如果您使用具有不同字体粗细的非系统字体,则字体文件的大小将很大.浏览器将需要更多时间来下载它 ...

  9. 前端取消置顶功能_双十一来临,怎么让便签app记录的清空购物车便签内容置顶显示? - 学显...

    其实,作为一款多功能便签备忘录软件工具,敬业签还支持对便签内容执行"置顶"操作,以便突出该备忘录内容的重要性呢!所以,需要清空购物车的小伙伴,赶快对"清空购物车" ...

最新文章

  1. 量子信息技术研究现状与未来——郭光灿
  2. 在DLL编程中调用模版类时出现的类似class“XXX”需要有 dll 接口由 class“XXX”的客户端使用的warning的解决方案...
  3. PuTTy:PuTTy的简介、安装、使用方法之详细攻略
  4. .Net Cancellable Task - APM异步超时机制扩展
  5. libgdx 学习笔记七 Libgdx模块概述
  6. 【IOI2018】狼人【Kruscal重构树】【主席树】
  7. Unix操作系统目录存放内容
  8. 【C语言进阶深度学习记录】二十五 指针与数组的本质分析二
  9. 五、spring-data-Jpa 数据库操作
  10. 解决datepicker设置选中日期setDate不生效问题
  11. Windows8下设置VS默认启动方式为管理员启动
  12. 【被网上巨坑了】 win10+php5.6-ts-vc11-x64配置imagick的经历
  13. 制作纯天然无污染的微软官方win10Pe(超详细)
  14. Go语言值不值得学,发展前景怎么样?
  15. 如何应用计算机键盘截图,键盘怎么截图
  16. python学习 Day08 字符串和正则表达式
  17. 副业该怎么选择,适合新手的四个副业项目,零基础也可操作的兼职
  18. 老爷“鸡”升级小记!
  19. 详细排错,linux报错:Found option without preceding group in config file,Fatal error in defaults handling,
  20. 百度新闻推荐真的在推荐新闻吗

热门文章

  1. python datetime 加一个月_Python日期的加减等操作的示例
  2. gateway配置mysql_使用Gateway配置路由以及动态路由
  3. pnpm 是更快的包管理工具
  4. TCP如何实现可靠性传输
  5. 应对计算机领域中后门,网络课程论坛中长尾现象的应对策略——以《计算机应用基础》网络课程为例...
  6. 只会java_只会码代码的你和Java工程师之间的差距有大?
  7. python docs库_python库之_thread
  8. NodeJS自定义包和模块的导入(require)、导出(exports)
  9. Android让控件位于底部
  10. Python用正则表达式匹配ABAC和AABB的词语