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/ ...
随机推荐
- nyoj237 游戏高手的烦恼(最小点覆盖)
题目237 题目信息 pid=237" style="text-decoration:none; color:rgb(55,119,188)">执行结果 本题排行 ...
- 关于Linux开源项目基础组件make编译流程
关于Linux开源项目基础组件make编译流程 非常多Linux开源项目都会用到编译出可运行文件的make.这个是有一套流程的. 首先,GNU构建系统:https://en.wikipedia. ...
- plsql连接oracle数据库
步骤 (1)线上安装oracle数据库(已配好) (2)本地远程连接.安装oracle客户端(运行时) (3)安装plsql. (4)oracle客户端可以不用配置,直接在plsql中数据访问验证
- C++ 字符串转化成浮点型
第一种: char szString[] = "3.1415926535898"; double db1; db1 = atof(szString); printf(" ...
- iOS 自定义转场动画浅谈
代码地址如下:http://www.demodashi.com/demo/11612.html 路漫漫其修远兮,吾将上下而求索 前记 想研究自定义转场动画很久了,时间就像海绵,挤一挤还是有的,花了差不 ...
- Oracle安装过程中的几点注意
为追求统一,安装了oracle 11g step 4时需要改一下名称,利于记忆 数据库安装完之后需要取消SCOTT账户的锁定 完成后点击SQL Developer会出现——"应用程序开发&q ...
- ASP.NET_SessionId 不相同导致验证码出错
问题: 今天碰到一个比较奇怪的问题,每个页面请求的cookie的ASP.NET_SessionId 不相同,导致验证码检验出错.也就是说每个请求都是一个新的会话,我们把验证码保证在Session[ra ...
- 记一次SmtpClient发送邮件引发的系列问题
前提:公司同事离职,我接手同事负责的项目. 事件:某天公司的分析人员,说软件中的邮件发送功能不能使用,总是提示"邮件发送失败". 本地能够正常发送,发布WCF到服务器IIS上,再调 ...
- TCP/IP ---互联网的地址
互联网上的每个接口必须有一个唯一的I n t e r n e t地址(也称作I P地址). I P地址长32 bit.I P地址具有一定的结构,五类不同 的互联网地址格式如图1 - 5所示. 这些3 ...
- CF Codeforces Round #256 (Div. 2) D (448D) Multiplication Table
二分!!! AC代码例如以下: #include<iostream> #include<cstring> #include<cstdio> #define ll l ...