Jetty9部署多个项目及虚拟主机配置的方法

网友投稿 947 2022-05-30

1.介绍

Jetty会对webapps目录下的几乎所有war包、目录、xml文件进行自动部署。如果war包、目录和xml文件同名,则部署的顺序为xml文件 > war包 > 目录 。如webapps目录下有:bank.war、bank目录、bank.xml,其中目bank录为bank.war解压后的目录,bank.xml中引用的是bank.war包或者bank目录,则此时仅有xml文件被部署。如果它们不同名,但又是同一个工程的,则会导致工程被重复部署!,所以同一个项目的war包、目录、xml文件都应该同名。

2.Jetty的上下文路径(context path)配置

默认的上下文路径

默认情况下,Jetty会将webapps目录下的工程名作为上下文路径。如果工程名称为ROOT,则上下文路径为/。如将bank.war(或bank目录)放在webapps目录下,则上下文路径为/bank,如果将bank.war重命名为ROOT.war,则上下文路径为/。那么要访问bank的ULR的上下文路径就是:http://localhost:8888/bank

自定义上下文路径

如果上述的方式无法满足要求,则可以通过xml文件来配置上下文路径:

第一步:在jetty根目录下的webapps目录下创建一个xml文件,名称可以任意,如jetyy-webapp.xml;

第二步:假设我们webapps目录下有个bank.war项目,我们来给它配置一个自定义上下文路径,在xml文件中加入如下内容:

jetyy-webapp.xml

/bank888 /bank.war

1

2

3

4

5

6

配置完成后,访问bank站点的上下文路径就是:http://localhost:8888/bank888

3.配置虚拟主机

虚拟主机让访问web的多一种方式,虚拟主机是一般是一个注册在DNS的域名。多个域名对应到一个IP。虚拟主机可以解决共享一个Jetty服务器实例的同一个IP。

虚拟主机的配置有以下方法:

在webapps目录下使用一份上下文路径配置的xml文件,如上面的jetty-webapp.xml。

给所有在webapps目录下发现的上下文,用绑定配置虚拟主机的方式创建一个自定义部署。

在嵌入Jetty的应用情况中,还可以通过直接调用API的方式来实现虚拟主机配置及访问

使用WEB-INF/jetty-web.xml来配置虚拟主机(已过时)

3.1虚拟主机的名称

Jetty支持以下这个形式的虚拟主机名称:

www.hostname.com,类似这样的全限定主机名。这样的配置使用来自www.hostname.com和hostname.com的访问都可以被接收到

.hostname.com,使用通配符限定主机,但只匹配一级任意名称,如.foo.com可以匹配到www.foo.com和m.foo.com,但无法匹配到www.other.foo.com。

10.0.0.2,IP地址也可以用来作为虚拟主机名,这表明上下文要处理从没有指定主机名的服务器端口收到的请求

@ConnectorName,连接名称,这不是严格意义上的虚拟主机,它只匹配通过Connector.setName(String)设置名称的连接器收到的请求。

www.√integral.com,非ASCII和IDN域名

3.2配置虚拟主机

我们给上下文/bank888配置虚拟主机:

/bank888 /bank.war www.MyVirtualDomain.com m.MyVirtualDomain.com *.OtherVirtualDomain.com @ConnectorName localhost 127.0.0.1

1

2

3

4

5

6

7

Jetty9部署多个项目及虚拟主机配置的方法

8

9

10

11

12

13

14

15

16

17

注意:在实践中,@ConnectorName这种方式,会比较容易出问题,一失败,上下文就会失败。

访问的方式就变成了(虚拟主机+端口+上下文路径):http://127.0.0.1:8080/bank888

如果还需要添加webapps中其他项目的虚拟主机,可以在webapps目录下继续按上面的方式创建xml文件。推荐xml文件与war名称或目录名称一样,否则会引起重复部署。

注意:虚拟主机的方式只是提供了其他的方式来访问web,并不影响原有的访问方式(原有的:IP+端口+上下文路径)。

4.Jetty9下关闭目录访问(关闭目录遍历和关闭目录下的文件展示

没有关闭目录访问前,访问http://localhost:8888

上述就将webapps目录下的web全部显示出来了。上面这种情况,是没有配置任何自定义上下文的情况下出现的。

自定义配置web的上下文,下关闭目录访问

/ /gro.war www.MyVirtualDomain.com m.MyVirtualDomain.com *.OtherVirtualDomain.com localhost 127.0.0.1 org.eclipse.jetty.servlet.Default.dirAllowed false

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

上面定义了web的上下文为/,且关闭目录访问,此时如果访问http://localhost:8888:

注意:实践结果显示,只要自定义配置上下文中,有一个web的上下文是/,那么基本不可能再显示出webapps下的web目录。似乎与下面的配置无任何关系:

org.eclipse.jetty.servlet.Default.dirAllowed false

1

2

3

4

扫码查看更多:

XML 虚拟化

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:AI找石油,石油工业数字化转型新思维
下一篇:Java设计模式基础 - 单例模式
相关文章