将web程序部署到webapps目录下,导致定时任务启动两次,后来查看上下文启动,发现真的启动了两次,contextpath如下:
1. /
2. mycms
我到webapps目录结构如下:
mycms/
website.xml
其中website.xml文件是jetty的xml部署描述符,因此jetty启动后会启动两次,一次是website.xml部署文件启动的,另一次是jetty容器自动识别webapps/mycms/WEB-INF/web.xml标准Servlet应用启动的。
解决方法:
1. 更改部署方式,删除website.xml部署描述文件,重命名mycms文件夹为root,这样启动的contextpath为“/”
2. 删除mycms文件夹,配置标准的war包,将website.xml文件中的war属性指向war包所在路径
P.S.: jetty部署方式(摘自参考资料)
jetty支持多种部署方式,比如servlet规范中的满足以上内容条件的war包,jetty自己提供的xml部署描述符,或者直接就是一个满足servlet规范的文件夹(war包本来也是要解压的)
(1)简单部署,直接将war包或者解压的war目录放入jetty.home/webapps目录下,然后启动,jetty的部署扫描器会找到部署的内容,然后自动设置contextPath为该war包或war目录的名字即可完成部署,但要注意war的名字,当war的名字为root.war或者文件夹的名字为war的时候,contextPath就是root,在浏览器中访问的时候就不需要输入contextPath了,而直接访问根目录,比如http://localhost:8080/就可以访问到root.war这个应用了,当你的jetty只需要部署这一个应用,将其命名为root.war还是可以滴.
当你需要使war包的名字和contextPath不同,这时候怎么办呢?就是第二种方式:
(2)XML部署描述符,这种方式就是在webapps目录中不放除了xml文件描述符之外的任何war包或者war目录,jetty部署扫描器能自动加载到这个xml文件,然后通过xml文件中定义的WebAppContext实例中的war和contextPath属性来找到你的war包或者war目录,比如这样一个xml文件:
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Set name="contextPath">/mycontext</Set>
<Set name="war">/home/wilsonp/myapp/myapp.war</Set>
</Configure>
(3)war包部署
参考资料: