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

举报
yd_221104950 发表于 2020/12/03 01:11:52 2020/12/03
【摘要】 1.介绍 Jetty会对webapps目录下的几乎所有war包、目录、xml文件进行自动部署。如果war包、目录和xml文件同名,则部署的顺序为xml文件 > war包 > 目录 。如webapps目录下有:bank.war、bank目录、bank.xml,其中目bank录为bank.war解压后的目录,bank.xml中引用的是bank.war包或者bank目录,则...

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文件来配置上下文路径:

  1. 第一步:在jetty根目录下的webapps目录下创建一个xml文件,名称可以任意,如jetyy-webapp.xml;
  2. 第二步:假设我们webapps目录下有个bank.war项目,我们来给它配置一个自定义上下文路径,在xml文件中加入如下内容:
    jetyy-webapp.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
<Configure id="GroceryWebapp" class="org.eclipse.jetty.webapp.WebAppContext">
  <Set name="contextPath">/bank888</Set>
  <Set name="war"><Property name="jetty.webapps" default="."/>/bank.war</Set>
</Configure>

  
 
  • 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配置虚拟主机:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
<Configure id="GroceryWebapp" class="org.eclipse.jetty.webapp.WebAppContext">
  <Set name="contextPath">/bank888</Set>
  <Set name="war"><Property name="jetty.webapps" default="."/>/bank.war</Set>
  <Set name="virtualHosts"> <Array type="java.lang.String"> <Item>www.MyVirtualDomain.com</Item> <Item>m.MyVirtualDomain.com</Item> <Item>*.OtherVirtualDomain.com</Item> <Item>@ConnectorName</Item> <Item>localhost</Item> <Item>127.0.0.1</Item> </Array>
  </Set>
</Configure>


  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 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的上下文,下关闭目录访问
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd">
<Configure id="GroceryWebapp" class="org.eclipse.jetty.webapp.WebAppContext">
  <Set name="contextPath">/</Set>
  <Set name="war"><Property name="jetty.webapps" default="."/>/gro.war</Set>
  <Set name="virtualHosts"> <Array type="String"> <Item>www.MyVirtualDomain.com</Item> <Item>m.MyVirtualDomain.com</Item> <Item>*.OtherVirtualDomain.com</Item> <Item>localhost</Item> <Item>127.0.0.1</Item> </Array>
  </Set>
  <!--关闭目录访问-->
<Call name="setInitParameter">
	<Arg>org.eclipse.jetty.servlet.Default.dirAllowed</Arg>
	<Arg>false</Arg>
</Call>
</Configure> 

  
 
  • 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目录。似乎与下面的配置无任何关系:

<Call name="setInitParameter">
	<Arg>org.eclipse.jetty.servlet.Default.dirAllowed</Arg>
	<Arg>false</Arg>
</Call>

  
 
  • 1
  • 2
  • 3
  • 4

扫码查看更多:
在这里插入图片描述

文章来源: blog.csdn.net,作者:WongKyunban,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_40763897/article/details/105505113

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。