gpt4 book ai didi

tomcat - Tapestry url编码tomcat的webapp路径

转载 作者:行者123 更新时间:2023-11-28 23:57:59 24 4
gpt4 key购买 nike

我正在使用 maven-tomcat-plugin 在 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)

路径/var/lib/tomcat6/webapps/myapp%23latest/不存在,应该是/var/lib/tomcat6/webapps/myapp#latest/当然。 %23 是一个井号,所以我猜它在某个时候得到了 url 编码。我在这个问题上找不到太多信息,只有一些 similiar issue对于涉及双哈希的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") 

关于tomcat - Tapestry url编码tomcat的webapp路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12977429/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com