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

[经验分享] Jetty安装学习并展示

[复制链接]

尚未签到

发表于 2017-2-25 13:00:58 | 显示全部楼层 |阅读模式
Jetty 的基本架构
  Jetty 目前的是一个比较被看好的 Servlet 引擎,它的架构比较简单,也是一个可扩展性和非常灵活的应用服务器,它有一个基本数据模型,这个数据模型就是 Handler,所有可以被扩展的组件都可以作为一个 Handler,添加到 Server 中,Jetty 就是帮你管理这些 Handler。
  下图是 Jetty 的基本架构图,整个 Jetty 的核心组件由 Server 和 Connector 两个组件构成,整个 Server 组件是基于 Handler 容器工作的,它类似与 Tomcat 的 Container 容器,Jetty 与 Tomcat 的比较在后面详细介绍。Jetty 中另外一个比不可少的组件是 Connector,它负责接受客户端的连接请求,并将请求分配给一个处理队列去执行。

图 1. Jetty 的基本架构

DSC0000.jpg
  开始部署安装:
  1 Jetty下载地址:
http://wiki.eclipse.org/Jetty/Howto/Install_Jetty
  
2 添加运行jetty账号
useradd -m jetty
usermod -a -G nagcmd jetty
  3 解压缩(解压缩)
解压缩直接可以使用,不需要configre也不需要make了。
mv jetty-distribution-7.6.15.v20140411 /usr/local/jetty
  查看README.txt
cat /usr/local/jetty/README.txt
可以看到一些RUNNING的方法:
......
RUNNING JETTY
=============
The run directory is either the top-level of a binary release
or jetty-distribution/target/assembly-prep directory when built from
source.
To run with the default options:
java -jar start.jar
To see the available options and the default arguments
provided by the start.ini file:
java -jar start.jar --help
To run with extra configuration file(s) appended, eg SSL
java -jar start.jar etc/jetty-ssl.xml
To run with properties
java -jar start.jar jetty.port=8081
To run with extra configuration file(s) prepended, eg logging & jmx
java -jar start.jar --pre=etc/jetty-logging.xml --pre=etc/jetty-jmx.xml
To run without the args from start.ini
java -jar start.jar --ini OPTIONS=Server,websocket etc/jetty.xml etc/jetty-deploy.xml etc/jetty-ssl.xml
to list the know OPTIONS:
java -jar start.jar --list-options
java -jar /usr/local/jetty_7.6.15_8100/start.jar --pre=etc/jetty-logging.xml --pre=etc/jetty-jmx.xml jetty.port=8100
  我需要在启动3个jetty服务,一个服务对应一个web应用,所以直接copy3个解压缩包
cp -r jetty jetty_8100
cp -r jetty jetty_8200
cp -r jetty jetty_8300

4,分别启动3个应用,带上jetty.port端口:
nohup java -jar /usr/local/jetty_7.6.15_8100/start.jar --pre=etc/jetty-logging.xml --pre=etc/jetty-jmx.xml jetty.port=8100 &
nohup java -jar /usr/local/jetty_7.6.15_8200/start.jar --pre=etc/jetty-logging.xml --pre=etc/jetty-jmx.xml jetty.port=8200 &
nohup java -jar /usr/local/jetty_7.6.15_8300/start.jar --pre=etc/jetty-logging.xml --pre=etc/jetty-jmx.xml jetty.port=8300 &

问题在于,用这种方法start,却没有相应的办法去stop;
比如java -jar /usr/local/jetty_7.6.15_8200/start.jar -DSTOP.PORT=8200 -DSTOP.KEY=magic --stop 的办法没有能够关闭掉jetty进程,只能手工kill ID,这种不是太保险。
改端口如下:
将<Set name="port"><Property name="jetty.port" default="8100"/></Set>中的8080改成8100

vim /usr/local/jetty_7.6.15_8100/etc/jetty.xml
<Call name="addConnector">
<Arg>
<New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
<Set name="host"><Property name="jetty.host" /></Set>
<Set name="port"><Property name="jetty.port" default="8100"/></Set>
<Set name="maxIdleTime">300000</Set>
<Set name="Acceptors">2</Set>
<Set name="statsOn">false</Set>
<Set name="confidentialPort">8443</Set>
<Set name="lowResourcesConnections">20000</Set>
<Set name="lowResourcesMaxIdleTime">5000</Set>
</New>
</Arg>
</Call>

  5,进入/bin/目录,发现有jetty.sh脚本可以启动
启动start :
/usr/local/jetty_7.6.15_8100/bin/jetty.sh start
停止stop :
/usr/local/jetty_7.6.15_8100/bin/jetty.sh stop

[iyunv@localhost etc]# /usr/local/jetty_7.6.15_8100/bin/jetty.sh stop
Stopping Jetty: OK
[iyunv@localhost etc]# /usr/local/jetty_7.6.15_8100/bin/jetty.sh start
Starting Jetty: 2014-05-13 15:53:05.744:INFO::Redirecting stderr/stdout to /usr/local/jetty_7.6.15_8100/logs/2014_05_13.stderrout.log
OK 2014年 05月 13日 星期二 15:53:09 CST
[iyunv@localhost etc]#

  
有报错如下:
Starting Jetty: Already Running!!
  改端口如下:
将<Set name="port"><Property name="jetty.port" default="8100"/></Set>中的8080改成8100


vim /usr/local/jetty_7.6.15_8200/etc/jetty.xml
<Call name="addConnector">
<Arg>
<New class="org.eclipse.jetty.server.nio.SelectChannelConnector">
<Set name="host"><Property name="jetty.host" /></Set>
<Set name="port"><Property name="jetty.port" default="8200"/></Set>
<Set name="maxIdleTime">300000</Set>
<Set name="Acceptors">2</Set>
<Set name="statsOn">false</Set>
<Set name="confidentialPort">8443</Set>
<Set name="lowResourcesConnections">20000</Set>
<Set name="lowResourcesMaxIdleTime">5000</Set>
</New>
</Arg>
</Call>

  依次改成8100,8200,8300再列出停止启动命令如下:
/usr/local/jetty_7.6.15_8100/bin/jetty.sh stop
/usr/local/jetty_7.6.15_8200/bin/jetty.sh stop
/usr/local/jetty_7.6.15_8300/bin/jetty.sh stop
  /usr/local/jetty_7.6.15_8300/bin/jetty.sh start
/usr/local/jetty_7.6.15_8200/bin/jetty.sh start
/usr/local/jetty_7.6.15_8100/bin/jetty.sh start
  启动了8100,再起8200还是报一样的错误
  Starting Jetty: Already Running!!
  java -jar /usr/local/jetty_7.6.15_8300/start.jar --pre=etc/jetty-logging.xml --pre=etc/jetty-jmx.xml --stop STOP.PORT=8300 STOP.KEY=1
  nohup java -jar /usr/local/jetty_7.6.15_8100/start.jar --pre=etc/jetty-logging.xml --pre=etc/jetty-jmx.xml jetty.port=8100 &
  6,再换java -jar方式启动试试
nohup java -jar /usr/local/jetty_7.6.15_8200/start.jar jetty.port=8200 &
java -jar /usr/local/jetty_7.6.15_8200/start.jar --STOP.PORT=8200 --STOP.KEY=magic --stop
java -jar /usr/local/jetty_7.6.15_8200/start.jar -DSTOP.PORT=8200 -DSTOP.KEY=magic --stop
  下述方法能启动3个jetty,但是无法正常stop,--stop参数没有成功,jetty进程仍然在后台运行,只能kill强行停止进程:

nohup java -jar /usr/local/jetty_7.6.15_8100/start.jar --pre=etc/jetty-logging.xml --pre=etc/jetty-jmx.xml jetty.port=8100 &
nohup java -jar /usr/local/jetty_7.6.15_8200/start.jar --pre=etc/jetty-logging.xml --pre=etc/jetty-jmx.xml jetty.port=8200 &
nohup java -jar /usr/local/jetty_7.6.15_8300/start.jar --pre=etc/jetty-logging.xml --pre=etc/jetty-jmx.xml jetty.port=8300 &

  
7,去看看jetty.sh脚本,check下
[iyunv@localhost bin]# /usr/local/jetty_7.6.15_8100/bin/jetty.sh check
Checking arguments to Jetty:
JETTY_HOME = /usr/local/jetty_7.6.15_8100
JETTY_CONF = /usr/local/jetty_7.6.15_8100/etc/jetty.conf
JETTY_RUN = /var/run
JETTY_PID = /var/run/jetty.pid
JETTY_PORT =
JETTY_LOGS =
START_INI = /usr/local/jetty_7.6.15_8100/start.ini
CONFIGS = etc/jetty-logging.xml etc/jetty-started.xml
JAVA_OPTIONS = -Djetty.state=/usr/local/jetty_7.6.15_8100/jetty.state -Djetty.home=/usr/local/jetty_7.6.15_8100 -Djava.io.tmpdir=/tmp
JAVA = /usr/java/jdk1.6.0_45/bin/java
CLASSPATH = .:/usr/java/jdk1.6.0_45/lib/tools.jar:/usr/java/jdk1.6.0_45/lib/dt.jar
RUN_CMD = /usr/java/jdk1.6.0_45/bin/java -Djetty.state=/usr/local/jetty_7.6.15_8100/jetty.state -Djetty.home=/usr/local/jetty_7.6.15_8100 -Djava.io.tmpdir=/tmp -jar /usr/local/jetty_7.6.15_8100/start.jar etc/jetty-logging.xml etc/jetty-started.xml
  看到JETTY_PID = /var/run/jetty.pid,突然意识到,启动8200如果也是这样JETTY_PID = /var/run/jetty.pid一个pid的话,那肯定跟8100是冲突的,难怪每次只能启动一个jetty.sh,需要去看下jetty.sh的脚本里面是在哪里设置/var/run/jetty.pid的,找到了修改下带上后缀数字。

vim jetty.sh
在第343行 将 jetty.pid 改成 jetty_8200.pid
改成

if [ -z "$JETTY_PID" ]
then
JETTY_PID="$JETTY_RUN/jetty_8200.pid"
fi
if [ -z "$JETTY_STATE" ]
then
JETTY_STATE=$JETTY_HOME/jetty.state

  

8,最后正常关闭启动如下:


[iyunv@localhost bin]# pwd
/usr/local/jetty_7.6.15_8200/bin
[iyunv@localhost bin]# /usr/local/jetty_7.6.15_8100/bin/jetty.sh stop
Stopping Jetty: OK
[iyunv@localhost bin]# /usr/local/jetty_7.6.15_8200/bin/jetty.sh stop
Stopping Jetty: OK
[iyunv@localhost bin]# /usr/local/jetty_7.6.15_8300/bin/jetty.sh stop
Stopping Jetty: OK
[iyunv@localhost bin]# ps -eaf|grep jetty
root     20205 11980  0 20:28 pts/2    00:00:00 grep jetty
[iyunv@localhost bin]# /usr/local/jetty_7.6.15_8300/bin/jetty.sh start
Starting Jetty: 2014-05-13 20:28:32.146:INFO::Redirecting stderr/stdout to /usr/local/jetty_7.6.15_8300/logs/2014_05_13.stderrout.log
OK 2014年 05月 13日 星期二 20:28:33 CST
[iyunv@localhost bin]# /usr/local/jetty_7.6.15_8200/bin/jetty.sh start
Starting Jetty: 2014-05-13 20:28:34.416:INFO::Redirecting stderr/stdout to /usr/local/jetty_7.6.15_8200/logs/2014_05_13.stderrout.log
OK 2014年 05月 13日 星期二 20:28:37 CST
[iyunv@localhost bin]# /usr/local/jetty_7.6.15_8100/bin/jetty.sh start
Starting Jetty: 2014-05-13 20:28:38.527:INFO::Redirecting stderr/stdout to /usr/local/jetty_7.6.15_8100/logs/2014_05_13.stderrout.log
OK 2014年 05月 13日 星期二 20:28:41 CST
[iyunv@localhost bin]#

  
9,打开 http://192.xxx.xxx.xx:8100/cargo-jetty-deployer/报错如下
  HTTP ERROR 400
  Problem accessing /cargo-jetty-deployer/. Reason:
  Command / is unknown
Powered by Jetty://
  10,部署一个简单的jetty应用:
[iyunv@localhost webapps]# mkdir test1
[iyunv@localhost webapps]# ll
总计 27100
-rw-r--r-- 1 root root 10220 05-13 20:44 cargo-jetty-7-and-onwards-deployer-1.4.8.war
-rw-r--r-- 1 root root 26839664 05-14 15:22 imClient.war
drwxr-xr-x 3 root root 4096 03-31 22:05 META-INF
-rw-r--r-- 1 root root 14578 05-13 15:20 spdy.war
drwxr-xr-x 2 root root 4096 05-14 16:05 test1
-rw-r--r-- 1 root root 763052 05-13 15:20 test.war
-rw-r--r-- 1 root root 60014 05-14 13:31 webim_server.jar
drwxr-xr-x 3 root root 4096 03-31 22:05 WEB-INF
[iyunv@localhost webapps]#
  [iyunv@localhost test1]# cd test1
[iyunv@localhost test1]# vim hello.jsp
<html>
<body>
<h4>simple demo test</h4>
<%--echo hello world--%>
<%@page language="java"%>
<%="Hello World,The first jetty demo page of timman in pl"%>
</body>
</html>
  重新启动jetty
[iyunv@localhost test1]# /usr/local/jetty_7.6.15_8100/bin/jetty.sh restart
Stopping Jetty: OK
Starting Jetty: 2014-05-14 16:08:25.445:INFO::Redirecting stderr/stdout to /usr/local/jetty_7.6.15_8100/logs/2014_05_14.stderrout.log
. . . OK 2014年 05月 14日 星期三 16:08:38 CST
[iyunv@localhost test1]#
  
11,查看效果显示:在浏览器里面输入网址: http://192.xxx.xxx.xx:8100/test1/hello.jsp
会在页面显示如下:
simple demo test
  Hello World,The first jetty demo page of timman in pl,如下图:
DSC0001.jpg

  附加总结:
  (1):单纯比较 Tomcat 与 Jetty 的性能意义不是很大,只能说在某种使用场景下,它表现的各有差异。因为它们面向的使用场景不尽相同。
  从架构上来看 Tomcat 在处理少数非常繁忙的连接上更有优势,也就是说连接的生命周期如果短的话,Tomcat 的总体性能更高。
而 Jetty 刚好相反,Jetty 可以同时处理大量连接而且可以长时间保持这些连接。例如像一些 web 聊天应用非常适合用 Jetty 做服务器,像淘宝的 web 旺旺就是用 Jetty 作为 Servlet 引擎。
  (2)另外由于 Jetty 的架构非常简单,作为服务器它可以按需加载组件,这样不需要的组件可以去掉,这样无形可以减少服务器本身的内存开销,处理一次请求也是可以减少产生的临时对象,这样性能也会提高。另外 Jetty 默认使用的是 NIO 技术在处理 I/O 请求上更占优势,Tomcat 默认使用的是 BIO,在处理静态资源时,Tomcat 的性能不如 Jetty。
  参考网址: http://www.ibm.com/developerworks/cn/java/j-lo-jetty/

运维网声明 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-347097-1-1.html 上篇帖子: jetty初体验 下篇帖子: maven jetty and something
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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