在jetty中发布应用

在jetty中部署应用有多种方法。

我们来先看一个web应用的解剖图

/WEB-INF/

存放和应用相关的servlet api目录,这里不存放公共访问的web应用内容,对于在应用之间内部使用,又不想在浏览器中直接访问的内容,可以直接放在这里,例如配置文件

/WEB-INF/web.xml

这个文件必需,用来定义web应用行为

/WEB-INF/classes/

存放web应用相关java class文件

/WEB-INF/lib/

存放第三方jar文件

Jetty web应用优先从/WEB-INF/classes目录装载class文件,然后再从/WEB-INF/lib中的jar文件中

Web应用自动部署

我们把war文件或者把war解压成目录,放到{jetty.home}/webapps目录下,jetty 部署扫描器就会找到它并依照上下文路径进行部署。

部署上下文路径对应有以下关系:

文件或目录名称分配上下文路径
/webapps/footrope.warhttp://host/footrope/
/webapps/baggywrinkle-1.0.warhttp://host/baggywrinkle-1.0/
/webapps/lazaret-2.1.3-SNAPSHOT.warhttp://host/lazaret-2.1.3-SNAPSHOT/
/webapps/belaying-pins/WEB-INF/web.xmlhttp://host/belaying-pins/
/webapps/root.war (special name)

http://host/

/webapps/root/WEB-INF/web.xml (special name)http://host/

Web应用定制配置

有的时候,你不想让上下文路径就是文件的名称,或者你想使用特殊的数据库连接池,尽快使用自动部署方便简单。

我们需要使用Jetty 部署描述配置文件来完成。

Jetty支持通过XML文件创建ContextHandler实例来完成部署。

下面是一个最简单的jetty部署的XML配置文件

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">

<Configure class="org.eclipse.jetty.webapp.WebAppContext">

<Set name="contextPath">/wiki</Set>

<Set name="war">/opt/myapp/myapp.war</Set>

</Configure>

我们看到两个属性需要配置,分别是contextPath和war

如果war的路径经常变更,还可以使用SystemProperty元素,假设SystemProperty设置为myapp.home=/opt/myapp

那么上面的配置文件可以修改为

<?xml version=”1.0” encoding=”UTF-8”?>

<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">

<Configure class="org.eclipse.jetty.webapp.WebAppContext">

<Set name="contextPath">/wiki</Set>

<Set name="war"><SystemProperty name="myapp.home"/>/myapp.war</Set>

</Configure>

如果需要添加初始化参数,那么在这里也是可以添加,不过对于唯一的命名参数,在web.xml中存在是会覆盖这里设置的参数值。

<?xml version=”1.0” encoding=”UTF-8”?>

<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">

<Configure class="org.eclipse.jetty.webapp.WebAppContext">

<Set name="contextPath">/wiki</Set>

<Set name="war"><SystemProperty name="myapp.home"/>/myapp.war</Set>

<Get name="ServletContext">

<Call name="setInitParameter">

<Arg>myapp.config</Arg>

<Arg><SystemProperty name="myapp.home">/config/app-config.xml</Arg>

</Call>

</Get>

</Configure>

如果想要覆盖web.xml配置文件中的参数,而又不破坏war文件,可以使用如下配置方法。

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">

<Configure class="org.eclipse.jetty.webapp.WebAppContext">

<Set name="contextPath">/wiki</Set>

<Set name="war"><SystemProperty name="myapp.home"/>/myapp.war</Set>

<Set name="overrideDescriptor">/opt/myapp/overlay-web.xml</Set>

</Configure>

最后,也最有用的一种配置方法,添加数据库连接池,如果在web.xml中没有配置,可以使用如下配置方法。

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">

<Configure class="org.eclipse.jetty.webapp.WebAppContext">

<Set name="contextPath">/wiki</Set>

<Set name="war"><SystemProperty name="myapp.home"/>/myapp.war</Set>

<New id="DSTest" class="org.eclipse.jetty.plus.jndi.Resource">

<Arg></Arg>

<Arg>jdbc/DSTest</Arg>

<Arg>

<New class="org.apache.commons.dbcp.BasicDataSource">

<Set name="driverClassName">org.some.Driver</Set>

<Set name="url">jdbc.url</Set>

<Set name="username">jdbc.user</Set>

<Set name="password">jdbc.pass</Set>

</New>

</Arg>

</New>

</Configure>

转载于:https://my.oschina.net/longfirst/blog/699890

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值