Java Tomcat 8将连字符转换为URL中的%2D

Java Tomcat 8将连字符转换为URL中的%2D,java,tomcat,Java,Tomcat,如何防止Tomcat在URL中将连字符(-)编码为%2D。当从Safari浏览器发出请求时,此行为会导致一些与会话相关的问题 部署的war文件:my app.war 生成的url:/my%2Dapp 所需url:/my app我认为您不应该尝试手动控制此操作。相反,您需要在conf/Catalina/localhost/my-app.xml下定义自己的上下文文件 然后: 你可以玩这个直到你得到你想要的正确行为 我认为你不应该试图手动控制它。相反,您需要在conf/Catalina/local

如何防止Tomcat在URL中将连字符(-)编码为%2D。当从Safari浏览器发出请求时,此行为会导致一些与会话相关的问题

部署的war文件:
my app.war

生成的url:
/my%2Dapp


所需url:
/my app

我认为您不应该尝试手动控制此操作。相反,您需要在conf/Catalina/localhost/my-app.xml下定义自己的上下文文件 然后:



你可以玩这个直到你得到你想要的正确行为

我认为你不应该试图手动控制它。相反,您需要在conf/Catalina/localhost/my-app.xml下定义自己的上下文文件 然后:



你可以玩这个直到你得到你想要的正确行为

只需在上下文配置中设置路径:

<Context path="/myAppPath" docBase="h:/foo/mywar.war" reloadable="true" />


在这种情况下,您可以使用:
http://domain/myAppPath/

只需在上下文配置中设置路径:

<Context path="/myAppPath" docBase="h:/foo/mywar.war" reloadable="true" />


在这种情况下,您可以使用:
http://domain/myAppPath/

如果您指的是Tomcat管理器生成的链接: 您遇到的问题不是源于任何
上下文
配置,而是源于。此servlet包括以下内容:

而是:


因此,结果是除了
/
之外的每个字符都是用UTF-8编码的URL。

如果您指的是Tomcat管理器生成的链接: 您遇到的问题不是源于任何
上下文
配置,而是源于。此servlet包括以下内容:

而是:


因此结果是除了
/
之外的每个字符都是用UTF-8编码的URL。

conf/server.xml
Connector
标记中
URIEncoding
属性的值是多少?我们正在运行Tomcat 8和带有连字符的webapps。我们没有任何问题。可能还有其他问题?请添加在部署my-app.war后由Tomcat生成的代码,该代码生成
/my%2Dapp
/my%2Dapp
。我相信Tomcat的配置与Tomcat主机管理器应用程序(默认情况下随Tomcat提供)有关包含相同的替换字符
/host%2Dmanager/
conf/server.xml的
Connector
标记中的
URIEncoding
属性值是多少?我们正在运行带有连字符的Tomcat 8和webapps。我们没有任何问题。可能还有其他问题?请添加在部署my-app.war后由Tomcat生成的代码,该代码生成
/my%2Dapp
/my%2Dapp
。我相信这与Tomcat的配置有关,因为Tomcat主机管理器应用程序(默认情况下随Tomcat提供)包含相同的替换字符
/Host%2Dmanager/
。是的,您是对的@Michael-O。问题存在于HTMLManagerServlet中。我已经使用
cargo-maven2-plugin
部署了应用程序,现在所有的URL看起来都很好。那么,HTMLManagerServlet行为中是否存在缺陷,或者可以在某个地方重新配置它?@vim,你不能。这是在servlet中硬编码的。如果您认为这会导致问题,我建议您向ApacheTomcat提交一个问题。这值得赏金吗?是的,你是对的@Michael-O。这个问题存在于HTMLManagerServlet中。我已经使用
cargo-maven2-plugin
部署了应用程序,现在所有的URL看起来都很好。那么,HTMLManagerServlet行为中是否存在缺陷,或者可以在某个地方重新配置它?@vim,你不能。这是在servlet中硬编码的。如果您认为这会导致问题,我建议您向ApacheTomcat提交一个问题。这值得赏金吗?
 "<a href=\"" + URL_ENCODER.encode(contextPath + "/")
public static final URLEncoder DEFAULT = new URLEncoder();
static {
    DEFAULT.addSafeCharacter('~');
    DEFAULT.addSafeCharacter('-');
    DEFAULT.addSafeCharacter('_');
    DEFAULT.addSafeCharacter('.');
    DEFAULT.addSafeCharacter('*');
    DEFAULT.addSafeCharacter('/');
}
static {
    URL_ENCODER = new URLEncoder();
    // '/' should not be encoded in context paths
    URL_ENCODER.addSafeCharacter('/');
}