当前位置:文档之家› 开始使用Jetty

开始使用Jetty

开始使用Jetty
开始使用Jetty

Jetty使用教程(一)——开始使用Jetty

一、Jetty简介

1.1 什么是Jetty

Jetty是一个提供HHTP服务器、HTTP客户端和javax.servlet容器的开源项目。

这个入门教程分为五个部分:

第一部分部分重点介绍如何使用Jetty,它提供如下信息,如什么是Jetty,从哪可以下载它,怎么在像Maven一样的仓库中找到它。这一部分同样会提供启动Jetty和如何配置Jetty的快速入门。

第二部分从更细致的方面介绍Jetty的配置,介绍怎么用Jetty来部署一个web应用程序,怎么配置容器和连接,以及如何实现SSL和其它安全措施。

Jetty的管理员应该关注第三部分。从启动Jetty容器开始到session管理,日志记录,HTTP/2支持和Jetty优化,这一章节将帮助Jetty管理员获得更多关于Jetty服务以外的知识,这一章节同样包含容器最常用的特性配置如JNDI和JMX。

针对使用Jetty的高级用户,第四部分着重于Jetty的开发,本章节的重点是如何将Jetty嵌入一个已经存在的应用程序中。这部分包含几个简单的例子和操作Jetty框架的指南。这一部分同样包含如何使用Jetty的maven插件以及Jetty调试。

最后一个部分是引用部分,也包含Jetty的架构信息,Jetty的XML语法介绍,以及常见问题的解析,这章也介绍如何参与Jetty社区,如何贡献代码,以及如何寻求帮助。

1.2 如何选择Jetty的版本

Jetty9是Jetty的最近一个版本且比之前的版本有很大的改进,其中一个改进是Jetty所有特性已经体现在Jetty9的文档里。所以对于很多使用Jetty老版本的用户,我们建议使用Jetty9,我们也表示将会在接下来的几年里积极维护这一个版本。

表格1.1Jetty版本

版本Year Home JVM 协议Servlet JSP 状态

9.3

2015

Eclipse

1.8

HTTP/1.1 (RFC 7230), HTTP/2 (RFC 7540),

WebSocket (RFC 6455, JSR 356), FastCGI

3.1

2.3

稳定版本

9.2

2014

Eclipse

HTTP/1.1 RFC2616, javax.websocket, SPDY v3

3.1

2.3

稳定版本

8

2009-

Eclipse/Codehaus

1.6

HTTP/1.1 RFC2616, WebSocket RFC 6455, SPDY v3 3.0

2.2

珍贵版本

7

2008-

Eclipse/Codehaus

1.5

HTTP/1.1 RFC2616, WebSocket RFC 6455, SPDY v3 2.5

2.1

珍贵版本

6

2006-2010

Codehaus

1.4-1.5

HTTP/1.1 RFC2616

2.5

2.0

已经作废

5

2003-2009 Sourceforge

1.2-1.5

HTTP/1.1 RFC2616 2.4

2.0

已经作废

4

2001-2006 Sourceforge

1.2, J2ME

HTTP/1.1 RFC2616 2.3

1.2

远古时期

3

1999-2002 Sourceforge

1.2

HTTP/1.1 RFC2068 2.2

1.1

石器时代

1998-2000

Mortbay

1.1

HTTP/1.0 RFC1945

2.1

1.0

传说级别

1

1995-1998

Mortbay

1.0

HTTP/1.0 RFC1945

-

-

神话级别

1.3 Jetty 和Java EE Web规范

Jetty实现的Java EE规范主要是Servlet规范,最新的Java EE平台介绍了一个新的Web 规范,建议开发者只需要大部分技术中的一部分即可。然而Jetty没有实现Web 规范中所有的技术,Jetty设计为一个容器,可以使用插件自由扩展想要的功能。

1.3.1 Java EE 7 Web规范

在Java EE7的规范中,更新了一些重要的功能以及添加了一些新的:

表格1.2 JavaEE7 Web Profile

JSR 名称jetty-9.1.x是否包含支持插件

JSR 340

Servlet Specification API 3.1

Yes

JSR 344

Java Server Faces 2.2 (JSF)

Yes, Mojarra or MyFaces

JSR 245 / JSR 341

Java Server Pages 2.3/Java Expression Language 3.0 (JSP/EL) Yes

Yes

JSR 52

Java Standard Tag Library 1.2 (JSTL)

Yes

Yes

JSR 45

Debugging Support for Other Languages 1.0

Yes (via JSP)

Yes (via JSP)

JSR 346

Contexts and Dependency Injection for the

JavaEE Platform 1.1 (Web Beans)

No

Yes, Weld

JSR 330

Dependency Injection for Java 1.0

No

Yes as part of a CDI implementation, Weld

JSR 316

Managed Beans 1.0

No

Yes, as part of another technology

JSR 345

Enterprise JavaBeans 3.2 Lite

No

JSR 338

Java Persistance 2.1 (JPA)

No

Yes, eg Hibernate

JSR 250

Common Annotations for the Java Platform 1.2

Yes

Partially (for non-core Servlet Spec annotations)

JSR 907

Java Transaction API 1.2 (JTA)

Yes

Yes

JSR 349

Bean V alidation 1.1

No

Yes as part of another technology eg JSF, or

a stand-alone implementation such as Hiberate Validator JSR 339

Java API for RESTful Web Services 2.0 (JAX-RS)

No

JSR 356

Java API for Websocket 1.0

No

JSR 353

Java API for JSON Processing 1.0 (JSON-P)

No

Yes, eg JSON-P reference implementation

JSR 318

Interceptors 1.2

No

Yes as part of a CDI implementation

1.3.2 Jetty EE 6 Web Profile

下面介绍JavaEE6 Web Profile,以及与Jetty的关系表格1.3. Java EE 6 Web Profile

JSR Name Included with jetty-9.0.x Pluggable

JSR 315

Servlet Specification API 3.0

Yes

JSR 314

JavaServer Faces 2.0 (JSF)

No

Yes, for example, Mojarra or MyFaces

JSR 245

JavaServer Pages 2.2/Java Expression

Language 2.2 (JSP/EL)

Yes

Yes

JSR 52

Java Standard Tag Library 1.2 (JSTL)

Yes

Yes

JSR 45

Debugging Support for Other Languages 1.0 Yes (via JSP)

Yes (via JSP)

JSR 299

Contexts and Dependency Injection for

the Java EE Platform 1.0 (Web Beans)

No

Yes, Weld or OpenWebBeans

JSR 330

Dependency Injection for Java 1.0

No

Yes as part of a CDI implementation, Weld JSR 316

Managed Beans 1.0

No

Yes, as part of another technology.

JSR 318

Enterprise JavaBeans 3.1

No

Yes, OpenEJB

JSR 317

Java Persistance 2.0 (JPA)

No

Yes, Hibernate

JSR 250

Common Annotations for the Java Platform

Yes

Partially (for non-core Servlet Spec annotations)

JSR 907

Java Transaction API (JTA)

Yes

Implementations are pluggable, such as Atomikos, JOTM,

Jencks (Geronimo Transaction Manager)

JSR 303

Bean Validation 1.0

No

Yes as part of another technology (JSF), or a stand-alone

implementation such as Hiberate Validator

1.4 在Maven中获取Jetty

1.4.1 Maven坐标

Jetty从一开始就已经存在于Maven中心了,所以Maven的坐标在最近几年也发生了变化,当Jetty基于SourceForge管理时Maven的groupId是org.mortbay.jetty,当Jetty 7来到eclipse后groupId也改变了。

Jetty的POM坐标如下

org.eclipse.jetty

jetty-project

${project.version}

1.4.2 在Maven中心的更新日志

Jetty不同版本的更新日志记录在一个叫做VERSIONS.txt的文件中,也可以在Maven中心找到,坐标如下

复制代码

org.eclipse.jetty

jetty-project

${project.version}

version

txt

复制代码

二、Jetty的使用

你可以通过多种方式将Jetty植入使用的程序中,在不同的系统中使用它,或者做为一个独立的服务器来使用,这一节介绍了后者,即作为一个单独的服务器来部署web应用。

2.1 下载Jetty

2.1.1 下载Jetty项目

Jetty的下载网页为:https://https://www.doczj.com/doc/9f15268881.html,/jetty/download.html

如果jdk环境支持尽量使用最新版本,将下载后的解压放在使用的位置,以后章节将使用JETTY_HOME或者$(jetty.home)来代表Jetty的存放路径。

2.1.2 Jetty工程简介

Jetty所有顶级目录简介:

表格2.1. Contents

Location Description

license-eplv10-aslv20.html

Jetty的许可文件

README.txt

有用的开始信息

VERSION.txt

版本信息

bin/

存放在Unix系统下运行的shell脚本

demo-base/

一个可运行包含示例web应用的Jetty服务器基目录

etc/

Jetty的配置文件

lib/

Jetty运行所必须的jar文件

logs/

日志

modules/

各个模块

notice.html

许可信息等

resources/

包含新增到classpath配置文件夹,如log4j.properties

start.ini

存放启动信息

start.jar

运行Jetty的jar

webapps/

一个用来存放运行在默认配置下的Jetty Web应用目录

2.2 运行Jetty

执行以下代码,Jetty会在默认8080端口运行

cd $JETTY_HOME

java -jar start.jar

若执行成功会输出以下信息

复制代码

2015-06-04 10:50:44.806:INFO::main: Logging initialized @334ms

2015-06-04 10:50:44.858:WARN:oejs.HomeBaseWarning:main: This instance of Jetty is not running from a separate {jetty.base} directory, this is not recommended. See documentation at

https://www.doczj.com/doc/9f15268881.html,/jetty/documentation/current/startup.html

2015-06-04 10:50:44.995:INFO:oejs.Server:main: jetty-9.3.0.v20150601

2015-06-04 10:50:45.012:INFO:oejdp.ScanningAppProvider:main: Deployment monitor

[file:///opt/jetty-distribution-9.3.0.v20150601/webapps/] at interval 1

2015-06-04 10:50:45.030:INFO:oejs.ServerConnector:main: Started

ServerConnector@19dfb72a{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}

2015-06-04 10:50:45.030:INFO:oejs.Server:main: Started @558ms

复制代码

你可以通过浏览器访问http://localhost:8080.。然而在$JETTY_HOME/webapps目录下并没有部署任何web应用,所以你将会看到一个Jetty提供的404错误页面,并不推荐在$JETTY_HOME下运行Jetty,而是建议运行一个Jetty基础应用。错误页面如下

2.2.1 基础应用例子

标准的Jetty应用,有一个demo-base的文件夹,可以不在$JETTY_HOME下运行Jetty,在demo-base文件夹下执行以下命令:

> cd $JETTY_HOME/demo-base/

> java -jar $JETTY_HOME/start.jar

成功运行将有如下信息输出:

复制代码

2015-06-04 10:55:24.161:INFO::main: Logging initialized @308ms

2015-06-04 10:55:24.431:WARN::main: demo test-realm is deployed. DO NOT USE IN PRODUCTION!

2015-06-04 10:55:24.434:INFO:oejs.Server:main: jetty-9.3.0.v20150601

2015-06-04 10:55:24.457:INFO:oejdp.ScanningAppProvider:main: Deployment monitor

[file:///opt/jetty-distribution-9.3.0.v20150601/demo-base/webapps/] at interval 1

2015-06-04 10:55:24.826:INFO:oejsh.ContextHandler:main: Started

o.e.j.w.WebAppContext@c038203{/,file:///opt/jetty-distribution-9.3.0.v20150601/demo-base/webapps /ROOT/,A V AILABLE}{/ROOT}

2015-06-04 10:55:24.929:WARN::main: test-jaas webapp is deployed. DO NOT USE IN PRODUCTION!

2015-06-04 10:55:24.978:INFO:oejsh.ContextHandler:main: Started

o.e.j.w.WebAppContext@46238e3f{/test-jaas,file:///tmp/jetty-0.0.0.0-8080-test-jaas.war-_test-jaas-an

y-9105214562680121772.dir/webapp/,A V AILABLE}{/test-jaas.war}

2015-06-04 10:55:25.162:WARN::main: async-rest webapp is deployed. DO NOT USE IN PRODUCTION!

2015-06-04 10:55:25.208:INFO:oejsh.ContextHandler:main: Started

o.e.j.w.WebAppContext@6b67034{/async-rest,[file:///tmp/jetty-0.0.0.0-8080-async-rest.war-_async-r est-any-1023939491558622183.dir/webapp/,

jar:file:///tmp/jetty-0.0.0.0-8080-async-rest.war-_async-rest-any-1023939491558622183.dir/webapp/ WEB-INF/lib/example-async-rest-jar-9.3.0.v20150601.jar!/META-INF/resources],A V AILABLE}{/as ync-rest.war}

2015-06-04 10:55:25.311:W ARN::main: test-jndi webapp is deployed. DO NOT USE IN PRODUCTION!

2015-06-04 10:55:25.386:INFO:oejsh.ContextHandler:main: Started

o.e.j.w.WebAppContext@8b96fde{/test-jndi,file:///tmp/jetty-0.0.0.0-8080-test-jndi.war-_test-jndi-any-1692053319754270133.dir/webapp/,A V AILABLE}{/test-jndi.war}

2015-06-04 10:55:25.508:WARN::main: test-spec webapp is deployed. DO NOT USE IN PRODUCTION!

2015-06-04 10:55:25.594:INFO:oejsh.ContextHandler:main: Started

o.e.j.w.WebAppContext@69930714{/test-spec,[file:///tmp/jetty-0.0.0.0-8080-test-spec.war-_test-spec-any-5518740932795802823.dir/webapp/,

jar:file:///tmp/jetty-0.0.0.0-8080-test-spec.war-_test-spec-any-5518740932795802823.dir/webapp/WE B-INF/lib/test-web-fragment-9.3.0.v20150601.jar!/META-INF/resources],A V AILABLE}{/test-spec.w ar}

2015-06-04 10:55:25.781:INFO:oejsh.ContextHandler:main: Started

o.e.j.w.WebAppContext@3eb7fc54{/proxy,file:///tmp/jetty-0.0.0.0-8080-xref-proxy.war-_xref-proxy-a ny-3068657547009829038.dir/webapp/,A V AILABLE}{/xref-proxy.war}

2015-06-04 10:55:25.786:INFO:oejsh.ContextHandler:main: Started

o.e.j.s.h.MovedContextHandler@59662a0b{/oldContextPath,null,A V AILABLE}

2015-06-04 10:55:25.951:WARN::main: test webapp is deployed. DO NOT USE IN PRODUCTION! 2015-06-04 10:55:26.248:INFO:https://www.doczj.com/doc/9f15268881.html,ContextHandler:main: Started

o.e.j.w.WebAppContext@4f83df68{/test,file:///tmp/jetty-0.0.0.0-8080-test.war-_test-any-5238659347 611323540.dir/webapp/,A V AILABLE}{/test.war}

2015-06-04 10:55:26.255:INFO:oejs.ServerConnector:main: Started

ServerConnector@5a9c4ad9{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}

2015-06-04 10:55:26.259:INFO:oejus.SslContextFactory:main: x509={https://www.doczj.com/doc/9f15268881.html,=jetty} wild={} alias=null for

SslContextFactory@23941fb4(file:///opt/jetty-distribution-9.3.0.v20150601/demo-base/etc/keystore,fi le:///opt/jetty-distribution-9.3.0.v20150601/demo-base/etc/keystore)

2015-06-04 10:55:26.269:INFO:oejs.ServerConnector:main: Started

ServerConnector@5d908d47{SSL,[ssl, http/1.1]}{0.0.0.0:8443}

2015-06-04 10:55:26.270:INFO:oejs.Server:main: Started @2417ms

复制代码

现在可以通过浏览器访问http://localhost:8080,此时可以看到一个Jetty的欢迎页面,页面上包含几个简单的例子,欢迎页面如下

警告

示例的web应用程序不一定是绝对安全的,所以不应该部署在生产环境上。

你可以通过以下命令查看示例应用的配置信息

> cd $JETTY_HOME/demo-base/

> java -jar $JETTY_HOME/start.jar --list-modules

...

> java -jar %JETTY_HOME/start.jar --list-config

...

--list-modules:此命令将返回当前服务所有可用的模块,同时也会显示本地的模块,信息包括模块实现的顺序,依赖模块以及相应的jar信息

--list-config:显示运行环境和配置文件等信息

2.2.2 创建一个新的Jetty基目录

demo-base目录是jetty.base的一个基目录,在Jetty9.1版本中新增加的。一个Jetty基目录允许配置和web应用分开部署,可以方便升级系统。Jetty默认的配置基于两个属性:

jetty.home:这个属性定义了Jetty的路径,jar包,默认模块和默认xml配置(典型有start.jar,lib等)

jetty.base:这个属性表示一个特殊Jetty服务应用的路径,包括它的日志,配置和web应用(典型有start.ini,start.d,logs和webapps)

以下命令用于创建一个新的根路径,同时激活HTTP connector和web 应用部署模块,并且拷贝一个web应用例子来部署。

复制代码

> JETTY_BASE=/tmp/mybase

> mkdir $JETTY_BASE

> cd $JETTY_BASE

> java -jar $JETTY_HOME/start.jar

WARNING: Nothing to start, exiting ...

Usage: java -jar start.jar [options] [properties] [configs]

java -jar start.jar --help # for more information

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

INFO: server initialised (transitively) in ${jetty.base}/start.d/server.ini

INFO: http initialised in ${jetty.base}/start.d/http.ini

INFO: security initialised (transitively) in ${jetty.base}/start.d/security.ini

INFO: servlet initialised (transitively) in ${jetty.base}/start.d/servlet.ini

INFO: webapp initialised (transitively) in ${jetty.base}/start.d/webapp.ini

INFO: deploy initialised in ${jetty.base}/start.d/deploy.ini

MKDIR: ${jetty.base}/webapps

INFO: Base directory was modified

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

> java -jar $JETTY_HOME/start.jar

2015-06-04 11:10:16.286:INFO::main: Logging initialized @274ms

2015-06-04 11:10:16.440:INFO:oejs.Server:main: jetty-9.3.0.v20150601

2015-06-04 11:10:16.460:INFO:oejdp.ScanningAppProvider:main: Deployment monitor

[file:///tmp/mybase/webapps/] at interval 1

2015-06-04 11:10:16.581:W ARN::main: async-rest webapp is deployed. DO NOT USE IN PRODUCTION!

2015-06-04 11:10:16.589:INFO:oejw.StandardDescriptorProcessor:main: NO JSP Support for /, did not find org.eclipse.jetty.jsp.JettyJspServlet

2015-06-04 11:10:16.628:INFO:oejsh.ContextHandler:main: Started

o.e.j.w.WebAppContext@1a407d53{/,[file:///tmp/jetty-0.0.0.0-8080-ROOT.war-_-any-451022802552 6425427.dir/webapp/,

jar:file:///tmp/jetty-0.0.0.0-8080-ROOT.war-_-any-4510228025526425427.dir/webapp/WEB-INF/lib/ example-async-rest-jar-9.3.0.v20150601.jar!/META-INF/resources],A V AILABLE}{/ROOT.war} 2015-06-04 11:10:16.645:INFO:oejs.ServerConnector:main: Started

ServerConnector@3abbfa04{HTTP/1.1,[http/1.1]}{0.0.0.0:8080}

2015-06-04 11:10:16.646:INFO:oejs.Server:main: Started @634ms

复制代码

以上命令是Linux下的命令,简单解释:创建一个JETTY_BASE环境变量,并创建指定的文件夹,在此文件夹下运行start.jar时提示没有可以启动的东西,系统退出,此时输入java -jar $JETTY_HOME/start.jar --add-to-startd=http,deploy命令为当前基目录添加标准文件及文件夹,然后java -jar $JETTY_HOME/start.jar运行即可运行成功。在Windows下操作如下:

(1)可以手动创建一个空的文件夹,本例使用D:\temp\jetty

(2)在CMD中定位到当前目录下,输入java -jar

D:\data\frame\jetty-distribution-9.3.11.v20160721\start.jar (注:

D:\data\frame\jetty-distribution-9.3.11.v20160721目录为我的电脑Jetty目录,请输入本机Jetty目录)输出信息如下:

(3)输出结果同Linux,再次输入java -jar D:\data\frame\jetty-distribution-9.3.11.v20160721\start.jar --add-to-startd=http,deploy,输出信息如下:

(4)提示信息中说明创建了哪些文件,已经基目录被修改等信息,此时到新建的基目录下可以看到如下新增的东西:

jetty

|-start.d

|-deploy.ini

|-http.ini

|-server.ini

|-webapps

(5)启动后,会同样看到404页面,也可同上面的方法,拷贝ROOT项目到当前基目录的webapps 下

2.2.3 改变Jetty的端口

通过在启动命令中设置jetty.http.port属性的值,可以让Jetty运行在修改后的端口上。

> cd $JETTY_BASE

> java -jar $JETTY_HOME/start.jar jetty.http.port=8081

...

另外,可以将要设置的端口属性添加到start.ini或者start.d/http.ini文件中。默认情况,在start.d/http.ini文件中定义的jetty.http.port属性可以被修改成另一个值。

提示

配置属性信息通过如下方式获得

首先去start.d/http.ini文件中找jetty.http.port=8080配置信息,若找到配置端口即为指定端口

根据模块modules/http.mod文件找到指定配置默认为etc/jetty-http.xml,在此配置文件中有jetty.http.port配置信息,若找到即为此端口配置

若上面两个都没有,则随机一个没有使用的端口

2.2.4 为HTTPS & HTTP2增加SSL

可通过如下命令,添加并激活HTTPS和HTTP2模块

复制代码

> java -jar $JETTY_HOME/start.jar --add-to-startd=https,http2

[...]

> java -jar $JETTY_HOME/start.jar

[...]

2015-06-04 13:52:01.933:INFO:oejs.ServerConnector:main: Started

ServerConnector@6f1fba17{SSL,[ssl, alpn, h2, http/1.1]}{0.0.0.0:8443}

[...]

复制代码

--add-to-startd:此命令在ini文件中设置有效的配置信息,使HTTPS和HTTP2支持SSL连接

输入java -jar $JETTY_HOME/start.jar --add-to-startd=https,http2命令后会提示下载一些jar 包,输入y按回车,最终提示信息如下,说明操作成功:

2.2.5 修改Jetty的HTTPS端口

你可以通过增加jetty.ssl.port启动参数来修改HTTPS的端口信息

> cd $JETTY_BASE

> java -jar $JETTY_HOME/start.jar jetty.ssl.port=8444

除了在命令行增加参数的方法外,还可以在start.ini和start.d/*.ini文件中进行配置,所以如果用户使用--add-to-startd命令来使HTTPS生效,同样也可以在start.d/https.ini文件中进行修改。

2.2.6 更多的start.jar操作选项

start.jar的工作是用来翻译命令行内容的,start.ini和start.d目录(包含其中的*.ini文件)生成一个classpath环境,各种属性和配置可以使用Jetty相应的xml进行配置,更多的使用方法可以通过使用命令来获得帮助。

> java -jar $JETTY_HOME/start.jar --help

2.3 部署Web应用

Jetty支持热部署,可以自动部署webapps目录下的项目。标准的war文件和Jetty配置文件放置在webapps目录下,通过以下规则进行热部署

例如一个包含WEB-INF/ 子文件夹的example/文件夹做为一个标准的web应用进行部署,否则就按静态资源部署,context路径为/example(访问路径:http://localhost:8080/example/);若文件夹名字为ROOT,则访问路径为/;若文件夹名字末尾为.d则此文件夹被忽略(除非被特殊的配置文件引用)

若一个文件example.war被部署在webapps下,则context路径为example/,如果名字为ROOT 则访问路径为/,如果example.war文件和example/文件夹同时存在,只有war文件会被部署(这个文件会被当做一个没有被解压的目录来使用)

一个像example.xml的配置文件,若文件中是标准的配置信息,也会被部署,文件中必须包含context path,如果context path和example.xml同时存在,只有example.xml会被部署。

如果你有一个标准的web应用,可以直接将其拷贝到webapps文件夹下进行热部署。

2.3.1 Jetty示例Web Application

demo-base/webapps文件下的项目包含如下部署和附加的的文件:

ROOT/:这个文件夹包含各种静态资源。包含Jetty欢迎页面,默认访问路径为/

test.d:一个包含附加配置文件的文件夹,被test.xml使用用来为test.war增加额外的配置test.xml:一个context配置文件,用来配置和部署test.war,包含上下文环境和test.d里面的配置附加的配置信息

test.war:在test.xml里面配置的示例web程序

async-rest.war:一个异步示例的web应用程序

test-jaas.war:一个使用JAAS身份验证的web应用程序。

test-jaas.xml:用来配置test-jaas.war的配置文件

test-jndi.war:一个使用JNDI的示例应用

test-jndi.xml:用来配置test-jndi.war的配置文件

test-spec.war:一个使用注解,ServletContainerInitializers 和Servlet 3.0/3.1规范的示例应用test-spec.xml:用来配置test-spec.war的配置文件

xref-proxy.war:使用代理的一个示例应用

example-moved.xml:一个演示MovedContextHandler重定向使用的示例应用

三、Jetty配置信息介绍

3.1如何配置jetty

3.1.1 Jetty POJO 配置

Jetty的核心组件是POJO(Plain Old Java Objects),配置Jetty的过程就是实例化一个Jetty POJOs并对其进行配置的过程,可以通过如下实现:

编写Java代码来直接实例化并配置Jetty对象,这称为嵌入式Jetty。

使用Jetty的xml配置文件,这是一个控制反转框架模式,从xml文件中实例化Jetty对象。etc/jetty.xml配置文件是Jetty的主要配置文件,但是也有很多etc/jetty-__feature__.xml类型的文件被Jetty使用

使用第三方IOC框架,如Spring来实例化Jetty对象做为一个Spring Beans

因为配置Jetty的主要方法是IoC,所以这个文档主要介绍此种方法。

3.1.2 Jetty启动配置文件

Jetty使用如下配置文件来实例和启动一个服务,通过start.jar处理

ini files:

Jetty启动原理使用命令行,使用$JETTY_BASE/start.ini和$JETTY_BASE/start.d/*.ini文件来创建一个有效的命令参数参数如下:

激活的模块--module=name

通过name=value的来为Jetty的IOC配置属性

XML files in Jetty IoC (or Spring) XML format

一个标准的Java属性文件包含额外的启动属性

其他start.jar选项(see java -jar start.jar --help)

一些JVM参数组合通过--exec,例如-Xbootclasspath.

提示

在Jetty9,只有Jetty基路径下的配置文件被编辑,属性才会被修改

mod files:

$JETTY_HOME/modules/*.mod文件包含各个模块的定义,可以被--module=name命令激活,每个mod文件定义:

模块依赖如何排序以及激活

被模块需要并且要就在到classpath的jar包

被模块需要并且内容会被执行的xml文件

被激活模块需要的文件

一个示例的ini文件,当被-add-to-start=name选项激活时使用

Note

常见典型的模块配置信息通长很少被改动,*.mod文件通常位于$JETTY_HOME/modules/文件夹下,但是额外增加的或者编辑过的通常放在$JETTY_BASE/module下,如果一个模块需要被修改,最好的做法是在修改前从$JETTY_HOME/modules/拷贝*.mod到$JETTY_BASE/modules/

XML files:

xml文件一般用与IoC以及spring使用,用在命令行或者模块定义中。xml文件里面的配置将被注入到描述服务的一个对象里。通常改变属性的方法是改变对应的ini文件。xml文件通常放在$JETTY_HOME/etc/下,但是新增的或者被编辑的xml应该被放在$JETTY_BASE/etc/下,如果xml配置文件有修改的必要,最好的做法是在修改前将xml文件从$JETTY_HOME/etc拷贝到$JETTY_BASE/etc/ 。

下图是各种配置文件(ini, mod 和XML)的关系

3.1.3 其它配置文件

除了上面描述的配置文件以外,服务的配置信息可以使用如下的文件:

Context XML files:

所有在/webapps目录下用来被IoC使用的xml文件,用来部署相应的模块,注入信息到HttpContext ,最终创建一个容器。这些可能是标准的web应用程序或定制上下文创建的特殊目的的处理器。

web.xml:

web.xml用来定义和配置过滤器,servlet或者资源。Jetty WebAppContext组件使用这个XML 文件用来:

设置一个web项目的默认的根路径

通过WEB-INF/web.xml进行特殊的配置

Interpret descriptor fragments included in the META-INF directory of Jar files within WEB-INF/lib.

Note

通常web应用的web.xml文件应该在WEB-INF/web.xml位置被发现,Jetty还支持多个web.xml,可以在WEB-INF/web.xml文件加载前或者加载后加载(使用方法见test.xml)

Property Files:

标准的Java配置文件,同样适用于Jetty配置:

可以为Jetty IoC增加参数

配置默认日志信息(StdErrLog),其他日志框架也可以通过配置被使用(例如,log4j)

数据库的登录配置信息等

3.1.4 Jetty IoC XML使用

为了理解Jetty IOC XML使用方法,如下面的示例Java中,嵌入式Jetty服务器实例并配置复制代码

//

//

======================================================================== // Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd.

// ------------------------------------------------------------------------

// All rights reserved. This program and the accompanying materials

// are made available under the terms of the Eclipse Public License v1.0

// and Apache License v2.0 which accompanies this distribution.

//

// The Eclipse Public License is available at

// https://www.doczj.com/doc/9f15268881.html,/legal/epl-v10.html

//

// The Apache License v2.0 is available at

// https://www.doczj.com/doc/9f15268881.html,/licenses/apache2.0.php

//

// You may elect to redistribute this code under either of these licenses.

//

======================================================================== //

package org.eclipse.jetty.embedded;

import org.eclipse.jetty.server.Connector;

import org.eclipse.jetty.server.Handler;

import org.eclipse.jetty.server.Server;

import org.eclipse.jetty.server.ServerConnector;

import org.eclipse.jetty.server.handler.DefaultHandler;

import org.eclipse.jetty.server.handler.HandlerCollection;

import org.eclipse.jetty.servlet.ServletContextHandler;

public class ExampleServer

{

public static void main( String[] args ) throws Exception

{

Server server = new Server();

ServerConnector connector = new ServerConnector(server);

connector.setPort(8080);

server.setConnectors(new Connector[] { connector });

ServletContextHandler context = new ServletContextHandler();

context.setContextPath("/");

context.addServlet(HelloServlet.class, "/hello");

context.addServlet(AsyncEchoServlet.class, "/echo/*");

HandlerCollection handlers = new HandlerCollection();

handlers.setHandlers(new Handler[] { context, new DefaultHandler() });

server.setHandler(handlers);

server.start();

server.join();

}

}

复制代码

注意事项:

注意Jetty的最低使用的jdk版本,最新版本使用jdk1.8

HelloServlet是一个继承了HttpServlet的servlet

运行成功后程序会被挂起,等待用户连接,在浏览器中输入http://localhost:8080/hello即可访问Jetty IoC XML format也允许用户通过XML来实例化应用服务而不用写任何代码(下面配置文件的具体使用方法以后会讲到)

复制代码

"https://www.doczj.com/doc/9f15268881.html,/jetty/configure_9_3.dtd">

8080

/hello

org.eclipse.jetty.embedded.HelloServlet

/

复制代码

3.2 可以在Jetty中配置什么

这一节将介绍Jetty常用的配置。

3.2.1 配置服务

Server实例是Jetty服务的重要组成部分,它为其它Jetty组件提供服务和生命周期管理。在标准的Jetty应用中,核心的配置信息在etc/jetty.xml文件中,但是你也可以在配置文件中添加其它配置,包括:

ThreadPool:

服务器实例提供了一个默认ThreadPool实例,用来供其它组件调用。配置线程池的主要参数有最大和最小数量的设置,设置在start.ini文件或者start.d/server.ini文件中。

Handlers:

一个Jetty服务器可以只有一个处理程序实例来处理传入的HTTP请求。然而一个处理程序可能是一个容器或包装其他处理程序形成一个树的处理程序。在etc/jetty.xml文件中配置的默认的处理程序包含处理程序集合和一个默认的处理程序,根据路径找到相应的处理程序,默认的处理器处理404错误。其他配置信息可以增加到处理树中(例如,jetty-rewrite.xml,

jetty-requestlog.xml),或者配置一个组件用于热部署处理(例如,jetty-deploy.xml)。Server Attributes:

服务器可以通过字符串来映射到一个对象上,如果一个对象实现了LifeCycle接口,那么这个对象可以监听这个Jetty服务的启停。通常服务器的属性保存在服务器生命周期内。

Server fields:

服务器也有一些特殊的的配置属性,配置在start.ini或者start.d/server.ini文件中,除了控制属性外还有发送时间和http响应的版本。

Connectors:

服务器拥有一个连接的集合,用来接收http请求,和其它Jetty支持的协议请求,下一章节将要介绍配置连接。对于服务器可以设置所有的连接也可以增加或者删除个别连接。Services:

服务器能容纳额外的服务对象,有时作为属性,但经常做为有生命周期的bean。

3.2.2配置连接

Jetty服务器连接器是一个网络端点接受连接一个或多个协议产生Jetty服务器的请求或消息。在标准Jetty服务器中,可以通过额外的文件增加Jetty服务器支持的协议,例如http.ini,https.ini 和jetty-http2.xml,连接的配置一般都是典型的,如下:

Port:

监听TCP/IP连接请求的端口,使用jetty.http.port(或者jetty.ssl.port)属性进行配置,如果没有配置默认8080(TLS默认8443)。

Host:

您可以配置一个主机的主机名或IP地址来识别一个特定的网络接口的监听。如果没有设置,或者设置为0.0.0.0,连接器将监听所有主机。可以通过xml文件中jetty.host的这个属性进行设置。Idle Timeout:

时间以毫秒为单位,一个连接的超时时间。

HTTP Configuration:

通过HttpConfiguration 实例来配置HTTP连接(包含HTTP,HTTPS 和HTTP2),可以独立于特定的网络协议,标准的Jetty服务通过jetty.xml来配置一个单例的HttpConfiguration对象。

SSL Context Factory:

通过本地的密钥来保证ssl连接的安全性。

Kettle开源ETL平台_安装配置及使用说明v1.1

KETTLE 开源ETL软件】【安装配置与使用说明】 2015 年09 月

修订记录

目录 修订记录 (2) 1.安装与配置 (4) 1.1ETL 与K ETTLE概述 (4) 1.2K ETTLE的下载与安装 (7) 1.2.1Windows下安装配置 ............................................ Kettle 8 1.2.2Linux 下安装配置.................................................. Kettle 10 1.2.3Kettle 下安装..................................................... JDBC数据库驱动15 1.2.4下配置资源库连接 (15) 1.2.5Kettle 下 Hadoop Plugin 插件配置 (17) 2.KETTLE组件介绍与使用 (19) 2.1K ETTLE SPOON使用 (19) 2.1.1组件树介绍 (20) 2.1.2使用示例.......................................................... 1 23 2.1.3使用示例.......................................................... 2 37 2.1.4使用Kettle 装载数据到..................................... HDFS 48 2.1.5使用Kettle 装载数据到 (iv) 52 2.1.6使用 Kettle 进行 hadoop的 mapreduce图形化开发 (52) 2.2K ETTLE PAN的使用 (63) 2.3K ETTLE KITECHEN的使用 (64) 2.4C ARTE添加新的ETL执行引擎 (65) 2.5E NCR加密工具 (68)

Tomcat-JBoss-Weblogic-Jetty的区别和介绍

一.Jetty 的基本架构 Jetty 目前的是一个比较被看好的 Servlet 引擎,它的架构比较简单,也是一个可扩展性和非常灵活的应用服务器,它有一个基本数据模型,这个数据模型就是 Handler,所有可以被扩展的组件都可以作为一个 Handler,添加到 Server 中,Jetty 就是帮你管理这些Handler。 整个 Jetty 的核心组件由 Server 和 Connector 两个组件构成,整个 Server 组件是基于Handler 容器工作的,它类似与 Tomcat 的 Container 容器,Jetty 与 Tomcat 的比较在后面详细介绍。Jetty 中另外一个比不可少的组件是 Connector,它负责接受客户端的连接请求,并将请求分配给一个处理队列去执行。 它的所有组件都是基于 Handler 来实现 Jetty 中还有一些可有可无的组件,我们可以在它上做扩展。如 JMX,我们可以定义一些Mbean 把它加到 Server 中,当 Server 启动的时候,这些 Bean 就会一起工作。 Jetty 可以基于 AJP 协议工作,在正常的企业级应用中,Jetty 作为一个 Servlet 引擎都是基于 AJP 协议工作的,所以它前面必然有一个服务器,通常情况下与 Jboss 集成的可能性非常大 Tomcat 和 Jetty 都是作为一个 Servlet 引擎应用的比较广泛,可以将它们比作为中国与美国的关系,虽然 Jetty 正常成长为一个优秀的 Servlet 引擎,但是目前的 Tomcat 的地位仍然难以撼动。相比较来看,它们都有各自的优点与缺点。 Tomcat 经过长时间的发展,它已经广泛的被市场接受和认可,相对 Jetty 来说 Tomcat 还是比较稳定和成熟,尤其在企业级应用方面,Tomcat 仍然是第一选择。但是随着 Jetty 的发展,Jetty 的市场份额也在不断提高,至于原因就要归功与 Jetty 的很多优点了,而这些优点也是因为 Jetty 在技术上的优势体现出来的。 架构比较 从架构上来说,显然 Jetty 比 Tomcat 更加简单

Eclipse插件RunJettyRun的安装与使用

Eclipse插件——RunJettyRun的安装与使用 关于Jetty与Eclipse的集成,网上很多都是使用Eclipse的一个自动安装功能——Software Update。个人不太喜欢这种方式。这种安装方式有点问题:第一,需要网络流畅;第二,安装很慢。 所以,我选择手动安装的方式。只需要下载一个很小的jar包。 也许有人会说,MyEclipse不是已经以 Servers 的形式集成了Jetty了吗?就像Tomcat一样。 以插件的形式集成的Jetty的好处是:不用部署(deploy)项目,直接选中项目,右键 - Run As / Debug As 就可以运行。 话不多说。开始Jetty的HelloWorld之旅吧! 下载 插件下载地址:runjettyrun_1.3.1.jar 安装 1、将下载的runjettyrun_1.3.1.jar文件复制到 D:\eclipse \plugins 目录下。 2、重启Eclipse。 3、菜单栏选择 Run Run Configurations,出现如下图的界面。可以看到,多了一个 Jetty Webapp 分支。

使用 1、新建一个 Web Project 。可取名 JettyTest 。 2、选中项目中的 Java EE 5 Libraries ,右 键 > Build Path > Remove from Build Path 。(注意:这个一定要删掉。不然项目启动不起来。)

3、在项目自动生成的 index.jsp 文件里,标签中加入以下代码:

Hello World for Jetty!!!!!!

4、选中项目,右键 > Run As (Debug As) > Run Jetty ,你会看到控制打印了些启动信息。 5、测试 打开IE,在地址栏中输入 http://localhost:8080/JettyTest ,你会看到如下的页面: 6、其他配置 Jetty的默认端口是 8080 。如果想要更改,回到本文第一张图片 的 Debug/Run Configurations ,如图。点开 Jetty Webapp 前的 + 标志,你会看到有了个 JettyTest 。因为前面运行过了,所以它自动加载了。如果没有也没关系,可以自己新建(如图,左上角的第一个)。

第7章 配置打印服务器_Z_2.0

第7章配置打印服务器 内容: ↘打印概述 ↘打印服务器 ↘添加打印机 ↘配置后台打印文件夹 ↘打印机的优先级 ↘打印池 ↘多客户端支持 ↘管理打印机 ↘打印权限 ↘配置Internet打印 ↘利用分隔页分隔打印文档 Windows Server 2008提供强有力的打印管理功能,不但可以减轻系统管理员的负担,还可以让用户轻易地打印文件。 7.1 Windows Server 2008打印概述 Windows Server 2008所提供的打印功能主要有: ↘用户使用Windows Server 2008家庭中的产口,可以在整个网络范围内共享打印资源。各种计算机和操作系统上的客户端,可以通过Internet将打印作业发送到运行Windows Server 2008家族操作系统的打印服务器所连接的本地打印机,或者发送到使用内置或外围网卡连接到网络或其他服务器的打印机。 ↘Windows Server 2008家族中的产品支持多种高级打印功能。例如,无论运行Windows Server 2008家族操作系统的打印服务器位于网络中的哪个位置,管事员都可以对它进行管理。另一项高级功能是,客户不必在Windows XP客户端计算机安装打印机驱动程序就可以使用打印机。当客户端连接运行Windows Server 2008家族操作系统的打印服务器订购时,驱动程序将自动下载。 ↘Windows Server 2008家族中的产品便利管理员更加容易在一个中心位置安装网络打印机和配置打印资源。客户可以配置运行Microsoft Windows 98或Microsoft Windows NT 操作系统的客户端计算机来访问网络打印设备,以实现打印。 我们介绍一些在Windows Server 2008打印上的几个术语,如图7-1所示。 ↘打印设备:也就是一般常说的打印机,换句话说,它就是可以放打印纸的物理打印机。 ↘打印机(逻辑打印机):在Windows Server 2008中,所谓“逻辑打印机”,并不是指物理设备,而是介于应用程序与打印设备之间的软件接口,用户的打印文档就是通过它发送给打印设备。 无论是打印设备,还是逻辑打印机,它们都可以被简称为“打印机”。不过为了避免混

Jetty Netty对比性能测试

Jetty Netty对比性能测试 测试工具:Apache2 ab 测试客户端:192.168.12.143 CPU: Intel(R) Xeon(R) CPU E5410 @ 2.33GHz * 8 内存:16,406,980k total 测试服务器:192.168.199 CPU:Intel(R) Xeon(R) CPU E5520 @ 2.27GHz * 16 内存: 49,432,720k total JVM: java version "1.6.0_24" Java(TM) SE Runtime Environment (build 1.6.0_24-b07) Java HotSpot(TM) Server VM (build 19.1-b02, mixed mode) JVM启动参数: -Xss128k -Xms2048m -Xmn1024m -Xmx2048m -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -verbose:gc -XX:+PrintGCDetails 其他: Netty: bossExecutor, workerExecutor均使用单独的CachedThreadPool启动:NioServerSocketChannelFactory(Executors.newCachedThreadPool(), Executors.newCachedThreadPool(); 业务交给单独的CachedThreadPool处理。 Jetty:版本:jetty-hightide-8.0.0.M2,默认配置。 AB:总共发送40000个请求。 并发量测试 无业务,返回数据小于1KB。并发与吞吐量:

jetty的基本架构

jetty的基本架构 Jetty 的基本架构 Jetty 目前的是一个比较被看好的 Servlet 引擎,它的架构比较简单,也是一个可扩展性和非常灵活的应用服务器,它有一个基本数据模型,这个数据模型就是 Handler,所有可以被扩展的组件都可以作为一个 Handler,添加到Server 中,Jetty 就是帮你管理这些 Handler。 Jetty 的基本架构 下图是 Jetty 的基本架构图,整个 Jetty 的核心组件由 Server 和Connector 两个组件构成,整个 Server 组件是基于 Handler 容器工作的,它类似与 Tomcat 的 Container 容器,Jetty 与 Tomcat 的比较在后面详细介绍。Jetty 中另外一个比不可少的组件是Connector,它负责接受客户端的连接请求,并将请求分配给一个处理队列去执行。 图 1. Jetty 的基本架构Jetty 中还有一些可有可无的组件,我们可以在它上做扩展。如 JMX,我们可以定义一些 Mbean 把它加到 Server 中,当Server 启动的时候,这些 Bean 就会一起工作。 图 2. Jetty 的主要组件的类图从上图可以看出整个 Jetty 的核心是围绕着Server 类来构建,Server 类继承了 Handler,关联了 Connector 和 Container。Container 是管理 Mbean 的容器。Jetty 的 Server 的扩展主要是实现一个个 Handler 并将 Handler 加到 Server 中,Server 中提供了调用这些 Handler 的访问规则。 整个 Jetty 的所有组件的生命周期管理是基于观察者模板设计,它和Tomcat 的管理是类似的。下面是 LifeCycle 的类关系图每个组件都会持有一个观察者(在这里是 Listener 类,这个类通常对应到观察者模式中常用的 Observer 角色,关于观察者模式可以参考《Tomcat系统架构与设计模式,第2部分:设计模式分析》一文中关于观察者模式的讲解)集合,当 start、fail 或 stop 等事件触发时,这些 Listener 将会被调用,这是最简单的一种设计方式,相比 Tomcat 的 LifeCycle 要简单的多。Handler 的体系结构 前面所述 Jetty 主要是基于 Handler 来设计的,Handler 的体系结构影响着整个 Jetty 的方方面面。下面总结了一下 Handler 的种类及作用:

jetty服务器的安装和部署、新 增到开机启动服务

Jetty的首页地址是https://www.doczj.com/doc/9f15268881.html,/jetty/,点击Downloads 进入下载介绍页面,由于Jetty7之后,托管服务有Eclipse接替,所以jetty6.1之前(包含6.1)继续由Codehaus提供下载服务,在该页面的下方有如下信息: 版本 Java HTTP Servlet JSP Status Notes Jetty-8 eclipse 1.6- HTTP/1.1 RFC2616 3.0 2.2 Development Standardized async Jetty-7 eclipse 1.5- HTTP/1.1 RFC2616 2.5 2.1 Almost stable org.eclipse.jetty Jetty-6.1 1.4-1.6 HTTP/1.1 RFC2616 2.5 2.1 or 2.0 Stable Async SSL, AJP, cometd, testing Jetty-6 1.4-1.5 HTTP/1.1 RFC2616 2.5 2.1 or 2.0 Deprecated Continuations, IOC, NIO, dynamic buffers, smaller, faster, better Jetty-5.1 1.2-1.5 HTTP/1.1 RFC2616 2.4 2.0 Stable J2EE 1.4 Compliance tested, optimizations, geronimo integration. Jetty-5.0 1.2-1.4 HTTP/1.1 RFC2616 2.4 2.0 Deprecated Schema, JettyPlus Jetty-4.2 1.2-1.4 HTTP/1.1 RFC2616 2.3+ 1.2 Mature JettyPlus Jetty-4.1 1.2-1.4 HTTP/1.1 RFC2616 2.3 1.2 Deprecated JAXP1.1, AJP13(mod_jk) Jetty-4.0 1.2 HTTP/1.1 RFC2616 2.3 1.2 Deprecated Jetty-3.1 1.2 HTTP/1.1 RFC2068 2.2 1.1 Ancient JMX Jetty-3.0 1.2 HTTP/1.1 RFC2068 2.2 1.1 Fossilized Jetty-2.4 1.1 HTTP/1.0 RFC1945 2.1 1.0 Legendary Jetty-1.0 1.0 HTTP/1.0 RFC1945 - - Mythical 本书讨论的Jetty版本是6.1,也是目前使用最多的稳定版本,我们到https://www.doczj.com/doc/9f15268881.html,/jetty/jetty-6.1.22/下载6.1系列最新的6.1.22版本:

Jetty 源码分析

Jetty 源码分析 在文库看到一个关于jetty源码分析的PDF文档,发现该文档根本不全,遂在 网上又找到了关于此文档内容的网站,将其网页内容拷贝了出来,供大家浏览! 一、总括 你了解Jetty 吗,就像我们所熟知的Tomcat一样, Jetty是一个免费的开放源码的100%纯Java的Http服务器和Servlet容器。 Jetty具备以下特点: 快速高效 。Jetty是最快的Servlet服务器之一 。Jetty可以处理上千个并发连接 小巧嵌入 。Jetty的jar只有600多K 。可动态嵌入到应用程序,适合开发web2.0等应用 应用广泛 。开源项目有Geronimo, JBoss, JOnAS等 。商业项目有IBM Tivoli, Sonic MQ and Cisco SESM等 可到Jetty网站 https://www.doczj.com/doc/9f15268881.html,/jetty/查看最新信息 本文将通过对Jetty最新稳定版Jetty5.1.5RC2 源码的研究,向读者展示Jetty在设计方面使用的不同设计理念, 希望对广大开发者在设计自己的系统时有所帮助。 Jetty按照功能可以分为四个主个主要的部分,HttpServer, HttpContext,HttpHandler,HttpListener,详见如下类图:

<图1-1> 二、HttpServer及配置 对于初次接触Jetty的人一定会对上图感到迷惑,其实在Jetty中HttpServer是一个服务器的核心控制类, 我们可以看到,其它的组件类都是由该类扩展开来,HttpServer的作用就是在一系列的监听器类和处理器类之间搭起了一个桥梁,有效的控制着消息在系统内的传递,如下图: <图1-2 > HttpServer职责是接受从HttpListener传递过来的request(请求),HttpServer通过对request的Host(主机)或Path(路径)进行匹配,然后分发给相应的HttpContext(可以理解为一个web application)。

JAVA WEB入门之一:搭建JFINAL框架

Java web入门之一:搭建JFinal框架 一、创建项目 1、启动eclipse,切换至java EE视图 2、创建Dynamic Web Project项目,项目名自定,示例项目名为webdemo,Target Runtime 选None,Dynamic web module version选择2.5

3、修改Default Output Folder,推荐输入WebRoot\WEB-INF\classes 特别注意:此处的Default out folder必须要与WebRoot\WEB-INF\classes目录完全一致才可以使用JFinal集成的Jetty来启动项目。

4、修改Content directory,推荐输入WebRoot 注意:此处也可以使用默认值WebContent,但上一步中的WebRoot\WEB-INF\classes则需要改成WebContent\WEB-INF\classes才能对应上。

5、放入JFinal库文件 将jfinal-1.9-bin-with-src.jar与jetty-server-8.1.8.jar拷贝至项目WEB-INF\lib下即可。注意:jetty-server-8.1.8.jar是开发时使用的运行环境,生产环境不需要此文件。

6、修改web.xml 将如下内容添加至web.xml jfinal com.jfinal.core.JFinalFilter configClass demo.DemoConfig jfinal /* 如图所示:

jetty下载启动配置详解及和maven结合pom配置

1、jetty下载地址 首页 https://www.doczj.com/doc/9f15268881.html,/jetty/选择下载版本下载,下载下来之后解压 2、我是windows 启动命令java -jar start.jar etc/jetty.xml 默认8080 端口访问http://localhost:8080/test/test自带工程出现welcome页面 把自己的项目拷贝到D:\jetty-6.1.0\webapps (我的是d 盘,自己的位置自己改下)执行启动命令然后访问 制作Jetty bat启动文件 @ECHO OFF D: cd D:\jetty-6.1.0 echo 启动Jetty... pause java -jar start.jar etc/jetty.xml 3、Jetty服务配置etc\jetty.xml 修改访问端口: 30000 1 false 8443 1000 500 其它配置https://www.doczj.com/doc/9f15268881.html,/blog/601186

JettY 部署Web应用程序

第5章部署Web应用程序 当我们编写好一个web应用程序,如何交付给Jetty容器来运行呢?这也就是所谓“部署web应用程序”。 本章将介绍如何在Jetty中部署web应用,以及在Jetty的构架体系中是如何实现web应用部署的。 5.1 常用术语 为了使本章中讨论的内容能得到大家一致的理解,本节先明确一些专业术语,避免大家造成误解。 web应用程序(Web Application) 经常会说到这个词,大家也不难理解,就是由一组文件构成的集合,这些文件可能包含html文件、图像文件、java编译后的class文件,配置文件等等所有可能出现的文件。符合Servlet规范的应用程序还要求目录下存在一个WEB-INF的文件夹,在里面还必须存在一个web.xml的web部署配置文件,关于这个目录和web.xml的内容格式都是Servlet规范中定义的。根据Servlet规范我们还可以web应用程序整个目录打包成 war文件。 上下文(Context) 上下文是我们经常听到的词汇,可以使用在各种专业场合,但当我谈论web应用程序的时候,是这样的意思。 首先看一个名为Example的web应用程序的访问URL, https://www.doczj.com/doc/9f15268881.html,/example /index.jsp。可以发现要访问这个Example应用,所有的路径都需要加前缀“/example”,换句话说,就是该应该的访问地址都符合 https://www.doczj.com/doc/9f15268881.html,/example/* 这种模式。所有已https://www.doczj.com/doc/9f15268881.html,/example/开头的请求都将有Example应用程序处理。 这就是上下文的概念了。有了上下文的概念后,一个web服务下就可以部署多套不同的web应用程序了,且不同的应用程序不会造成混乱。 上下文路径(Context Path) 在术语上下文的中,我们举例的“/example”就是上下文路径。同一个服务器下的不同的web应用就应该有不同的上下文路径。 注意:上下文路径必须以“/”开头,且不能以“/”结尾。

Jetty 9嵌入式开发手册

Jetty 9嵌入式开发手册 Jetty有一个标语,“不要部署你的应用在Jetty上,部署Jetty在你的应用中”。这意味着可选择使用Jetty捆绑你的应用作为一个标准 WAR进行部署。Jetty设计成一个软件组件,可以实例化并且使用在Java程序中,例如:如何POJO。但是另外一种方法,以嵌入式模式运行 Jetty,这意味着把HTTP模块放入到你的应用中,而不是把你的应用放入到HTTP服务中。 本教程引导你逐步从最简单的Jetty服务实例到使用标准部署描述运行多个Web应用。大部分示例的源代码是标准Jetty项目的一部分。 在学习该教程之前,完成一个HelloWorld教程是值得的。该教程可以在“嵌入式Jetty网络研讨会记录”中找到。 Jetty版本:本教程的代码来自于Jetty7,但是也应该在Jetty 8中可以使用。对于最新的稳定版本,参考最新发行版的链接代码。可能与本教程中给出的代码例子有稍微的不同。 概述 为了嵌入Jetty服务,通常执行下面的步骤: 1)创建一个服务 2)添加和配置连接器 3)添加和配置处理器 4)添加和配置Servlet、Webapp到处理器 5)启动服务 6)等待(join服务防止主线程退出) 创建一个服务 下面的代码来自于SimplestServer.jar,实例化和运行一个最简单的Jetty服务 https://www.doczj.com/doc/9f15268881.html,/jetty/stable-9/xref/org/eclipse/jetty/emb edded/SimplestServer.html public class SimplestServer

SCA软件架构

SCA软件架构 一、SCA(Service Component Architecture)软件架构的概述SCA是一个开发SOA(Service-Oriented Architecture)面向服务应用的简单模型规范,它描述用于使用SOA构建应用程序和系统的模型。它可简化使用SOA进行的应用程序开发和实现工作。SCA仅仅是个规范,各个涉及SOA技术的公司的实现也各不相同。 SCA是由Open Service Oriented Architecture collaboration 提出的一种组件化的面向服务编程模型,并于2007年正式捐献给OASIS组织。 SCA提供了服务组件模型、装配模型和策略框架来支持各种异构应用的封装和集成。同SCA并列提出的SDO规范,定义了SOA应用程序中访问各种异构数据源的方法。组件可以以各种不同的协议发布服务,包括SOAP、RMI、REST、JMS,甚至可以是虚拟机内的对象直接调用。组件可以使用多种技术实现, 包括EJBs, Java POJOs ,Spring Beans,BPEL process , COBOL ,C++, PHP … SCA中,最重要的一个概念是Service----服务,它的内涵是独立于具体的技术。因此,SCA不会称之为 Java组件架构,或Web Service 组件架构。所谓的具体技术,主要有两层含义:一是程序语言,而是传输协议。 现有的组件是和传输协议紧密耦合的。比如EJB组件采用的是RMI 传输协议,Web Service组件采用的是SOAP传输协议。SCA组件则能

自由地绑定各种传输协议。 SCA是对目前组件编程的进一步升华,其目标是让服务组件能自由绑定各种传输协议,集成其他的组件与服务。 SCA与传统的业务组件最大区别在于SCA实现了两个功能:一是组件和传输协议的分离,二是接口和实现语言的分离。 二、SCA规范基础知识 SCA编程模型是高扩展性和语言中立的,它易于被扩展为多种实现语言技术JAVA,C++,BPEL,PHP, Spring等,多种远程访问bindings 包括Web Service,JMS, EJB,JSON RPC等,多种主机环境例如Tomcat,Jetty,Geronimo,OSGI等。SCA分隔式架构可以使开发者更注重业务逻辑,而不必要关注诸如可靠性,安全,事务等系统属性,这些属性都配置到配置文件中。SCA的组成部分如下图所示: (1)Component

在 Windows Server 2003 中配置打印机和打印服务器设置

在 Windows Server 2003 中配置打印机和打印服务器设置 本文介绍了如何在 Windows Server 2003 中配置打印机和打印服务器设置。还讲述了如何执行某些比较常见的管理性任务,例如,如何配置分隔页和打印通知。 配置打印机设置是在该打印机的打印机属性中进行,配置打印服务器设置是在打印服务器属性中进行。您必须以管理员或管理员组的成员身份登录,才能执行这些步骤。 如何配置打印机设置 请注意,对于不同的打印机,您可以配置的选项可能也不同。本节说明了如何配置在大多数打印机中都可用的一般设置。 单击开始,然后单击“打印机和传真机”。 右键单击要配置的打印机,然后单击属性。 使用下列任意方法(如何合适的话)都可配置您想要的选项:配置分隔页: 单击高级选项卡,然后单击分隔页。 要添加分隔页,请在“分隔页”框中键入您要用作分隔页的文件的路径,然后单击确定。或者,单击浏览,找到您要使用的文件,单击打开,然后单击确定。

要删除分隔页,请删除“分隔页”框中的条目,然后单击确定。 配置打印处理器: 单击高级选项卡,然后单击打印处理器。 在“默认数据类型”框中,单击您要使用的数据类型,然后单击确定。添加用于 Windows 其他版本的打印机驱动程序: 单击共享选项卡,然后单击其他驱动程序。 单击要添加的驱动程序旁边的复选框,将其选中,然后单击确定。 修改用户访问权限: 单击安全性选项卡,然后执行下列xx作之一: 要更改现有用户或组的权限,请在“组或用户名称”列表中单击您要修改其权限的组或用户。 要为新用户或组配置权限,请单击添加。在“选择用户或组”对话框中,键入您要为其设置权限的用户或组的名称,然后单击确定。 在用户或组的权限列表中,单击您要允许的权限旁边的允许复选框,将其选中,或者单击要拒绝的权限旁边的拒绝复选框,将其选中。或者,要从“组或用户名称”列表删除用户或组,请单击删除。 单击确定。 如何配置打印机服务器设置 本节介绍了您可以进行配置的某些常见打印服务器设置。 单击开始,然后单击“打印机和传真机”。 在文件菜单上,单击服务器属性。 使用下列任意方法(根据需要)都可配置您想要的选项:

Android端i-jetty服务器开发(一)

一、i-jetty简介 介绍: popular Jetty open-source platform.Having a "personal" webserver on your phone opens up a world of possibilities, letting you run your favourite existing webapps in your mobile environment. Moreover, as webapps developed for i-jetty have access to the Android API, this means that you can bring the contents of your mobile phone to your normal desktop browser. To demonstrate the possibilities, we've created a "Console" webapp that interfaces to the data on your mobile device. You don't need any special software to synchronize the mobile data to your desktop computer - the i-jetty console webapp makes your on-phone info like contacts lists, call logs and media instantly available and manageable via your browser. We've packaged the Console webapp as an Android application so it can be conveniently downloaded and updated via the Android Marketplace. i-jetty can also dynamically download webapps from anywhere on the net. To help get you started, we've also created a "Hello World" webapp that is simpler than the Console webapp. You can either build it from src and install it locally, or you can point i-jetty to the pre-built hello.war on the download page. The apks for i-jetty and the i-jetty Console webapp are both available from the Android Marketplace, and also from the download page.

IntelliJ+Maven+Jetty+Jrebel实现web项目java代码更改后热部署

IntelliJ+Maven+Jetty+Jrebel实现web项目java代码更改后热部署环境准备: IntelliJ IDEA 11.1.3 Maven 3.0.4 Jetty-maven-plugin 8.1.7.v20120910 Jrebel Plugin v1.5.2 1.安装maven 3.0.4 请参考网上安装教程。 2.安装IntelliJ IDEA 11.1.3 请参考网上安装教程。 3.安装Jrebel Plugin v1.5.2 3.1.打开Intellij IDEA Settings对话框,点击Browse repositories…

3.2.在左边插件列表中选择JRebel Plugin , 我安装的是v1.5.2版本,以下图片 是网上截图,一定要选择1.5.0+,后面会用到JRebel 5.0的破解包。 3.3.下载并安装JRebel Plugin v1.5.2插件

3.4.安装完后会要求你重启Intellij IDEA,你就重启好了。 3.5.重启后,验证是否安装成功。在项目上点击鼠标右键,出现的菜单中有 JRebel则代表安装成功。

菜单栏显示,如果要实现热部署必须以红框内的方式运行。 3.6.接下来替换插件自带的jrebel.jar,从网上下载jrebel5破解版的包【原因是 jrebel是收费的】,给几个下载地址 https://www.doczj.com/doc/9f15268881.html,/download/dengqianyong/4473522 https://www.doczj.com/doc/9f15268881.html,/blog/1589821 用下载的jrebel5破解版替换 C:\Users\Administrator\.IntelliJIdea11\config\plugins\jr-ide-idea\lib\jrebel 目录下的jrebel.jar文件 并删除C:\Users\Administrator\.jrebel目录下的所有内容 3.7.一定要选择红框中的其中一个运行,这样才能达到热部署的目的 4.用maven插件[jetty-maven-plugin]运行web项目

常见服务器的区别和理解

关于Apache/Tomcat/JBOSS/Neginx/lighttpd/Jetty等一些常见服务器的区别比较和理解 https://www.doczj.com/doc/9f15268881.html,/allenlinrui/article/details/6675998 分类:各种容器2011-08-11 17:07 30人阅读评论(0) 收藏举报 今天是个很丰富的日子,早上一上班,第一个听到的惊爆消息就是楷子得了肠胃炎,一大早去医院挂水了…… 随后风胜和笑虎也没来,后来得知他们俩去去华星现代产业园参加培训,内容是关于Apache与Nginx的。于是乎,我非常感兴趣地查了一下培训用的PPT,并跟旁边的俊牧了解了一下关于服务器的一些东西…… 整个交流过程中,我发现好多概念已经被我遗忘了,有的也很模糊,于是乎,我还是决定到网上查一下,并记录下来! 下面是令人纠结的正文…… 先说Apache和Tomcat的区别: Apache是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。 在Apache基金会里面ApacheServer永远会被赋予最大的支持,毕竟大儿子最亲嘛,而Apache的开源服务器软件Tomcat同样值得关注,毕竟Tomcat是开源免费的产品,用户会给予最大的支持。但是经常在用Apache和Tomcat等这些服务器时,你总感觉还是不清楚他们之间有什么关系,在用Tomcat的时候总出现Apache,总感到迷惑,到底谁是主谁是次,因此特意在网上查询了一些这方面的资料,总结了一下。 解析一: Apache支持静态页,Tomcat支持动态的,比如Servlet等, 一般使用Apache+Tomcat的话,Apache只是作为一个转发,对JSP的处理是由Tomcat来处理的。 Apche可以支持PHPcgiperl,但是要使用Java的话,你需要Tomcat在Apache后台支撑,将Java请求由Apache转发给Tomcat处理。 Apache是Web服务器,Tomcat是应用(Java)服务器,它只是一个Servlet(JSP也翻译成Servlet)容器,可以认为是Apache的扩展,但是可以独立于Apache运行。

最受欢迎的Java框架介绍

最受欢迎的Java框架介绍

17个最受欢迎的Java 框架:优点、缺点 Java 依旧是最受欢迎的编程语言。这里是如今被使用最多的Java 框架第一部分。 在2018年,Java 依旧是世界上最受欢迎的编程语言。它自带一个庞大的生态和全世界超过900万的Java 开发者。虽然Java 不是最简单的语言,但是你不必从零开始写Java 程序。这里有许多杰出的Java 框架可以编写运行在Java虚拟机上的web 和手机应用程序、微服务和REST API。 Java 框架允许你聚焦于你的app的业务逻辑,而不是编写如处理数据库连接或异常处理这样的基础功 能。此外,如果你有一些Java 的经验,你可以更快的开始。这些框架都使用相同的语法并且与相似的 条件、模型和概念工作。 我们前17 的Java 框架基于直到2018年的使用情况并按字母顺序排列展示的。这里是顶级Java 框架的第一部分。 Blade:极小占用的简单应用程序框架 Blade 是一个轻量级、高性能的Java 框架,它允许你用简单的方式快速构建web 应用程序。作者希望用户再一天内了解整个框架。因此,Blade 专注于简洁和优雅。 Blade 框架遵循MVC(模型-视图-控制器)软件设计模式。它有易于理解的设计,并且不依赖其他任何 第三方库或引入太多层。Blade 基于Java 8。Netty web服务器和模板引擎也内置于框架中。它占用极小,源代码总共小于500kb。

用Blade,你可以访问RESTful 风格的路有接口并可以将你的app 作为当作基础Maven 项目部署。Blade 也内置了安全功能。例如,它带有CSRF(跨站点请求伪造)和XSS(跨站点脚本)防御。它是 一个多功能框架,因为它自带插件扩展和webjar 资源的支持。其主站的文档是中文的。但是,它在 Github repo 也有英文文档。 Dropwizard:生产级RESTful Web 服务 Dropwizard 是一个高性能且简单的用于快速开发RESTful Web 服务的Java 框架。它特别适合创建 Java 微服务。 Dropwizard 框架汇集了一些成熟的Java 库,为你提供了快速且无干扰的开发平台。它自带了一个嵌入 式Jetty 服务器、Google Guava、LogBack、Hibernate Validator、Joda Time和许多其他流行的Java 库。此外,Dropwizard 还包含可用于构建RESTful Web 服务的Jersey 和用于处理JSON 的jackson。你可以将Dropwizard 想成一个独立的生态系统,包含了上述所有依赖捆绑为一个单独的包。 如果你选择Dropwizard,你将不必花费大量时间为如配置、监控、日志的辅助功能编写代码。相反, 你可以专注于你的app 的主要业务逻辑并达到最大生产率。这就是为什么Dropwizard 经常被称为操作 友好的Java 框架。如果你之前写过Java 那么入门不会很难;Dropwizard 的文档甚至有一个简单的 Hello World 示例,它可以帮助你完成第一步。 Grails:基于Groovy 的Web 应用程序框架

形考作业(四)-配置文件和打印服务实训

形考作业(四)-配置文件和 打印服务实训 -标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

实训目标 理解NTFS文件系统的特点,掌握NTFS权限的设置,掌握管理NTFS数据的方法与步骤;理解共享文件夹,掌握创建和管理共享文件夹的方法与步骤,掌握访问共享文件夹的方法。 实训环境 1台服务器,1台客户机。实训内容 假设你是一家公司的网络管理员,负责管理和维护公司的网络。你的公司希望设置文件服务器来管理用户对文件资源的访问。为此,需要你执行以下工作:①在文件服务器的NTFS分区(卷)中存放文档,并且为用户设置NTFS权限。其中, 给用户账户user1分配对文件夹D:\resource的“读取”权限,给用户账户user2分配对文件夹D:\resource的“读取”和“写入”权限,给用户账户user3分配对文件夹D:\resource的“读取(拒绝)”权限。②在文件服务器的NTFS分区(卷)中,压缩文件夹D:\lists。 ③对文件服务器的E:分区(卷)设置磁盘配额,允许普通用户在里面每人存放500MB 数据,允许公司经理使用的用户账户John在里面存放1GB数据。④在文件服务器上共享文件夹D:\documents,允许用户账户user1能够以“读取” 的方式访问这个共享文件夹、用户账户user2能够以“更改”的方式访问这个共享文件夹。 一、 设置NTFS权限 对于新创建的NTFS分区(卷),系统会自动为其设置默认的权限。如图1所示为C盘的默认权限。其中,在【组或用户名】处列出了对C盘具有NTFS权限的用户账户名或组账户名;在【…的权限】处列出了这些用户账户或组账户所拥有的NTFS权限。

相关主题
相关文档 最新文档