Tomcat和IntelliJ –在webapps文件夹之外部署war文件

目前,我正在开发一个Android应用程序,该应用程序需要云中托管的大量REST服务来支持。 我基于对Java,Groovy以及最重要的Spring的支持选择了Google App Engine 。 我开发了一个基于Spring MVC的REST应用程序,并使用ContentNegotiatingViewResolver来基于请求URL扩展来协商内容。 例如,如果请求URL以结尾,则将返回XML响应。 xml ,是的JSON响应。 json和HTML响应(如果他的URL没有任何扩展名)。 不要让我开始使用“接受标头”与基于URL扩展的内容协商。 那是另一天的咆哮。

我正在尝试序列化Map <Enum,List <Model >> 。 一切都很好,我能够检索HTML和JSON表示形式,但是当我尝试检索XML表示形式时,JAXB抱怨说,尽管Jackson非常酷,但它无法在根目录中处理Map实例。 像往常一样,Googling透露JAXB希望在我的根目录中创建一个Container类,而我不想创建它。 我也不想放弃。 因此,我使用XStreamMarshaller尝试了运气。 这次GAE抱怨XStream使用了受限制的API。 什么

出于好奇,我想检查XStreamMarshaller在GAE之外使用时是否能按预期工作。 因此,我使用以下定义创建了Tomcat上下文文件“ myapp.xml”,并将其小心地放置在TOMCAT_HOME / conf / Catalina / localhost中 。 我本来可以从TOMCAT_HOME / bin / startup.bat启动Tomcat来检查它是否有效,但是由于是IDEA迷,我为IDEA Tomcat插件创建了运行配置,并从IDEA内部启动了服务器。 但是该应用程序甚至拒绝被发现,更不用说部署了。 经过几次失败的尝试后,我尝试在IDEA外部直接启动Tomcat。 幸运的是,该应用程序已成功部署,令我惊讶的是,XStreamMarshaller巧妙地流了序列化的XML。 问题解决了!

<?xml version='1.0' encoding='utf-8'?>
<Context docBase="PATH_TO_MY_APP"
         reloadable="true"
         path="/myapp">
</Context>

但是,当我从IDEA内部启动Tomcat时,为什么没有部署该应用程序? 毕竟,我已经将IDEA链接到本地​​Tomcat安装,并且它执行的脚本显然在我的TOMCAT_HOME / bin文件夹中。 然后,为什么为什么在世界上为什么拒绝发现该应用程序? 解决方案以CATALINA_BASE的形式出现。 似乎IDEA将TOMCAT_HOME / conf文件夹的内容复制到其HOME文件夹中,其名称类似于Unnamed_MyApp ,并将此文件夹设置为CATALINA_BASE 。 这就解释了为什么Tomcat完全忽略了“ myapp.xml”。 然后,我导航到“ Tomcat运行配置->启动/连接->环境变量”,并添加了CATALINA_BASE作为环境变量,并将其指向本地TOMCAT_HOME文件夹。 进行此配置更改后,IDEA按预期方式启动了Tomcat,并且发现并部署了我的应用程序。 解决了另一个问题!

但是真正的问题-JAXB抱怨Map和GAE拒绝XStreamMarshaller受限制-是尚未解决。 也许我应该尝试CastorMarshaller,XmlBeansMarshaller或JibxMarshaller中的一种。

有任何想法吗?

参考: Tomcat和IntelliJ –从我们的JCG合作伙伴的 webapps文件夹之外部署war文件   Ganesh博客上的 Ganeshji Marwaha。


翻译自: https://www.javacodegeeks.com/2012/02/tomcat-intellij-deploy-war-files.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值