jetty;linux 目录结构
【说明】今天看了看jetty这个web容器,上午看基础理论框架知识(后面半点没用到),下午下载了jetty,并且在上面部署了一个war应用,晚上在做eclipses整合jetty的时候出现了问题,下载插件之后不能运行,随之又对jetty插件运行方式产生了疑问
一:今日完成
1)jetty的官方简单介绍
Jetty provides a Web server and javax.servlet container, plus support for HTTP/2, WebSocket, OSGi, JMX, JNDI, JAAS and many other integrations.These components are open source and available for commercial use and distribution.
Jetty is used in a wide variety of projects and products, both in development and production. Jetty can be easily embedded in devices, tools, frameworks, application servers, and clusters. See the Jetty Powered page for more uses of Jetty.
The current recommended version for use is Jetty 9 which can be obtained here: Jetty Downloads. Also available are the latest maintenance releases of Jetty 8 and Jetty 7.
The Jetty project has been hosted at the Eclipse Foundation since 2009. Prior releases of Jetty have existed in part or completely under the Jetty project at the The Codehaus and Sourceforge before that. See the About page for more information about the history of Jetty.
2)启动jetty
3)了解jetty_base和jetty_home的区别
4)部署test.war
5)安装插件
二:明日计划
1)搞定插件直接部署到jetty
2)搞定插件直接部署到tomcat
3)了解一下jboss和jetty的联系
三:疑难问题
1)eclipse里如果用jetty启动项目,是不是只能用jetty server adapter或run-jetty-run插件启动,不能用本地的jetty?那以后部署到生产环境怎么保证项目能在生产环境的jetty里运行呢?
2)maven的pom.xml里配置了jetty插件,有什么作用呢?开发环境可以用run-jetty-run启动,生产环境可以放到webapp里,这个jetty插件在什么时候用?
3)网上说在项目目录下用mvn jetty:run启动,如果是生产环境,还要安装maven?
4)执行这个启动命令mvn jetty:run,jetty是哪里来的?
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.0.5.v20130815</version>
四:思考总结
上午看的jetty原理和框架知识现在半点用不上,还是等遇到了再详细研究吧





jetty9.1以后出现了jetty.base这个概念,指的就是你的webapps目录所在的路径(当然这个webapps目录也是可以修改的,但大多数应用都是直接用这个webapps了),分几种情况说明下:
1、下载下来的jetty直接使用,也就是将你的war文件直接放在解压目录的webapps下,然后通过java -jar start.jar启动,此时的jetty.base和jetty.home都是当前目录,可以通过java -jar start.jar --list-config来查看下:


2、看到那个demo-base文件夹了么(jetty版本为9.0以后),这个文件夹就是jetty用来做jetty.base的事例用的,进去看下,目录结构这样:
demo-base中包含可以启动一个web应用的所有文件.也就是说,使用这个目录中的文件也可以启动jetty,如何启动的,进入demo-base,然后java -jar ../start.jar进行启动,再次使用--list-config进行查看,只有很少的内容,且内容来源都是demo-base中,其中有jetty.base和jett.home,看到了吧,不一样了,jetty.base是当前目录:
也就是说,可以随意建立一个目录当做jetty.base,然后在该目录中放置war包启动需要的jetty配置文件即可.
3、在系统内任意目录建立一个文件夹,当做jetty.base使用(其实和第2种情况一样,启动时通过指定start.jar就可以启动了)
还有几个点需要注意下:
1、jetty.home默认就是start.jar所在的目录
2、可以通过在java -jar start.jar后面跟上jetty.base来指定jetty.base目录:
java -jar start.jar jetty.base=...
3、jetty.home其实就是jetty的默认配置文件、默认的模块定义目录;jetty.base就是为了某个webapp自定义的一个配置文件目录
--list-modules:此命令将返回当前服务所有可用的模块,同时也会显示本地的模块,信息包括模块实现的顺序,依赖模块以及相应的jar信息


在Jetty9,只有Jetty基路径下的配置文件被编辑,属性才会被修改
1、web应用的结构:
在说jetty部署之前先说说servlet规范定义的web应用的结构,应该都很熟悉,这里罗列一下:
WEB-INF/
WEB-INF/lib/
WEB-INF/classes/
WEB-INF/web.xml
以上内容是一个webapp必须有的,其中在启动的时候jetty的WebAppClassLoader会先从classes中加载类文件,然后在去lib目录下加载类文件
2、部署方式
jetty支持多种部署方式,比如servlet规范中的满足以上内容条件的war包,jetty自己提供的xml部署描述符,或者直接就是一个满足servlet规范的文件夹(war包本来也是要解压的)
(1)简单部署,直接将war包或者解压的war目录放入jetty.home/webapps目录下,然后启动,jetty的部署扫描器会找到部署的内容,然后自动设置contextPath为该war包或war目录的名字即可完成部署,但要注意war的名字,当war的名字为root.war或者文件夹的名字为war的时候,contextPath就是root,在浏览器中访问的时候就不需要输入contextPath了,而直接访问根目录,比如http://localhost:8080/就可以访问到root.war这个应用了,当你的jetty只需要部署这一个应用,将其命名为root.war还是可以滴.
当你需要使war包的名字和contextPath不同,这时候怎么办呢?就是第二种方式:
(2)XML部署描述符,这种方式就是在webapps目录中不放除了xml文件描述符之外的任何war包或者war目录,jetty部署扫描器能自动加载到这个xml文件,然后通过xml文件中定义的WebAppContext实例中的war和contextPath属性来找到你的war包或者war目录,比如这样一个xml文件:
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="contextPath">/mycontext</Set>
<Set name="war">/home/wilsonp/myapp/myapp.war</Set>
</Configure>
jetty会解析该xml文件,然后自动搜索到myapp.war文件,并定义其contextPath为/mycontext,启动之后就可以直接输入http://localhost:8080/mycontext/就能访问到应用了。
其中WebAppContext中还有其他的属性:
extractWAR:
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="contextPath">/mycontext</Set>
<Set name="war">/home/wilsonp/myapp/myapp.war</Set>
<Set name="extractWAR">false</Set>
</Configure>
通过以上设置,可以在部署myapp.war的时候不用展开该war文件。
还记得在web.xml文件中可以设置应用初始化参数吧?其实也可以在这里进行设置,如下设置,
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="contextPath">/mycontext</Set>
<Set name="war">/home/wilsonp/myapp/myapp.war</Set>
<Set name="extractWAR">false</Set>
<Get name="ServletContext">
<Call name="setInitParameter">
<Arg>myapp.config</Arg>
<Arg>/home/wilsonp/myapp/config/app-config.xml</Arg>
</Call>
</Get>
</Configure>
可以在启动jetty的时候设置ServletContext参数,参数可以是一个xml文件,jetty会自动解析,但要注意一点,jetty在解析了部署描述符文件之后才会去解析web.xml,这时候如果web.xml中也有和app-config.xml中同名的参数的话会将其覆盖。
overrideDescriptor:
看如下配置:
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="contextPath">/mycontext</Set>
<Set name="war">/home/wilsonp/myapp/myapp.war</Set>
<Set name="extractWAR">false</Set>
<Get name="ServletContext">
<Call name="setInitParameter">
<Arg>myapp.config</Arg>
<Arg>/home/wilsonp/myapp/config/app-config.xml</Arg>
</Call>
</Get>
<Set name="overrideDescriptor">/home/wilsonp/myapp/config/overlay-web.xml</Set>
</Configure>
jetty解析web.xml文件之后会解析overlay-web.xml文件,就是说,可以在这个文件中覆盖web.xml中的属性,或者增加一些额外的属性,免得web.xml文件被改来改去的,麻烦,有了这个属性就省事了.
jetty还可以配置jndi数据源,自己去看看吧!
(3)第二种方式是放置war包,其实可以放置满足servlet 规范的任意目录都可以
(4)还有最后一种就是在jetty9系列之jetty.home和jetty.base中说的jetty.base的方式
没了,我知道的就这几种方式,其实我一直使用的是第二种方式,简单方便,还容易修改



jetty;linux 目录结构的更多相关文章
- 每天一个linux命令(23):Linux 目录结构
对于每一个Linux学习者来说,了解Linux文件系统的目录结构,是学好Linux的至关重要的一步.,深入了解linux文件目录结构的标准和每个目录的详细功能,对于我们用好linux系统只管重要,下面 ...
- day 2 Linux目录结构
Linux系统的目录结构的基本介绍: 1)在逻辑上的所有目录(包括目录下的子目录)都在最高级别的目录“/”下. 根(/)目录是Linux系统中所有目录的起始点(顶点),根下面的目录及子目录是一个有层次 ...
- 【Linux】Linux 目录结构
博客已转移,请借一步说话 .http://www.weixuehao.com/archives/492 初学Linux,首先需要弄清Linux 标准目录结构 / root --- 启动Linux时使用 ...
- CentOS6.5菜鸟之旅:纯转载Linux目录结构
来自:http://www.iteye.com/topic/1125162 使用linux也有一年多时间了 最近也是一直在维护网站系统主机 下面是linux目录结构说明 本人使用的是centos系 ...
- 每天一个linux命令(19):Linux 目录结构
对于每一个Linux学习者来说,了解Linux文件系统的目录结构,是学好Linux的至关重要的一步.,深入了解linux文件目录结构的标准和每个目录的详细功能,对于我们用好linux系统只管重要,下面 ...
- Linux目录结构及常用命令(转载)
一.Linux目录结构 你想知道为什么某些程序位于/bin下,或者/sbin,或者/usr/bin,或/usr/sbin目录下吗?例如,less命令位于/usr/bin目录下.为什么没在/bin中,或 ...
- Linux目录结构【转】
使用linux也有一年多时间了 最近也是一直在维护网站系统主机 下面是linux目录结构说明 本人使用的是centos系统,很久没有发表博文了 近期会整理自己所用所了解知识点,发表linux相关的 ...
- 【Linux笔记】Linux目录结构
[Linux笔记]Linux目录结构 本文内容整理自网络,以作参考. /:根目录,位于linux文件系统目录结构的顶层,一般根目录下只存放目录,不要存放文件,/etc./bin./dev./lib ...
- Linux目录结构及文件基础操作
一.Linux目录结构 windows系统中主要以存储介质为主(磁盘). UNIX和Linux系统中主要是以目录为主(以树形目录结构的形式构建整个系统). 1. FHS(Filesystem Hier ...
- Linux目录结构和常用命令
源地址:http://www.cnblogs.com/JCSU/articles/2770249.html 一.Linux目录结构 你想知道为什么某些程序位于/bin下,或者/sbin,或者/usr/ ...
随机推荐
- servlet--百度百科
Servlet(Server Applet),全称Java Servlet, 未有中文译文.是用Java编写的服务器端程序.其主要功能在于交互式地浏览和修改数据,生成动态Web内容.狭义的Servle ...
- java之生成jar包
Java编写的application程序是否能够最终形成一个类似于exe一样的可执行文件,难道就只能用命令行运行?------------------------------------------- ...
- 《DirectX 9.0 3D游戏开发编程基础》 第二章 绘制流水线 读书笔记
模型的表示 场景:物品或模型的集合 任何物品都可以用三角形网络逼近表示.我们经常用以下术语描述三角形网络:多边形(polygons).图元(primitives).网络几何单元(mesh geomet ...
- MQTT压力测试之Tsung的使用
简介 Tsung 是一个压力测试工具,可以测试包括HTTP, WebDAV, PostgreSQL, MySQL, LDAP, and XMPP/Jabber等服务器.针对 HTTP 测试,Tsung ...
- LuaStudio编辑调试软件
该编辑调试器最大特点就是能够注入到宿主程序内对lua脚本进行调试.还能够设置断点观察变量的值,功能很强大. 如今已有的编辑器有Notepad++, Editplus, luaforwindows, S ...
- window安装rabbitmq
Rabbit MQ 是建立在强大的Erlang OTP平台上,因此安装Rabbit MQ的前提是安装Erlang.通过下面两个连接可以下载安装最新的版本: 下载并安装Eralng OTP For Wi ...
- Atitit,通过pid获取进程文件路径 java php c#.net版本大总结
Atitit,通过pid获取进程文件路径 java php c#.net版本大总结 1. 通过PID获取进程路径的几种方法2 1.1. GetModuleFileNameEx 想获得进程可执行文件的 ...
- symbol lookup error
今天编译代码时出现这样的错误提示: “./test: symbol lookup error: ./test: undefined symbol: ……” 问题原因是:test使用的动态库和makef ...
- iOS开发-常用第三方开源框架介绍
iOS开发-常用第三方开源框架介绍 图像: 1.图片浏览控件MWPhotoBrowser 实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网 ...
- 当synchronized关键字和this关键字
package cn.itcast_01_mythread.thread.testThread; public class MyThreadWithImpliment_Synch_method imp ...