自己动手写Web容器之TomJetty之二:开启服务器

javaWeb自定义Jetty服务启动项目 pom.xml 添加jetty <dependency> <groupId>org.eclipse.jetty.aggregate</groupId> <artifactId>jetty-all</artifactId> <version>9.2... 阅读详情

传送门 ☞ 轮子的专栏 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229

        上一节我们对于实现TomJetty服务器做了一些与Web有关的知识铺垫和回顾。那么从本节正式开始实现TomJetty服务器的“山寨”之旅。要想实现一个服务器,第一步要把服务器建立起来,并且能够正常运行,才能等待来自客户端的请求。考虑到这一点,我们本节就来处理TomJetty服务器的创建和启动工作。

1服务器建立

(1)新建一个名为TomJetty的Java工程

(2)在工程根目录下新建一个tomjetty.config文件,用于提供服务器配置参数

tomjetty.port=9527
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()方法,供外部程序调用,以执行打开和关闭服务器的操作。

2服务器启动

        编写一个服务器启动类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服务能够认识它,明白它的意图!

视频编解码——视频编解码器工作原理 目录什么是视频编解码器为什么需要视屏编解码器视频编码器与数字视频容器时评编码器的历史 什么是视频编解码器 简单来说就是用于压缩或解压数字视频的软件或硬件 编码是信息从一种形式或格式转换为另一种形式的过程,解码是编码的反向。 适用于视频 编码是将视频、音频的原始格式的文件通过压缩技术转换成另一种格式(视频如h.264,h.265,m-jpeg等)。 解码是编码的反向过程。应用中,一般是将h.264,h.265格式数据解码成如YUV格式裸流交给显示器显示。 为什么需要视屏编解码器 需要在有限的带宽或存储空间 阅读详情

相关推荐

第18届全国大学生智能汽车竞赛四轮车开源讲解【2.5】-- 图像处理实战:从二值化到边缘检测的工程优化

本文深入讲解了第18届全国大学生智能汽车竞赛四轮车开源项目中图像处理的核心实战技术。文章聚焦于二值化与边缘检测两大关键环节,详细对比了大津法与索贝尔算子的工程应用与优化策略,并分享了遮光、偏振片等物理抗干扰技巧,旨在帮助参赛者构建稳定高效的图像预处理流水线,为赛道识别奠定坚实基础。

weixin_29279047的博客 100

Jetty基本架构简介。

Jetty目前是一个比较被看好的Servlet引擎,他的架构比较简单,也是一个可扩展性强且非常灵活的引用服务器。他有一个基本的数据模型,这个数据模型就是Handler,所有可以被扩展的组件都可以作为一个Handler添加到Server中,Jetty将帮你管理这些Handler。 下图是Jetty的基本架构图,整个Jetty的核心由Server和Connector两个组件构成,整个Server组件...

孤芳不自赏 819

ESP32 BLE Mesh Provisioner实战:手把手教你用ESP-IDF配网智能灯泡(附常见错误排查)

本文提供了一份基于ESP-IDF的ESP32 BLE Mesh Provisioner实战指南,详细解析了配网器的核心角色与工作流程。文章手把手教你从工程搭建、代码初始化到核心回调解析,并重点针对常见的‘Model not bound to AppKey’等错误提供了深度排查思路与解决方案,帮助你构建一个稳定可靠的智能照明网关。

desk3的博客 513

使用jetty作为内嵌服务器启动项目

需求:把jetty作为内嵌的一个服务器,直接启动,web项目不用部署在应用服务器中。在网上搜索了一些资料,参照后,都没有成功,经过3天的研究,终于搞定了,记录在此,以备查询。 最开始用的jetty8.1,没成功,后又下载7.6,仍然没有成功,最后使用了jetty7.0后成功。对于8.1和7.6后来没有再试,应该是一样的步骤,有兴趣或者有时间容后再试。 步骤: 1、首先下载jetty的jar包

robinpipi的专栏 3万+

低功耗模式下的看门狗使用

最近用国产芯片AT32在做一个低功耗的项目,为了实现低功耗模式下的定时唤醒,我选择的是使用相对比较简单的看门狗来做,下面就分享一下使用过程~ 为了最大限度的降低功耗,我用的是待机模式,先看看几种低功耗模式以及唤醒的区别: 而看门狗AT32提供了两种,分别是独立看门狗(IWDG)和窗口看门狗(WWDG),其区别大概有以下几点: 1、独立看门狗(IWDG)由专用的低速时钟(LSI)驱动,即使主时钟发生故障它也仍然有效;窗口看门狗由从 APB1 时钟分频后得到的时钟驱动,通过可配置的时间窗口来检测应用程序非正常

dc18883988396的博客 3028

Go语言Gin框架项目:从零到一搭建一个用户管理系统

本文介绍了一个基于Go语言Gin框架开发的用户管理系统。系统采用MySQL数据库存储数据,使用Bootstrap 5构建现代化UI界面,实现了完整的CRUD功能。主要特点包括:RESTful API设计、前后端双重表单验证、实时搜索功能、SQL防注入措施以及响应式布局。项目结构清晰,包含数据库配置、用户模型、处理器和前端模板等模块。系统提供用户列表展示、新增/编辑表单、删除确认等功能,通过参数化查询确保安全性,并支持按姓名或邮箱搜索用户。

数据知道的博客 3994

【译】用maven使java web应用运行在内嵌的Jetty或Tomcat容器中

更多0   开发java web应用时,能在“真实”的环境中有快速的反馈是非常实用的。本文将探寻如何使用maven使java web应用运行在内嵌的Jetty或Tomcat容器中。我将展示如何配置他们来开发Podcastpedia.org网站的工程podcastpedia。 环境准备 你需要有Maven,至少安装了Java 7。正常情况你应该可以自行部署和启动podcastpedia工程并...

小兵qwer的专栏 1314

华为OD机试 - 不含101的数(Python/JS/C/C++ 双机位C卷 100分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。小明在学习二进制时,发现了一类不含101的数,也就是:现在给定一个正整数区间,请问这个区间内包含了多少个不含101的数?输入的唯一一行包含两个正整数。输出的唯一一行包含一个整数,表示在区间内一共有几个不含101的数。8 1668 → “1000”

学Java,找哪吒 1250

自己动手写Web容器之TomJetty之一:服务内功经脉

传送门 ☞ Android兵器谱 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229 传送门 ☞ 2.开启服务器 传送门 ☞ 3.掀起请求盖头来 传送门 ☞ 4.静态页面起步 传送门 ☞ 5.包装请求参数 传送门 ☞ 6.动态页面引入         Jetty 是一个开源的servlet容器,它为基于Java的web内容,

leverli的专栏 4481

基于LSTM的股票价格预测系统,Django框架,Web的股票预测系统,训练+数据集+源码(无需安装环境版)

股票价格预测是投资领域的一个重点关注课题。由于股票价格受到诸多非线性因素的影响,得到精确的预测结果较为困难。使用 PyCharm 作为代码开发工具,通过下载好的股票金融数据,进行数据预处理,构建 LSTM 网络模型,训练模型并训练出最优模型,输出股票未来收盘价波动的走势,最后在训练好的模型上,设计股票模型应用系统,运行效率较高,对股票预测具有一定的积极意义。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 954

语音算法面试复习系列3——语音识别基础 + CTC 详解

摘要:本文系统讲解了语音识别(ASR)的核心算法CTC。主要内容包括:1) ASR的核心挑战是输入音频帧与输出文字序列的对齐问题;2) CTC通过引入blank标记和动态规划算法,无需对齐标注即可训练;3) 详细解析CTC前向算法实现路径概率求和,以及贪心和Beam Search解码方法;4) 指出CTC的条件独立性假设导致无法建模输出依赖关系;5) 对比CTC与传统方法和Attention/Transducer的优缺点,分析实际应用中的subsampling技术。文章包含数学推导、代码实现和面试常见问题,

m0_60605453的博客 305

使用Jetty启动项目

启动公司项目所使用的参数: 方法一:web-run clean install jetty:run -Dproject.name=myprojectname -Dregion.name=BJ01 -Denv.name=daily 方法二: admin 【run】 jetty:run package -Dproject.name=myprojectname -Dregion.name=BJ01 -Denv.name=daily admin 【package】 clean package -

qq_43989788的博客 877

Unity插件NodeCanvas之行为树的详细教程

NodeCanvas 是一个用于 Unity 的可视化脚本工具,主要用于游戏开发中的行为树、状态机和流程图的设计。它通过节点编辑器的方式,让开发者可以更直观地创建和管理游戏逻辑,减少了传统编码的复杂性。今天我们就来详细介绍一下NodeCanvas插件。

TxNet 1955

webservice服务端发布和客户端调用(使用jetty作为服务器)

1.服务端和客户端增加Maven依赖包,如下 <!-- cxf方式webservice服务--> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-ja...

weixin_42231507的博客 1281

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Linux环境下搭建Tomcat服务器

一、什么是Linux?    和Windows操作系统软件一样,Linux也是一个操作系统软件。但是和Windows不同的是,Linux是一套开放源代码程序的、并可以自由传播的类Unix操作系统软件(Unix系统是Linux系统的前身,具备很多优秀特性)。其在设计之初,就是基于Intel x86系列CPU架构的计算机的。它是一个基于POSIX的多用户、多任务并且支持多线程和多CPU的操作系统。  ...

thebigdipperbdx的博客 8263

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

tomct服务器端配置

文章目录欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 tomcat服务器 欢迎...

qq_30501837的博客 608

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

[置顶] 野生Web容器之TomJetty之掀起你的盖头来

传送门:上一节         上文我们对于实现这个野生Web容器做了一些知识铺垫和复习,息知了HTTP请求的头部的组成元素,本文我们主要讲解如何在代码中去解析它的各个部分,掀起盖头来,给哥笑一个^_^。在这之前,我们需要建立服务器,把框架搭建起来。 一、服务器建立 1.新建一个名为TomJetty的Java工程。 2.在工程src目录下新建一个tomjetty.config文件,用于提...

weixin_33798152的博客 167

带你五分钟搞定Jackson JSON Processor

传送门 ☞ 轮子的专栏 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229 1Jackson 是什么? (1)崇尚速度的(传说比其他Java json parser和data binder执行起来更快) (2)数据流动的(读取,写入) (3)完全独立的(独立于JDK之外的其他包) (4)火力十足的(为通用JDK类提供完整的数据绑定,就像Java be

leverli的专栏 7012

自己动手写Web容器之TomJetty之六:动态页面引入

传送门 ☞ Android兵器谱 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229 传送门 ☞ 系统架构设计 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229 传送门 ☞ GoF23种设计模式 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229 传送门 ☞ 1.服

leverli的专栏 6430

Design and Model Analysis of the E-Commerce Development Platform for 3-Tiered Web Applications

传送门 ☞ Android兵器谱 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229 Abstract   Many Internet applications employ 3-tiersoftware architecture such as e-commerce system. Starting from analyze thearchitect

leverli的专栏 5106

某大型银行深化系统之十九:日志规范

传送门 ☞ Android兵器谱 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229         在应用程序中添加程序日志记录可以跟踪代码运行时轨迹,作为日后审计的依据;并且担当集成开发环境中的调试器的作用,向文件打印代码的调试信息。本规定Jave EE项目必须使用Commons-Logging作为日志接口封装,选用Apache提供的可重用组件Log

leverli的专栏 4928

自己动手写Web容器之TomJetty之三:掀起请求盖头来

传送门 ☞ Android兵器谱 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229 传送门 ☞ 1.服务内功经脉 传送门 ☞ 2.开启服务器 传送门 ☞ 4.静态页面启步 传送门 ☞ 5.包装请求参数  传送门 ☞ 6.动态页面引入        前面我们对于实现TomJetty做了一些知识铺垫和复习,息知了HTTP请求的头部

leverli的专栏 4111

自己动手写Web容器之TomJetty之五:包装请求参数

传送门 ☞ Android兵器谱 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229 传送门 ☞ 1.服务内功经脉 传送门 ☞ 2.开启服务器 传送门 ☞ 3.掀起请求盖头来 传送门 ☞ 4.静态页面起步 传送门 ☞ 6.动态页面引入         前面我们实现了TomJetty响应无参请求静态页面的功能,但真实情况下,几乎所有请

leverli的专栏 4000

某大型银行深化系统之十七:性能设计之二

传送门 ☞ Android兵器谱 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229         业务集中系统,可以采用M/M/n 模型来描述,即客户是泊松分布,服务时间为负指数分布,多台、无限容量、无限源、先到先服务的排队系统模型。则根据排队论可以得到一下几个指标: 1.顾客在系统中的时间=等待时长+服务时长 2.系统的平稳状态

leverli的专栏 3475

遵循Java EE标准规范的开源GIS服务平台之二:平台部署

传送门 ☞ Android兵器谱 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229 传送门 ☞ 系统架构设计 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229 传送门 ☞ GoF23种设计模式 ☞ 转载请注明 ☞ http://blog.youkuaiyun.com/leverage_1229         上文我

leverli的专栏 3462
上一篇: Android玄铁剑之TextView之跑跑马灯
下一篇: Android君子剑之ScrollView之君子好逑
innovation
博客等级 码龄14年 251粉丝 136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值