Tapestry url编码tomcat';s webapp路径

Tapestry url编码tomcat';s webapp路径,tomcat,tomcat6,tapestry,Tomcat,Tomcat6,Tapestry,我使用maven tomcat插件在tomcat6服务器上部署tapestry应用程序。部署过程运行良好,但现在我需要使用不同的路径为生产/开发/测试等环境多次部署它。这是一个使用maven概要文件的部署过程 我已将一个部署配置文件的上下文路径设置为:/myapp/latest。生成的用于部署的URL如下所示: http://example.com:8080/manager/deploy?path=%2Fmyapp%2Flatest&update=true Tomcat现在使用了一些惯

我使用maven tomcat插件在tomcat6服务器上部署tapestry应用程序。部署过程运行良好,但现在我需要使用不同的路径为生产/开发/测试等环境多次部署它。这是一个使用maven概要文件的部署过程

我已将一个部署配置文件的上下文路径设置为:
/myapp/latest
。生成的用于部署的URL如下所示:

http://example.com:8080/manager/deploy?path=%2Fmyapp%2Flatest&update=true
Tomcat现在使用了一些惯例:在.war的文件名中,散列符号被斜杠替换(
/
)来构造应用程序的url。war被解包到一个文件夹中,该文件夹的名称是war的文件名,扩展名为.war

无法启动应用程序,从日志中可以看出原因很清楚:

Caused by: java.io.FileNotFoundException: /var/lib/tomcat6/webapps/myapp%23latest/WEB-INF/classes/de/myapp/services/AppModule.class (No such file or directory)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:120)
    at org.apache.tapestry5.internal.plastic.PlasticInternalUtils.getStreamForPath(PlasticInternalUtils.java:408)
    at org.apache.tapestry5.internal.plastic.PlasticInternalUtils.readBytecodeForClass(PlasticInternalUtils.java:370)
原因:java.io.FileNotFoundException:/var/lib/tomcat6/webapps/myapp%23latest/WEB-INF/classes/de/myapp/services/AppModule.class(无此类文件或目录)
在java.io.FileInputStream.open(本机方法)
位于java.io.FileInputStream。(FileInputStream.java:120)
位于org.apache.tapestry5.internal.plastic.plasticinternnalutils.getStreamForPath(plasticinternnalutils.java:408)
位于org.apache.tapestry5.internal.plastic.PlasticInternalUtils.readBytecodeForClass(PlasticInternalUtils.java:370)
路径
/var/lib/tomcat6/webapps/myapp%23latest/
不存在,当然应该是
/var/lib/tomcat6/webapps/myapp#latest/
<代码>%23是一个哈希符号,所以我猜在某个点上它得到了url编码。我在这个问题上找不到太多,只有一些tomcat7涉及双哈希,不幸的是没有任何解决方案

我可以通过不使用子路径来避免这个问题,但我知道这个方法应该有效:我已经在grizzly/jersey项目中使用了相同的方法,没有任何问题


如何正确设置子路径?有没有办法告诉应用程序不要对路径进行编码?tomcat插件在这里似乎没有提供太多选项,所以有没有办法在web.xml或context.xml之类的配置文件中设置路径?

进一步说我的评论,我认为这可能是由于Tapestry的
PlasticInternalUtils.getStreamForPath
方法中的错误造成的。您可以在这里找到:

if (url.getProtocol().equals("file"))
    {
        String urlPath = url.getPath();
        String decoded = urlPath.replaceAll("%20", " ");
        return new FileInputStream(new File(decoded));
     }
所以空间被处理了,但是其他的逃逸序列没有。我建议您提交一个bug,然后使用以下方法构建您自己的Tapestry版本,并对所有转义序列进行解码:

URLDecoder.decode(urlPath, "UTF-8") 

我假定创建了
/var/lib/tomcat6/webapps/myapp%23latest/
,因为日志表明错误发生在应用程序初始化期间,而不是在查找时出现问题。我想知道
getStreamForPath
是否对该路径应用了错误的转义