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

本文介绍了Jetty的配置指南,包括web application的目录结构,自动化Web Application的发布,以及如何配置特定的web application发布项目。详细讨论了Jetty的web.xml加载、配置项如extractWAR,以及如何扩展容器支持。此外,还涉及了JNDI配置、Annotation Configuration的使用,以及静态内容发布和热部署的配置策略。

Jetty配置指南

(1)   发布项目到Jetty

剖析Web Application

web application可以将所有的文件放到一个目录树并捆绑到一个War发布包。

/WEB-INF/:用于存放不想让用户通过浏览器直接访问的资源

/WEB-INF/web.xml:发布者用于定义各种web application行为和参数的地方

/WEB-INF/classes/:编译过的java类文件

/WEB-INF/lib/:jar包存放目录

WebAppClassloader会首先从/WEB-INF/classes中加载文件,之后再从/WEB-INF/lib/中加载。

自动化Web Application

发布web application的大多数技术就是围绕着放置一个war或者war的解压文件们到${jetty.base}/webapps/目录,这样Jetty的发布扫描器(deployment scanner)就会检测到它们并将其发布到具有同样名称的Context path下。

配置特定的web application发布项目

jetty发布描述文件**.xml通过创建一个ContextHandler实例来发布Jetty

默认情况下,Jetty查看$JETTY_HOME/webapps目录下的xml文件。

这个xml文件会配置WebAppContext类,其中有两个节点,分别为war和contextPath。

使用SystemProperty和Property元素都可以。举个例子:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">

 

<Configure class="org.eclipse.jetty.webapp.WebAppContext">

  <Set name="contextPath">/wiki</Set>

  <Set name="war">/opt/myapp/myapp.war</Set>

</Configure>

使用SystemProperty指定myapp.home=/opt/myapp,那么上述文件变为下面这个样子:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">

<Configure class="org.eclipse.jetty.webapp.WebAppContext">

  <Set name="contextPath">/wiki</Set>

 <Set name="war"><SystemProperty name="myapp.home"/>/myapp.war</Set>

</Configure>

 

发现这样写的好处了吗?那就是每次根目录变化的时候,只要重新指定myapp.home的值就可以,改动成本降到了最低。

注:为了保证你的web.xml文件被检测到,你需要设置下validateXml属性值为true。如下:

<Call name="setAttribute">

<Arg>org.eclipse.jetty.webapp.validateXml</Arg>

<Arg type="Boolean">true</Arg>

</Call>

其他配置项:

extractWAR:不允许解压war

230311_KheO_216330.png

由于web.xml是在发布描述文件之后进行加载的,所以它的属性会覆盖发布描述文件中的。

下面的配置文件检索了servlet content并设置了一个初始参数。

230326_BzNS_216330.png

下面是使用web.xml覆盖描述文件:

230343_OU80_216330.png

这个特性使得不破坏war文件的情况下增加参数或servlet mappings。

下面是配置webContext的同时又配置了一个数据库连接池,如果web.xml不包含这个data source的引用,包含它可以覆盖之前的。

230357_djqn_216330.png

注:WebAppContext的javadoc是一个不错的信息来源。

发布WebAppContext过程:

org.eclipse.jetty.webapp.Configuration接口有很多实现类,每个类都对应一个特定的功能。

默认的配置类:

230416_1DR9_216330.png

剖析配置类:

一个配置类在webAppContext的生命周期中会经历5次调用:

preConfigure-resource,configure-class,postConfigure-clear resource,deconfigure-undo resource,destroy-delete war

通过创建额外的configuration来扩展容器支持:

下面列举两个例子:

a  JNDI configuration

JNDI在web应用中检视容器和环境的连接资源状况,使用了两个额外的配置:

230431_iCIo_216330.png

这两个配置必须在org.eclipse.jetty.webapp.JettyWebXmlConfiguration之前按照顺序插入进来。

b  Annotation Configuration

这里只需要一个额外的configuration类来提供servlet注解的检视:

230441_knfd_216330.png

设置配置列表:

a  直接在webAppContext中配置,如下:

230502_rvQy_216330.png

b  通过deployer:

如果使用了deployer,则需要在WebAppProvider中设置这个列表:

230514_7HjY_216330.png

配置静态内容的发布过程:

需要用到ResourceHandler

230524_nhR7_216330.png

热部署:

如果一个web application或者一个context descriptor加入到目录中,Jetty’s Deployment(DM)发布新的context。如果context descriptor更新或者创建了,DM会经历停止,重新配置,重新发布过程。如果这个context移除了,DM就会停掉它并将其移出服务器。

配置WebAppProvider属性时下面行为可以被控制:

monitoredDirName:发布web application的目录

scanInterval:检视monitoredDirName的间隔时间(秒)。0代表不支持热部署,web application只能在启动时发布。

默认地址是${jetty.home}/etc/jetty-deploy.xml。

230546_dkCo_216330.png

首先配置开启deploy模块,然后设置。详见下一讲发布架构。

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、付费专栏及课程。

余额充值