【说明】今天看了看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信息

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

在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 目录结构的更多相关文章

  1. 每天一个linux命令(23):Linux 目录结构

    对于每一个Linux学习者来说,了解Linux文件系统的目录结构,是学好Linux的至关重要的一步.,深入了解linux文件目录结构的标准和每个目录的详细功能,对于我们用好linux系统只管重要,下面 ...

  2. day 2 Linux目录结构

    Linux系统的目录结构的基本介绍: 1)在逻辑上的所有目录(包括目录下的子目录)都在最高级别的目录“/”下. 根(/)目录是Linux系统中所有目录的起始点(顶点),根下面的目录及子目录是一个有层次 ...

  3. 【Linux】Linux 目录结构

    博客已转移,请借一步说话 .http://www.weixuehao.com/archives/492 初学Linux,首先需要弄清Linux 标准目录结构 / root --- 启动Linux时使用 ...

  4. CentOS6.5菜鸟之旅:纯转载Linux目录结构

    来自:http://www.iteye.com/topic/1125162 使用linux也有一年多时间了  最近也是一直在维护网站系统主机  下面是linux目录结构说明 本人使用的是centos系 ...

  5. 每天一个linux命令(19):Linux 目录结构

    对于每一个Linux学习者来说,了解Linux文件系统的目录结构,是学好Linux的至关重要的一步.,深入了解linux文件目录结构的标准和每个目录的详细功能,对于我们用好linux系统只管重要,下面 ...

  6. Linux目录结构及常用命令(转载)

    一.Linux目录结构 你想知道为什么某些程序位于/bin下,或者/sbin,或者/usr/bin,或/usr/sbin目录下吗?例如,less命令位于/usr/bin目录下.为什么没在/bin中,或 ...

  7. Linux目录结构【转】

    使用linux也有一年多时间了  最近也是一直在维护网站系统主机  下面是linux目录结构说明 本人使用的是centos系统,很久没有发表博文了 近期会整理自己所用所了解知识点,发表linux相关的 ...

  8. 【Linux笔记】Linux目录结构

    [Linux笔记]Linux目录结构   本文内容整理自网络,以作参考. /:根目录,位于linux文件系统目录结构的顶层,一般根目录下只存放目录,不要存放文件,/etc./bin./dev./lib ...

  9. Linux目录结构及文件基础操作

    一.Linux目录结构 windows系统中主要以存储介质为主(磁盘). UNIX和Linux系统中主要是以目录为主(以树形目录结构的形式构建整个系统). 1. FHS(Filesystem Hier ...

  10. Linux目录结构和常用命令

    源地址:http://www.cnblogs.com/JCSU/articles/2770249.html 一.Linux目录结构 你想知道为什么某些程序位于/bin下,或者/sbin,或者/usr/ ...

随机推荐

  1. rails delegate机制

    Delegate是一种应用composite来代替extend的机制,可以有效地降低代码的耦合性. Rails 2.2增加了delegate方法,可以十分方便地实现delegate机制. 01.def ...

  2. ubuntu各版本代号(更新至15.04)及各版本下载地址等

    版本号 代号 发布时间 15.04 Vivid Vervet 2015/04/22 14.10 Utopic Unicorn 2014/10/23 14.04 LTS Trusty Tahr 2014 ...

  3. Linux 下动态查找磁盘数量方法

    #!/bin/bash ##磁盘数量 Disk=$( fdisk -l |grep 'Disk' |grep 'sd' |awk -F , '{print "%s",substr( ...

  4. DB2解锁

    1.登录数据库 db2 connect to 数据库名字 user 用户名 using 密码 2.进入db2top db2top -d 数据库名 进入到如下界面:  3.按下shift+u(图中U-L ...

  5. (四)Maven构建多模块项目

    在平时的Javaweb项目开发中为了便于后期的维护,我们一般会进行分层开发,最常见的就是分为domain(域模型层).dao(数据库访问层).service(业务逻辑层).web(表现层),这样分层之 ...

  6. 趣味 console.log

    第三方趣味console,比我的强太多了,使用这个吧: https://github.com/yy0608/console 我的console效果图: ;(function (global, fact ...

  7. Visual Studio - 引入动态库

    以VS2013为例: 1.新建项目 2.选择"Win32控制台应用程序",点确定 勾选“控制台应用程序”和“空项目”选项,点击完成,然后新建一个C文件,在文件头上右键: 3.粘贴准 ...

  8. 运行cotroller后,查看vuser日志为空

    查看C:\Users\***\AppData\Local\Temp\res\log下,文件夹空,处理如下 run-time-setting中,选中always send message

  9. 使用Charles对Https请求进行抓包

    昨天对某个APP做分析的时候发现其请求是Https的,抓包工具不能正常的显示请求的内容及返回的情况.通过搜索发现Charles是支持针对Https抓包的.具体的操作如下: 1.电脑端安装SSL证书 2 ...

  10. Linux 实用工具vi

    vi有输入和命令两种工作模式.命令模式是用来运行一些编排文件.存档以及离开vi等操作命令. 当执行vi后,首先进入命令模式,此时输入的人数字符都被视为命令. 在命令模式下,可以使用如下两个键进入文本输 ...