目录
下载
百度一下,jetty,自己去下载去。
目录结构
bin | linux环境下启动。要求配置当前文件夹为JETTY_HOME等环境变量 |
demo-base | jetty官方给出的一些demo。 |
etc | 配置文件 |
lib | 依赖包 |
logs | 日志 |
modules | 模块配置 |
resources | 资源文件 |
webapps | 应用 |
start.ini | 启动配置 |
start.jar | 启动工具 |
测试
cmd cd到当前目录
java -jar start.jar
将会看到如下情景。
可以看到8080端口启动了。(CTRL+C关闭jetty)
我们打开localhost:8080即可看到有服务在挂起。但是服务返回404。
为什么404?
因为webapps下面是空的。什么都没有。如果你在webapps下面新建一个ROOT文件夹,里面放个index.html就可以显示到。实际上你把war包或者应用文件夹放到这里面就可以正常启动应用了。
和tomcat根目录的区别
新的tomcat的webapps下面有ROOT,manager,host,docs等资源夹,都是官方给的demo.而jetty根目录确是什么都没有。难道真的没有吗?不是的。jetty的官方demo在demo-base文件夹里。
怎么运行demo-base里的demo?
打开%JETTY_HOME%/start.ini,第一段话就是这个
#===========================================================
# Jetty Startup
#
# Starting Jetty from this {jetty.home} is not recommended.
#
# A proper {jetty.base} directory should be configured, instead
# of making changes to this {jetty.home} directory.
#
# See documentation about {jetty.base} at
# http://www.eclipse.org/jetty/documentation/current/startup.html
#
# A demo-base directory has been provided as an example of
# this sort of setup.
#
# $ cd demo-base
# $ java -jar ../start.jar
#
#===========================================================
这里的最后两句就是到demo-base文件夹里,然后运行java -jar ../start.jar
我们先试一下。
此时控制台上发现启动了很多东西。不再是简单一点。
甚至不仅启动了8080端口,还启动了SSL的8443端口。
打开localhost:8080,你将看到以下网站。
Welcome to Jetty 9!
成功!已经进到官方demo了!
但是很懵逼。我们的%JETTY_HOME%/webapps目录下什么玩意都没有,怎么能进到这个网站?
原因在于demo-base下除了没有start.jar,实际上就是一个jetty的缩小版。我们的jetty没有启动加载%JETTY_HOME%这里的配置,而是加载了其他demo_base里的配置,包括项目。
那么我们可以举一反三。我们把demo_base剪切到桌面上,脱离出%JETTY_HOME%。然后在里面打开cmd执行start.jar,会不会也能启动啊?
你们可以试一试,我试了,是可以启动的。
这一点也可说非常重要。
推测start.jar会加载当前目录的配置并部署当前目录下webapps的应用。
配置80端口。
默认是8080端口,实际上我想要80端口,在tomcat里是配置server.xml。在jetty里呢?
有很多方法。最简单直接的是修改start.ini,在最后一段话里。
--module=http
### HTTP Connector Configuration
## Connector host/address to bind to
# jetty.http.host=0.0.0.0
## Connector port to listen on
# jetty.http.port=8080
把注释放开,改成80即可。
你也可以修改其他地方。都有哪些地方?
我先带你一步一步去寻找为什么默认是8080。
首先看上面那段start.ini。第一句话:
--module=http
意思就是加载了http的模块。
从头开始:
>>>>>>jetty启动
>>>>>>port = null,未赋值
>>>>>>读取start.ini.发现端口配置时被注释掉的。
>>>>>>port = null,无法赋值
>>>>>>jetty 加载了http模块
我们再去看看http模块,在%JETTY_HOME%/models/http.mod,用记事本打开。
[depend]
server
[xml]
etc/jetty-http.xml
[ini-template]
### HTTP Connector Configuration
## Connector host/address to bind to
# jetty.http.host=0.0.0.0
## Connector port to listen on
# jetty.http.port=8080
>>>>>>读取http.mod.发现端口配置时被注释掉的。
>>>>>>port = null,无法赋值
但是http模块又依赖server模块,我们再打开server.mod
发现里面没有什么和端口有关。
再回到http模块。
发现又加载了一个叫做etc/jetty-http.xml。我们打开他可以看到
<Set name="host"><Property name="jetty.http.host" deprecated="jetty.host" /></Set>
<Set name="port"><Property name="jetty.http.port" deprecated="jetty.port" default="8080" /></Set>
非常棒,就在这里。
在这里意思很像spring的依赖注入,大约是获取jetty.http.port的值然后set到xxx对象里面。如果没有的话,采用默认值。
>>>>>>port = null,将采用默认值
>>>>>>port = 8080
以上就是在文件之后你可以修改端口的地方。可以修改start.ini,可以修改http.mod,也可以修改这个default。
实际上除了修改文件,你在启动的时候也可以设置端口
这样启动:
java -jar start.jar jetty.http.port=80
相当于命令阶段就设置了port=80.那么自然不会用到default的值了。
作为一个http服务器该如何使用?
jetty的好处有两个,一个是模块化可插拔。
不像tomcat一样一股脑什么都给加进去。
就像我们不需要websocket一样,可以在start.ini里把--module=websocket给注释掉。我们只用我们所需要的。
事实上,在使用过程中,我们不要修改%JETTY_HOME%里的配置,而是像官方给的demo一样,自己另起一个,需要什么复制什么,在自己起的那个目录里启动jetty.