0

我在 Win7 64 位上将战争部署到我的 Tomcat 6.0.35 并且当我在 Solr Admin 中使用全界面查询页面(我的意思是 form.jsp)来查询 2 个汉字(比如说它是 C1C2)时,调试信息显示:

<lst name="debug">
  <str name="rawquerystring">æ°è</str>
  <str name="querystring">æ°è</str>
  <str name="parsedquery">NEWSID:æ°è</str>
  <str name="parsedquery_toString">NEWSID:æ°è</str>
...

你可以看到 C1C2 变成了æ°è。我将相同的war文件部署到Linux上的Tomcat或同事计算机的另一台Win7 64位上,编码效果很好。有谁知道为什么以及如何避免这个问题?

提前致谢!

4

1 回答 1

0

我解决了这个问题。邪恶是Win7的文件虚拟化功能。默认情况下,Win7会在几个众所周知的文件夹上启用此功能,例如Windows、Program Files、ProgramData等。效果是在某些情况下,一个文件会有双重内容,而这恰好发生在我的server.xml上.

解决方法是清理“ c:\Users\<user account>\AppData\local\VirtualStore ”中的内容。长期以来的解决方案是“不要在这些众所周知的文件夹中安装Tomcat。如果您坚持,请确保不要安装-n-卸载太多次。”

~~~ 我是怎么发现这个问题的(你可能不需要看这个)~~~

两个字:“纯属运气”。当我使用一些 xml 编辑器编辑 tomcat-users.xml 并添加用户“测试”时。我重新启动 Tomcat 但无法登录以使用管理器 UI。我重新检查了 tomcat-users.xml 并看到确实设置了用户。即使我卸载-'n-安装不同版本的Tomcat,登录仍然失败。

然后我使用记事本编辑 tomcat-users.xml,我很惊讶地看到它是 Tomcat 安装的原始版本。用记事本编辑它并重新启动Tomcat后,我现在可以登录了。

很快,我的想法闪现到 server.xml 并使用记事本查看。啊哈!连接器标记中没有URIEncoding属性。修复后,问题就解决了。

日志

就我而言,我的 xml 编辑器和 IE 都显示错误的版本,但我的其他浏览器和记事本显示正确的版本。我仍然不知道 Win7 在文件虚拟化上使用什么算法,所以我认为解决方法会存在一段时间。

于 2012-06-13T06:17:06.197 回答