jetty学习笔记-应用部署
来源:互联网 发布:ai人工智能软件 编辑:程序博客网 时间:2024/05/16 12:14
部署方式
1. 静态部署:直接把包拷贝到webapp下面,然后启动jetty。当然,目录可以增加的。
<Set name="handler"> <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection"> <Set name="handlers"> <Array type="org.eclipse.jetty.server.Handler"> <Item> <New class="org.mortbay.jetty.webapp.WebAppContext"> <Set name="contextPath">/test</Set> ##指定位置 <Set name="war">demo</Set> ##url的context </New> </Item> </Array> </Set> </New> </Set>
2. hot deploy:通过context中的配置,指向工程,实现动态部署。当然,也是可以修改的。
<Call name="addLifeCycle"> <Arg> <New class="org.mortbay.jetty.deployer.ContextDeployer"> <Set name="contexts"><Ref id="Contexts"/></Set> <Set name="configurationDir"><SystemProperty name="jetty.home" default="."/>/contexts</Set>##指定目录 <Set name="scanInterval">1</Set> </New> </Arg> </Call>
实现方式
jetty启动时加入--ini=--ini=start.ini,比如文件内容如下:
etc/jetty.xmletc/jetty-deploy.xmletc/jetty-webapps.xmletc/jetty-contexts.xmletc/jetty-testrealm.xml
在执行Server的时候会将内容加入args,然后读取定义的xml,其中和部署相关的几个
jetty-deploy.xml,增加DeploymentManager,handles the lifecycle of deploying web applications
<Configure id="Server" class="org.eclipse.jetty.server.Server"> <Call name="addBean"> <Arg> <New id="DeploymentManager" class="org.eclipse.jetty.deploy.DeploymentManager"> <Set name="contexts"> <Ref id="Contexts" /> </Set> <Call name="setContextAttribute"> <Arg>org.eclipse.jetty.server.webapp.ContainerIncludeJarPattern</Arg> <Arg>.*/jsp-api-[^/]*\.jar$|.*/jsp-[^/]*\.jar{1}lt;/Arg> </Call> </New> </Arg> </Call></Configure>
jetty-contexts.xml,增加动态部署provider
<Configure id="Server" class="org.eclipse.jetty.server.Server"> <Ref id="DeploymentManager"> <Call name="addAppProvider"> <Arg> <New class="org.eclipse.jetty.deploy.providers.ContextProvider"> <Set name="monitoredDir"><Property name="jetty.home" default="." />/contexts</Set> <Set name="scanInterval">1</Set> </New> </Arg> </Call> </Ref></Configure>
jetty-webapps.xml,增加静态部署provider
<Configure id="Server" class="org.eclipse.jetty.server.Server"> <Ref id="DeploymentManager"> <Call name="addAppProvider"> <Arg> <New class="org.eclipse.jetty.deploy.providers.WebAppProvider"> <Set name="monitoredDir"><Property name="jetty.home" default="." />/webapps</Set> <Set name="defaultsDescriptor"><Property name="jetty.home" default="."/>/etc/webdefault.xml</Set> <Set name="scanInterval">1</Set> <Set name="contextXmlDir"><Property name="jetty.home" default="." />/contexts</Set> <Set name="extractWars">false</Set> </New> </Arg> </Call> </Ref></Configure>
addBeans方法的作用,在server启动后调用DeploymentManager的生命周期方法
/** * Add an associated bean. * The bean will be added to the servers {@link Container} * and if it is a {@link LifeCycle} instance, it will be * started/stopped along with the Server. Any beans that are also * {@link Destroyable}, will be destroyed with the server. * @param o the bean object to add */
DeploymentManager.doStart(),启动appProviders
@Override protected void doStart() throws Exception { if (_useStandardBindings) { Log.debug("DeploymentManager using standard bindings"); addLifeCycleBinding(new StandardDeployer()); addLifeCycleBinding(new StandardStarter()); addLifeCycleBinding(new StandardStopper()); addLifeCycleBinding(new StandardUndeployer()); } // Start all of the AppProviders for (AppProvider provider : _providers) { startAppProvider(provider); } super.doStart(); }
private void startAppProvider(AppProvider provider) { try { provider.setDeploymentManager(this); provider.start(); } catch (Exception e) { Log.warn("Unable to start AppProvider",e); } }
Provider类图
scanner负责扫描,内部通过time和timertask完成调度
listener定义扫描之后的操作
filenamefilter定义寻找文件名的规则
静态部署
如果文件不是目录或者以.war结尾,不处理
if (!file.isDirectory() && !lowername.endsWith(".war")) { return false; }
如果目是目录下面有war,丢弃
// is it a directory for an existing war file? if (file.isDirectory() && (new File(dir,name+".war").exists() || new File(dir,name+".WAR").exists())) { return false; }
app在createContextHandler的时候直接createContextHandler
hot deploy
以xml结尾并且不是目录就可以了public boolean accept(File dir, String name) { if (!dir.exists()) return false; String lowername = name.toLowerCase(); return (lowername.endsWith(".xml") && !new File(dir,name).isDirectory()); } }
app在创建contextHandler的时候调用XmlConfiguration来解析配置文件并初始化
- jetty学习笔记-应用部署
- jetty学习笔记-jetty全局
- jetty学习笔记-jetty classloader
- Jetty 9部署web应用
- Maven使用Jetty部署应用
- Jetty学习四:部署到Jetty
- jetty服务器学习笔记
- jetty学习笔记-入口
- Jetty Connector学习笔记
- Jetty学习笔记(二)-Jetty启动
- Jetty学习(二)--jetty部署简单web项目
- Jetty学习(三)--jetty部署spring mvc项目
- Weblogic学习笔记-Weblogic 应用部署
- weblogic学习笔记:域创建+应用部署
- Jetty:部署到Jetty
- Jetty学习笔记(一)
- Jetty学习笔记(1)
- jetty部署
- android系统详细介绍
- Win7如何取消文件的默认打开方式
- Mapxtreme 64位开发,未能加载文件或程序集,或它的某一个依赖项
- 用Python进行图像处理
- SQL注入原理和过程
- jetty学习笔记-应用部署
- C语言的内存分配
- 面向对象的三大特征
- Java连接各种数据库
- 13.4 从数据收集信息
- WEB中的上传文件02
- 排序函数
- 老子道德经上篇--第二章
- 过滤器基础知识