Jetty:部署到Jetty

Web应用的框架

标准Jetty发布版本能部署标准servlet Spec Web应用和Jetty内部ContextHandler部署描述符,或者两者的一个混合。
Web应用是可部署的动态(servlets、filters、jsps、等等)和静态内容、支持库、和绑定到特定上下文路径的描写性的元数据的集合。
格式和布局最终都是通过Servlet Spec定义,你可以查阅官方Servlet Spec文档获取关于Web应用布局和结构的更多细节,这里将给出一个基本的轮廓。
Web应用能被捆绑到一个单个的Web文件(WAR文件)或者作为一个文件夹树:
 1)/WEB-INF/
 专门的Servlet API定义文件夹,通常存储和Web应用相关但不为外部访问的任何东西。
 如果你有内容被你的Web应用内部访问,但不会被web浏览器直接地访问,你就应该把他们放在这里。
 2)/WEB-INF/web.xml
 必须的部署描述符,用于定义你的Web应用的各种行为。
 3)/WEB-INF/classes/
 Web应用的java classes文件放置目录。
 4)/WEB-INF/lib/
 JAR文件放置的目录。

自动的Web应用部署

为了部署Web应用,最简单的方式就是放置你的WAR文件或者解压后的WAR文件夹到${jetty.home}/webapps/,Jetty的部署扫描器将发现它,并部署它到同名的Context路径下。
上下文路径基于你的WAR的文件名(或文件夹名)。下面是一些例子(文件或文件夹名->上下文路径):
/webapps/footrope.war -> http://host/footrope/
/webapps/baggywrinkle-1.0.war -> http://host/baggywrinkle-1.0/
/webapps/lazaret-2.1.3-SNAPSHOT.war -> http://host/lazaret-2.1.3-SNAPSHOT/
/webapps/belaying-pins/WEB-INF/web.xml -> http://host/belaying-pins/
/webapps/root.war (special name) -> http://host/
/webapps/root/WEB-INF/web.xml (special name) -> http://host/

配置特定的Web应用部署

用自动的Web应用部署方式是快速和简单的,但有时你也许需要调整一些部署属性(例如,你想指定一个上下文路径而不是使用文件名,或者你想为这个Web应用指定一个特定的数据库连接池),你可以使用Jetty Deployable Descriptor XML文件来实现。
Jetty支持通过XML文件部署Web应用,这些XML文件将构建一个Jetty能部署的ContextHandler实例。

使用基本的描述符文件

在默认的Jetty安装中,Jetty扫描他的$JETTY_HOME/webapps文件夹查找上下文部署描述符文件,为了用这个文件部署一个web应用,只需要放置这个文件在那个文件夹中。
部署描述符文件自己是一个配置了一个WebAppContext类的XML文件。为了一个基本的安装,你需要设置仅两个属性:
     war:web应用文件(或文件夹)的文件路径;
     contextPath:web应用使用的上下文路径。
例如,下面是是一个描述符文件,将/opt/myapp/myapp.war部署到上下文路径/wiki:

<?xml version="1.0"  encoding="ISO-8859-1"?>
<!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>

或者你可以使用SystemProperty和Property元素在你的描述符文件中,如果你设置了系统属性myapp.home=/opt/myapp,你能重写上面的例子:

<?xml version="1.0"  encoding="ISO-8859-1"?>
<!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>

如果你需要为你的应用修改home路径,你仅需要改变系统属性,这在有些场合非常有用。

配置高级描述符文件

如果你看WebAppContext类的文档,你会发现它有许多属性而不是仅仅有上面提到的两项,下面是一些为你的描述符文件配置高级属性的例子。
第一个例子告诉Jetty在部署WAR文件的时候不要解压。这能帮助用户避免修改解压后的WAR,导致web应用下次部署的时候修改被还原。

<?xml version="1.0"  encoding="ISO-8859-1"?>
<!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="extractWAR">false</Set>
</Configure>

下面的例子是获取JavaEE Servlet上下文,并为它设置初始化参数。你也能使用setAttribute方法设置Servlet上下文属性。然而,由于web应用的web.xml在部署描述符之后处理,web.xml值可能覆盖你设置的属性值。

<?xml version="1.0"  encoding="ISO-8859-1"?>
<!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的覆盖描述符的例子,该描述符在web应用的web.xml之后处理,因此它可以覆盖web.xml中设置的同名属性。当你想添加参数或者额外的附加Servlet mappings又不想修改压缩的WAR文件的时候,可以采用这种方式。

<?xml version="1.0"  encoding="ISO-8859-1"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
 
<Configure class="org.eclipse.jetty.webapp.WebAppContext&
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值