新一轮学习——Jetty官方文档及源码阅读(一)

一 java servlet

1 维基百科上这样定义:一个Java Servlet就是包含服务器功能的Java程序。尽管servlets可以相应任何类型的请求,他们大多数通常都是实现了搭建在web服务器上的应用。只是这样的web servlets是类似于PHP和ASP.NET这样的动态web内容的java实现。

2 传统的CGI脚本有哪些缺陷:

(1)   每个HTTP请求都要耗费一个进程,CPU占用率过高

(2)   对于并发的CGI请求,每个请求都要将CGI脚本加载到内存中,内存占用过大

(3)   只有一个单例响应同时进行的请求。这样降低了内存使用率,管理持久化数据变得不容易

3 servlet生命周期

init():初始化servlet实例,实现了javax.servlet.ServletConfig接口,允许servlet从web应用配置中拿到name-value的初始化参数。

service():每次请求时调用。确定请求类型并分发给一个合适的方法去处理。

destroy():结束服务时调用,包含在servlet生命周期中。

二 Jetty

目前最新版本:jetty 9.4.8v20171121

官方文档:

1 开始使用Jetty

a.     jetty简介

(1)   maven信息:

pom:

<dependency>

  <groupId>org.eclipse.jetty</groupId>

  <artifactId>jetty-project</artifactId>

  <version>${project.version}</version>

</dependency>

(2)   先普及下版本代号知识:

主要有Alpha、Beta、Milestones(M)、Release Candidates(RC)、General Availability(GA)。

介绍下RC和GA,即发布前的候选版本和可用版本,一般RC不可用于生产环境,它可能包含一些安全漏洞或者不完整的特征集。

GA是可用的线上版本,也分为Release和Stable,即发布初版和稳定版本。发布之后通过用户测试,会有一些测试过程中提出的issue需要fixed。稳定版本是在发布初版经过一定时间的使用和检验,修复漏洞后发布的稳定版,一般建议使用此版本(存在的情况下)。

下表是官网上的包路径和用途,请参阅,此处不做解释:

175708_hAdh_216330.png

上表中的demo-base路径即是jetty服务启动和资源存放的根目录

启动命令为:

>cd $JETTY_HOME/demo-base/

>java –jar $JETTY_HOME/start.jar

(此前已设置好JETTY_HOME=/path/to/$(jetty_home))

官网建议不要在$JETTY_HOME目录下启动。在浏览器中访问http://localhost:8080即可查看到demo服务器。

新建一个jetty base用于启动服务:

>JETTY_BASE=/tmp/mybase

>mkdir $JETTY_BASE

>cd $JETTY_BASE

>java –jar $JETTY_HOME/start.jar --create-startd

>java –jar $JETTY_HOME/start.jar --add-to-start=http,deploy

>cp $JETTY_HOME/demo-base/webapps/async-rest.war webapps/ROOT.war

>java –jar $JETTY_HOME/start.jar

(3)配置的简介

几种方式:POJO、启动配置文件(用分为ini,mod,xml三种,此处不做详解,请查阅官网)、其他配置文件、Jetty IoC XML配置

ini,mod,xml三者的关系如下图:

175722_GDDO_216330.png

其他配置文件包括context xml、web.xml、Properties文件。

b.    配置简介

配置Server

核心server配置:etc/jetty.xml

包括ThreadPool,Handlers,Server Attributes,Server fields,Connectors,Services

ThreadPool:其他Jetty server组件使用的默认Executor Service。基础的配置是在start.ini和start.d/server.ini中的maximum size和minimum size

Handlers:用于处理请求,在xml中会配置成树状,每个节点代表一个功能点。

Server Attributes:包含了一个继承属性map,如果value对象实现了LifeCycle接口,它们会和server一起启动和停止。

Server fields:在http响应中传递属性

Connectors:jetty支持的一些协议(比如HTTP)的连接器。在server里既可以指定连接器的集合也能增/删连接器。

Services:比较典型的是LoginService和DataSources

配置Connectors

包括Port,Host,Idle Timeout,HTTP Configuration,SSL Context Factory

Port:通过jetty.http.port或jetty.ssl.port设置,默认http是8080,https和http2是8443

Host:不设置,则默认为0.0.0.0。xml中配置为jetty.host属性。

Idle Timeout:空闲时间

HTTP Configuration: HttpConfiguration实例,包含独立于特定无线协议且通用的HTTP配置。标准的版本中在jetty.xml中会创建一个HttpConfiguration

SSL Context Factory:定位keystore和truststore用于认证。

ServerConnector:基于NIO且使用了连接工厂用于处理一个或多个协议的请求。

配置Contexts

大致相当于servletContext API,用于在一个context path中组装handlers和装载资源文件。包含标准的jetty处理器和自定义的应用处理器。

通用的包括contextPath,virtualHost,classPath,attributes,resourceBase

重点讲下classPath,一个context只能包含一个classpath,所以任何执行处理的线程包含一个线程context的classLoader。标准的web应用通过WEB-INF/lib和WEB-INF/classes目录来初始化,另外还需要一些rules用来代理装载parent classloader。

Web Application的发布

可以发布多种格式:war,扩展war,静态内容,包含ContextHandler实例的xml。

同目录存在多种可发布格式时,优先级为:XML>WAR>Dir

(特别提醒:在Jetty9中不再支持ContextDeployer,功能已被合并到新的WebAppProvider中来避免两次发布语义。

Jetty 欢迎访问Jetty文档 Wiki. Jetty是一个开源项目,提供了http服务器、http客户端和java servlet容器。 这个wiki提供jetty的入门教程、基础配置、功能特性、优化、安全、JavaEE、监控、常见问题、故障排除帮助等等。它包含教程、使用手册、视频、特征描述、参考资料以及常见问题。 Jetty文档 ---------------- 入门: 下载Download, 安装, 配置, 运行 Jetty入门(视频) 下载和安装Jetty 如何安装一个Jetty包 如何配置Jetty – 主要文档 如何运行Jetty 用JConsole监控Jetty 如何使用Jetty开发 Jetty HelloWorld教程 Jetty和Maven HelloWorld教程 Jetty(6)入门 (www.itjungle.com) Jetty Start.jar 配置Jetty 如何设置上下文(Context Path) 如何知道使用了那些jar包 如何配置SSL 如何使用非root用户监听80端口 如何配置连接器(Connectors) 如何配置虚拟主机(Virtual Hosts) 如何配置会话ID(Session IDs) 如何序列化会话(Session) 如何重定向或移动应用(Context) 如何让一个应用响应一个特定端口 使用JNDI 使用JNDI 在JNDI中配置数据源(DataSource) 内嵌Jetty服务器 内嵌Jetty教程 内嵌Jetty的HelloWorld教程 内嵌Jetty视频 优化Jetty 如何配置垃圾收集 如何配置以支持高负载 在Jetty中部署应用 部署管理器 部署绑定 热部署 Context提供者 如何部署web应用 webApp提供者 如何部署第三方产品 部署展开形式的web应用 使用Jetty进行开发 如何使用Jetty进行开发 如何编写Jetty中的Handlers 使用构建工具 如何在Maven中使用Jetty 如何在Ant中使用Jetty Maven和Ant的更多支持 Jetty Maven插件(Plugin) Jetty Jspc Maven插件(Plugin) Maven web应用工程原型 Ant Jetty插件(Plugin) 使用集成开发环境(IDEs) 在Eclipse中使用Jetty 在IntelliJ中使用Jetty 在Eclipse中工作 在Eclipse中开发Jetty Jetty WTP插件(Plugin) JettyOSGi SDK for Eclipse-PDE EclipseRT Jetty StarterKit SDK OSGi Jetty on OSGi, RFC66 基于Jetty OSGi的产品 OSGi贴士 Equinox中使用Jetty实现HTTP Service Felix中使用Jetty实现HTTP Service PAX中使用Jetty实现HTTP Srevice ProSyst mBedded Server Equinox Edition Spring Dynamic Modules里的Jetty JOnAS5里的Jetty 配置Ajax、Comet和异步Servlets 持续和异步Servlets 100 Continue和102 Processing WebSocket Servlet 异步的REST Stress Testing CometD 使用Servlets和Filters Jetty中绑定的Servlets Quality of Service Filter Cross Origin Filter 配置安全策略(Security Policies) 安全领域(Security Realms) 安全域配置教程 Java Authentication and Authorization Service (JAAS) JAAS配置教程 JASPI 安全模型(Secure Mode) 存储在文件中的安全密码以及编程教程 如何开启或禁止Jetty中的SSL功能 如何在Jetty中安全存储密码 如何安全终止Jetty 如何配置Spnego Application Server Integrations(集成) Apache Geronimo JEE 配置Apache httpd和Jetty教程 配置Apache mod_proxy和Jetty 配置Jetty中的AJP13 在JBoss中配置Jetty Remote Glassfish EJBs from Jetty Jetty and Spring EJB3 (Pitchfork) JBoss EJB3 ObjectWeb EasyBeans
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值