这两天在部署jsp的lucene搜索到linux下的时候,出现了很多让人头疼的问题.我把一些问题写出来,希望对遇到这些问题的人能有所帮助
1:mysql的连接权限问题:
我在windwos下怎么测试都没有问题,可是一上linux连接mysql 就把我连接的帐号给deny掉了, 我是用user为"root"的帐号连接的,后来经过调试,发现linux连的是user字段为"root",host字段为"%",的帐号,因为user字段为"root"的帐号其实有两个,不知道为什么代码是一样的在linux上和windows上居然分别调用不同的root帐号.搞的狂郁闷,这也真是很难发现.后来想想大概知道了些原因.
2:编码问题:
在PHP里很少出现编码问题,可是java为了更好的国际化却导致了程序经常出现编码问题,这总是会让程序员搞的非常头疼.
这次是lucene搜索用的structs框架,总结了一下其中包括以下几个编码要很仔细处理.
1:数据库读出的数据的编码.
2:将数据读出后用lucene建立的索引的编码
3:将索引分词时需要的编码.
4:form提交的搜索词的编码.
以上在windwos下我很容易就测试通过了基本不用设定,可是到linux下编码就要很小心的处理,才能匹配上.
jsp的structs框架可以在web.xml中加个过滤类来转换提交字符.这个编码不能像想象中的一样简单的设为gbk,而要看mysql中的记录是什么编码,两者必须匹配才能搜出来.而这个匹配也不是简单的想象中可以设定的
譬如:我把mysql连接字符设为"jdbc:mysql://localhost:3306/pa201? useUnicode=true&characterEncoding=gbk"
网页中form提交的过滤字符也设为gbk是没有用的,必须都为latin1.
当得出latin1数据后,建立索引时候,为了分词,数据库里读出的数据必须要转换为gbk,才能正确的分词!可以用这个函数.
public String iso2gb(String str) throws Exception {
if(str==null)return str;
str = new String(str.getBytes("latin1"), "GBK");
return str;
}