Java NIO(New IO)是一个可以替代标准 Java IO API 的 IO API(从 Java 1.4 开始),Java NIO 提供了与标准 IO 不同的 IO 工作方式。本教程讲解了 Java NIO 的三个核心组件,并介绍了跟核心组件相关的内容,旨在帮助读者 NIO 的原理。适用人群本教程是 Java 中高级教程,帮助那些想要学习 Java 并发的开发者。学习前提学习本教程前,你需要了解 Java 这门开发语言。
kafka 使用场景和入门指南。Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。
前提设定针对本教程,假设你有一个开发主机,并有两个主机名:ren 和 stimpy。再来假设一个 Tomcat 运行实例,$CATALINA_HOME 表示它的安装位置,可能是 /usr/local/tomcat。 另外,本教程使用 UNIX 风格的分隔符及命令,如果你使用的是 Windows,则需要相应修改一下。 server.xml编辑 server.xml 文件的 Engine 部分,如下所示: <
简介选择适用于 Tomcat 的连接器是非常困难的。本文列出了目前版本的 Tomcat 所支持的连接器,可根据具体需要来选择使用。 HTTPHTTP 连接器是 Tomcat 默认配置好的,可立即使用。该连接器能实现最低的延时以及最佳的整体性能。 对于集群化来说,必须安装支持 Web 会话粘性的 HTTP 负载均衡器,以便将流量导引至多个 Tomcat 服务器上。
简介CGI(通用网关接口)定义了一种 Web 服务器与外部内容生成程序的交互方式,这里所说的外部内容生成程序通常被称为 CGI 程序或 CGI 脚本。 当你使用 Tomcat 做为 HTTP 服务器,并且需要 CGI 支持时,可以在 Tomcat 中添加 CGI 支持。Tomcat 的 CGI 支持很大程度上能够跟 Apache 的httpd's 相兼容,但也存在一些局限(比如只有一个 cgi-bin 目录)。
简介Tomcat 8.0 使用 Jasper 2 JSP 引擎去实现 JavaServer Pages 2.3 规范。 Jasper 2 经过了重新设计,极大改善了上一版 Jasper 的性能。除了一般性的代码改进之外,还做出了以下改变: JSP 自定义标签池化 针对 JSP 自定义标签(JSP Custom Tags)实例化的 Java 对象现已可以被池化和重用,从而极大提高了使用自定义标签的 JSP 页面的性能。
概述很多生产环境都非常需要以下特性:在无需关闭或重启整个容器的情况下,部署新的 Web 应用或者取消对现有应用的部署。或者,即便在 Tomcat 服务器配置文件中没有指定 reloadable 的情况下,也可以请求重新加载现有应用。
本章概述可利用多种方法把 Tomcat 安装到不同的平台上。关于 Tomcat 安装方面的重要文档是 RUNNING.txt。如果本节内容尚未能解决你的某些困惑,建议查阅该文档获取帮助。 Windows 系统下的安装利用 Windows 安装程序可以轻松地在 Windows 系统下安装 Tomcat。
对于系统管理员以及 Web 开发者来说,在开始学习 Tomcat 之前应该熟悉一些重要内容。本章概述了 Tomcat 容器背后的一些概念和术语,以及你可能需要的一些帮助资源。术语阅读这些文档时,会碰到一些术语。其中一些是 Tomcat 的专有术语,另一些则是由 Servlet 与 JSP 规范所定义的术语。 Context 简单说,上下文就是指 Web 应用程序。
交互模式错误处理当错误发生时,解释器打印一个错误消息和堆栈跟踪。在交互模式下,它会返回到主提示符;如果输入来自一个文件,它会在打印堆栈信息后以非零状态退出(一个 try 语句中的 except 子句没有错误在这个背景下。处理例外)。一些错误是致命的,因为一个零状态退出;这适用于内部的矛盾和一些内存耗尽的情况下。所有的错误信息都写入标准错误流;
浮点数在计算机中表达为二进制(binary)小数。例如:十进制小数0.125是 1/10 + 2/100 + 5/1000 的值,同样二进制小数:0.001是 0/2 + 0/4 + 1/8。这两个数值相同。唯一的实质区别是第一个写为十进制小数记法,第二个是二进制。遗憾的是,大多数十进制小数不能精确的表达二进制小数。因此,总的来说,我们输入的十进制浮点数的实际存储在机器上是近似二进制浮点数。
读过这本指南应该会让你有兴趣使用 Python —— 可能你已经期待着用 Python 解决你的实际问题了。可以在哪里进行更近一步的学习? 入门指南是 Python 文档集的一部分。其中的另一些文档包括: The Python Standard Library: 应该浏览一下这份文档,它为标准库中的类型、函数和模块提供了完整(尽管很简略)的参考资料。标准的 Python 发布版包括了 大量 的附加模块。
如果你退出 Python 解释器并重新进入,你做的任何定义(变量和方法)都会丢失。因此,如果你想要编写一些更大的程序,为准备解释器输入使用一个文本编辑器会更好,并以那个文件替代作为输入执行。这就是传说中的脚本。随着你的程序变得越来越长,你可能想要将它分割成几个更易于维护的文件。你也可能想在不同的程序中使用顺手的函数,而不是把代码在它们之间中拷来拷去。
这一章节介绍你之前可能学习过的部分内容,同时添加了一些新的内容。更多关于列表的内容列表这种数据结构有很多方法,如下是一个列表对象的全部方法:list.append(x)在列表的末尾插入元素x,等同于 a[len(a):] = [x]list.extend(L)将L中的全部元素插入到列表的末尾,以扩展该列表. 等同于a[len(a):] = L.list.insert(i,x)将一个元素插入到指定位置。
下面的示例演示了 Pull Request 如何在在 Forking 工作流中使用。 也同样适用于小团队的开发协作和第三方开发者向开源项目的贡献。在示例中,小红是个开发,小明是项目维护者。他们各自有一个公开的 Bitbucket 仓库,而小明的仓库包含了正式工程。小红 fork 正式项目小红先要 fork 小明的 Bitbucket 仓库,开始项目的开发。
Pull Request 可以和功能分支工作流、 或 一起使用。但一个 Pull Request 要求要么分支不同要么仓库不同,所以不能用于集中式工作流。 在不同的工作流中使用 Pull Request 会有一些不同,但基本的过程是这样的:开发者在本地仓库中新建一个专门的分支开发功能。开发者 push 分支修改到公开的 Bitbucket 仓库中。开发者通过 Bitbucket 发起一个 Pull Request 。
项目维护者初始化正式仓库和任何使用 Git 项目一样,第一步是创建在服务器上一个正式仓库,让所有团队成员都可以访问到。 通常这个仓库也会作为项目维护者的公开仓库。公开仓库应该是裸仓库,不管是不是正式代码库。 所以项目维护者会运行像下面的命令来搭建正式仓库:ssh user@hostgit init --bare /path/to/repo.
和其它的 Git 工作流一样,Forking 工作流要先有一个公开的正式仓库存储在服务器上。 但一个新的开发者想要在项目上工作时,不是直接从正式仓库克隆,而是 fork 正式项目在服务器上创建一个拷贝。这个仓库拷贝作为他个人公开仓库 ——其它开发者不允许 push 到这个仓库,但可以 pull 到修改(后面我们很快就会看这点很重要)。
Forking 工作流是分布式工作流,充分利用了 Git 在分支和克隆上的优势。可以安全可靠地管理大团队的开发者( developer ),并能接受不信任贡献者( contributor )的提交。Forking 工作流和前面讨论的几种工作流有根本的不同,这种工作流不是使用单个服务端仓库作为『中央』代码基线,而让各个开发者都有一个服务端仓库。
下面的示例演示本工作流如何用于管理单个发布循环。假设你已经创建了一个中央仓库。创建开发分支第一步为 master 分支配套一个 develop 分支。简单来做可以本地创建一个空的 develop 分支, push 到服务器上:git branch developgit push -u origin develop以后这个分支将会包含了项目的全部历史,而 master 分支将只包含了部分历史。
关注时代Java