星期三, 十月 11, 2006
HTML Comments
HTML中的注释,定义很简单,不过却比较搞。因为末尾的"--"和">"之间允许有空格,而开头的"<"和"--"之间却不可以。这就暗示了,注释的内容中,如果出现连续的"-",那么,解析将有可能出错。
Firefox表叫严格地遵循W3C标准,所以,碰到这种情形(html注释内容中包含"--"字样),有时会将部分注释显示出来。不过,IE不会,似乎IE对这些不符合规范的格式兼容得很好
星期一, 二月 20, 2006
再谈tomcat 5.x环境下的字符编码问题
@see "Tomcat环境下,字符编码的filter"
确实比较晕,tomcat server让多字节编码的国家吃尽苦头
原先以为,加这么个filter就一了百了了,实际上要复杂的多
原因是,这个filter的方法对tomcat 4.x版本是起作用的,但是在tomcat 5以后,就不完全适合了
为什么呢?
因为在http method是GET的时候,tomcat server 5.x会根据server.xml配置中<Connector>元素的URIEncoding属性设置,自己处理字符编码(此处讨论,不考虑主要是为了和tomcat 4兼容的useBodyEncodingForURI属性)
这也就意味着,如果你使用tomcat 5.x,你必须在doFilter的时候,区分http请求的方法是GET还是POST,如果是POST,调用request.setCharacterEncoding(encoding)来处理字符编码;如果是GET,则应当将这转换编码的工作交给tomcat server。为了让tomcat能正常处理你的字符编码,必须注意要设置正确的URIEncoding属性。譬如,网页编码是GBK的,则应当设置URIEncoding="GBK",特别的,如果需要生成URL的,则URL中的中文字符必须转码成符合GBK编码的%xx的格式。
对于使用GBK编码,使用tomcat 5.x server的网站,如下的配置和设计是正确的:
1)<Connector ... URIEncoding="GBK" ... />
2)使用filter,encoding=GBK
3)filter中区分http请求,代码如下:
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain)
throws IOException, ServletException {
// Conditionally select and set the character encoding to be used
if (ignore || (request.getCharacterEncoding() == null)) {
String encoding = selectEncoding(request);
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
if (encoding != null && httpServletRequest.getMethod().equalsIgnoreCase("POST"))
request.setCharacterEncoding(encoding);
}
// Pass control on to the next filter
chain.doFilter(request, response);
}
4)直接使用URL的,如果URL中的参数值包含中文,则必须根据GBK的编码方式将每个中文字符转成%xx%xx的格式,如:<A href="/search.shtml?action=search&key=%CC%AB%D1%F4%C4%DC">太阳能</A>
星期六, 十二月 10, 2005
java.lang.NoClassDefFoundError: javax/activation/DataSource
奇怪的异常。在创建一个MimeMessage对象的时候抛出的。
在项目的WEB-INF/lib中的确有activation.jar,但却总报这个错误。直到后来将activation.jar包拷贝到tomcat的common/lib下才算解决。不过解决的不明不白,郁闷。