一尘不染

eclipse vs tomcat部署-项目在eclipse中运行时,导出的战争(部分)失败

tomcat

我在eclipse juno中有一个webapp-当我单击_“在服务器上_运行时运行良好”时-在eclipse的浏览器中(我在Windows上)或FF中。

右键单击> 导出战争 >将其转储到$ CATALINA_HOME / webapps中>一切正常(解压好了) EXCEPT

  • 我的自定义标签-我有一个WEB-INF\functions.tld显然未读取的文件。自动生成的Eclipse server.xml(在Servers项目中)和默认的Tomcat 之间的唯一区别server.xml是以下行:
    <Context docBase="ted2012" path="/ted2012"
    

    reloadable=”true”source=”org.eclipse.jst.jee.server:ted2012”/>

source是WTP的特定属性。 我设法解决了这个

问题:

  1. (未解决)为什么Tomcat无法正确解码Url, 而eclipse可以 正确解码?失败在哪里?请查看我的特定问题,以]获取有关调用堆栈以及tomcat到底在哪里失败的大量详细信息
  2. 为什么eclipse时tomcat首先没有看到tld?为什么我必须编辑web.xml?(解决我的答案,应该是另一个问题)

代码在github中-文件INSTRUCTIONS.txt中有详细的说明来设置项目并重现下面我的答案中所示的错误。

Tomcat 7.0.32,Eclipse 4.2,Java 1.7.9


阅读 213

收藏
2020-06-16

共1个答案

一尘不染

为了正确地解码URI,您需要在Tomcat中使用URIEncoding连接器属性:

<connector ... URIEncoding="UTF-8" ... />

因此,它没有普通代码,您需要在应用服务器配置中单独使用它,或者使用默认为UTF-8的应用服务器。不幸的是,没有办法从代码中影响这一点。

在没有显式编码参数的情况下,请删除decodeRequest并且永远不要使用new String/getBytes


另类。

如果您无法编辑服务器连接器配置,则可以通过将编码显式提供给来修复代码new String

public static String decodeRequest(String parameter) {
     return new String(parameter.getBytes("iso-8859-1"), "UTF-8");
}
2020-06-16