Java Tomcat 8将连字符转换为URL中的%2D
如何防止Tomcat在URL中将连字符(-)编码为%2D。当从Safari浏览器发出请求时,此行为会导致一些与会话相关的问题 部署的war文件: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
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('/');
}