设为首页 收藏本站
查看: 856|回复: 0

[经验分享] jetty启动以及嵌入式启动

[复制链接]

尚未签到

发表于 2017-2-26 12:16:13 | 显示全部楼层 |阅读模式
首先得下载jetty   http://dist.codehaus.org/jetty/

我下的是jetty-8.1.12

其实Jetty所谓的安装过程也就是将下载的文件解压到指定的目录,然后根据不同的操作系统来配置环境变量而已。

解压后进入D:\Program Files\jetty-8.1.12   


DSC0000.jpg


一、目录结构
从上图可以看到,主要有下面几个主要目录

1、bin目录

启动脚本的目录,也包括根路径下的start.jar,主要是用来起引导作用的,引导资源加载和服务的启动。

2、etc目录

配置文件的目录,也包括根路径下的start.ini,这份配置文件是用来指导start.jar的加载顺序和加载模块的,这个后面会有详解。

3、lib目录

库文件目录,如果需要调试jetty的话,可以下载源码加到eclipse中,客户端远程调试即可,命令: java -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8090 -DEOS_DEBUG=true -jar start.jar

4、webapps目录

应用部署目录,类似tomcat的webapps目录


二、配置文件

1、start.ini
指导jetty启动时需要加载的配置文件与顺序

DSC0001.jpg
这些配置文件的顺序不能错,比如若是将jetty-deploy.xml置于最下面将导致jetty-webapps无法初始化的错误。简单介绍下几个配置的作用:
1)jmx.xml

去掉该注释,容器中的某些类便能在运行时受管理;比如:如果工程需要在不重启的情况下重新读取某配置文件,可以通过信号量的方式或者jmx的方式。这因为该功能管理着工程中需要被管理的类,因此置于最上方。

2)jetty.xml

这个就不解释了,该配制文件就对应了server类,管理着connection,thread pool,handler等。

3)deploy.xml

该配置文件对应于上篇博客描述的deployService,在jetty中就是deployManager,部署管理器,因此如果这玩意位置错了,下面的webapps.xml自然就报错了。

4)webapps.xml

war包的部署器,webappcontext便于基于此生产出来的。

5)contexts.xml

另一种部署器,主要是读取部署目录下的xml文件,不知道用在哪里,先略过。

2、jetty.xml

DSC0002.jpg
可以看出默认的io为nio,hanler是server中比较核心的方法,Contexts是一个webappcontext的集合,请求进来的时候Contexts负责将请求分发给具体的app;而DefaultHandler即返回404错误页面,其实从这个handlers就可以看出来,请求会一次经过这个handler,一旦被hanlder即提交退出,直到不被handler走到了DefaultHandler里面返回404的页面。这里面其实自定义handler加载handlers的头部处理一些静态资源的访问,这样就直接绕过了应用webappcontext的访问了,加快了静态资源的处理速度。eg:RerourceHandler.

3、deploy.xml

DSC0003.jpg
调用addBean方法,Ref  = contexts 即上面server中已经new出来的 ContextHandlerCollection,持有该contexts旨在注册所有由该类生产出来的一个个app(即WebAppContextHandler)。

4、webapps.xml

DSC0004.jpg




三、启动:
1、通过cmd命令启动

启动jetty命令:java -jar start.jar
start.jar 后面内容是传递给start.jar的参数,多个参数用空格隔开。

参数内容可以有以下几种:
--help    查看帮助信息
--stop    停止服务,下节中会讲到
--version  查看当前jetty版本信息
其他:作为Jetty服务配置文件

我们看到上条命令指定参数内容为etc/jetty.xml,它实际指向一个服务配置文件,该文件是用来设置jetty服务启动的系统配置信息。比如监听端口,发布某个目录下面的web应用,jndi的配置等等,这些将在后续章节详细描述。当然服务配置文件可以是多个,比如:

java -jar start.jar etc/jetty.xml etc/jetty-plus.xml

   这条命令就指定了两个服务配置文件,etc/jetty.xml和etc/jetty-plus.xml。

    在后续的章节中术语“服务配置文件”就是指的这些文件。
   
    使用浏览器打开地址 http://localhost:8080/ ,你将会看到jetty的默认示例站点。

如果能访问http://localhost:8080  说明jetty启动成功。。



DSC0005.jpg

2. 停止服务
    在刚才启动jetty的终端窗口里面按住ctrl-c键即可。

    不过你可以这样来启动

java -DSTOP.PORT=8009 -DSTOP.KEY=secret -jar start.jar
     
    jetty启动后会在本地监听你指定的端口8009,并将在验证下次关闭命令的密码secret。现在再通过命令:

java -DSTOP.PORT=8009 -DSTOP.KEY=secret -jar start.jar --stop

    就可以在本机的另外一个终端窗口来停止jetty服务。在linux系统中,你可以先将jetty进程转移到后台执行,然后再通过命令行来停止Jetty服务。

    哦,看了上面的介绍你或许以为jetty启动和关闭是如此麻烦,一点也不符合Jetty小巧玲珑的气质。其实Jetty为我们准备了各个操作系统中快捷的方式。不过记住不管何种方式最终都是通过start.jar来启动jetty服务的。


3、嵌入式启动

jetty安装

DSC0006.jpg



创建Jetty 服务:

DSC0007.jpg

Server 是Jetty的核心类,运行此类就可以启动Jetty服务,访问服务地址:http://localhost:8080/
虽然服务正常启动,但是在服务中没有加入任何Handle,所以访问的时候会返回404 error.
如图

DSC0008.jpg

创建handler


DSC0009.jpg

Jetty是面向Handler架构的,就像Spring面向bean架构,Ibatis面向statement架构一样。
将自定义的HelloHandler加入到Server中如下:

DSC00010.jpg


重新执行此类,访问服务地址:http://localhost:8080/,访问效果如下:


DSC00011.jpg


四、start.jar加载原理
main方法非常简单,就执行了一个方法

DSC00012.jpg
parseCommandLine方法主要做了两件事,分别是:
1、解析命令行参数


DSC00013.jpg

2、定位加载资源并依据配置文件反射调用相应的类

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-347445-1-1.html 上篇帖子: Eclipse 中使用maven 插件配置jetty 下篇帖子: Jetty -- 安全认证 -- 三种配置方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表