﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-liltos-文章分类-J2EE</title><link>http://www.blogjava.net/liltos/category/37432.html</link><description /><language>zh-cn</language><lastBuildDate>Sat, 14 Feb 2009 18:59:08 GMT</lastBuildDate><pubDate>Sat, 14 Feb 2009 18:59:08 GMT</pubDate><ttl>60</ttl><item><title>tomcat 乱码</title><link>http://www.blogjava.net/liltos/articles/253218.html</link><dc:creator>洁白滴黑子</dc:creator><author>洁白滴黑子</author><pubDate>Wed, 04 Feb 2009 04:00:00 GMT</pubDate><guid>http://www.blogjava.net/liltos/articles/253218.html</guid><wfw:comment>http://www.blogjava.net/liltos/comments/253218.html</wfw:comment><comments>http://www.blogjava.net/liltos/articles/253218.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/liltos/comments/commentRss/253218.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/liltos/services/trackbacks/253218.html</trackback:ping><description><![CDATA[为应用添加一个 CharsetFilter 是极其普通的事情，做的事情无非是 request.setCharseterEncoding(xxx)，如果需要，response可能也会动动。<br />
如此简单，依然出了乱码问题。看代码：<br />
<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #008080;">&nbsp;1</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;doFilter(ServletRequest&nbsp;request,&nbsp;ServletResponse&nbsp;response,&nbsp;FilterChain&nbsp;chain)&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;IOException,&nbsp;ServletException&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;2</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.info(</span><span style="color: #000000;">"</span><span style="color: #000000;">response.isCommitted()&nbsp;=&gt;&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;response.isCommitted());<br />
</span><span style="color: #008080;">&nbsp;3</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">if</span><span style="color: #000000;">&nbsp;(response.isCommitted())&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;4</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletRequest&nbsp;req&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(HttpServletRequest)&nbsp;request;<br />
</span><span style="color: #008080;">&nbsp;5</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpServletResponse&nbsp;resp&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;(HttpServletResponse)&nbsp;response;<br />
</span><span style="color: #008080;">&nbsp;6</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Cookie[]&nbsp;cks&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;req.getCookies();<br />
</span><span style="color: #008080;">&nbsp;7</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">for</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">int</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">0</span><span style="color: #000000;">;&nbsp;cks&nbsp;</span><span style="color: #000000;">!=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">null</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">&amp;&amp;</span><span style="color: #000000;">&nbsp;i&nbsp;</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">&nbsp;cks.length;&nbsp;i</span><span style="color: #000000;">++</span><span style="color: #000000;">)&nbsp;{<br />
</span><span style="color: #008080;">&nbsp;8</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.info(</span><span style="color: #000000;">"</span><span style="color: #000000;">cookie:\t</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;cks[i].getName()&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;=&gt;&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;cks[i].getValue());<br />
</span><span style="color: #008080;">&nbsp;9</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">10</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;java.util.Enumeration</span><span style="color: #000000;">&lt;</span><span style="color: #000000;">String</span><span style="color: #000000;">&gt;</span><span style="color: #000000;">&nbsp;enu&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;req.getHeaderNames();<br />
</span><span style="color: #008080;">11</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">while</span><span style="color: #000000;">&nbsp;(enu.hasMoreElements())&nbsp;{<br />
</span><span style="color: #008080;">12</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;s&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;enu.nextElement();<br />
</span><span style="color: #008080;">13</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.info(</span><span style="color: #000000;">"</span><span style="color: #000000;">header:\t</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;s&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;=&gt;&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;req.getHeader(s));<br />
</span><span style="color: #008080;">14</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">15</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.info(</span><span style="color: #000000;">"</span><span style="color: #000000;">response.getCharacterEncoding()&nbsp;=&gt;&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;response.getCharacterEncoding());<br />
</span><span style="color: #008080;">16</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.info(</span><span style="color: #000000;">"</span><span style="color: #000000;">response.getLocale().getLanguage()&nbsp;=&gt;&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;response.getLocale().getLanguage());<br />
</span><span style="color: #008080;">17</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.info(</span><span style="color: #000000;">"</span><span style="color: #000000;">response.getContentType()&nbsp;=&gt;&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;response.getContentType());<br />
</span><span style="color: #008080;">18</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;log.info(</span><span style="color: #000000;">"</span><span style="color: #000000;">request.getRequestURI()&nbsp;=&gt;&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;req.getRequestURI());<br />
</span><span style="color: #008080;">19</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">throw</span><span style="color: #000000;">&nbsp;(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;IOException(</span><span style="color: #000000;">"</span><span style="color: #000000;">----xxx---&gt;&gt;&gt;&nbsp;&nbsp;&nbsp;response&nbsp;is&nbsp;committed.</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br />
</span><span style="color: #008080;">20</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">21</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080;">22</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setCharacterEncoding(encoding);<br />
</span><span style="color: #008080;">23</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setContentType(</span><span style="color: #000000;">"</span><span style="color: #000000;">text/html;&nbsp;charset=utf-8</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">24</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;chain.doFilter(request,&nbsp;response);<br />
</span><span style="color: #008080;">25</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setCharacterEncoding(encoding);<br />
</span><span style="color: #008080;">26</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;response.setContentType(</span><span style="color: #000000;">"</span><span style="color: #000000;">text/html;&nbsp;charset=utf-8</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
</span><span style="color: #008080;">27</span>&nbsp;<span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080;">28</span>&nbsp;</div>
<br />
这个 Filter 在 web.xml 中，定义在 Filter Chain 中的第一个。<br />
<br />
而出错日志则是这样的：<br />
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #000000;">03</span><span style="color: #000000;">&nbsp;Feb&nbsp;</span><span style="color: #000000;">2009</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">18</span><span style="color: #000000;">:</span><span style="color: #000000;">48</span><span style="color: #000000;">:</span><span style="color: #000000;">20</span><span style="color: #000000;">&nbsp;(CharsetFilter.java:</span><span style="color: #000000;">31</span><span style="color: #000000;">)&nbsp;INFO&nbsp;&nbsp;&nbsp;-&nbsp;response.isCommitted()&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&gt;&nbsp;true<br />
</span><span style="color: #000000;">03</span><span style="color: #000000;">&nbsp;Feb&nbsp;</span><span style="color: #000000;">2009</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">18</span><span style="color: #000000;">:</span><span style="color: #000000;">48</span><span style="color: #000000;">:</span><span style="color: #000000;">20</span><span style="color: #000000;">&nbsp;(CharsetFilter.java:</span><span style="color: #000000;">37</span><span style="color: #000000;">)&nbsp;INFO&nbsp;&nbsp;&nbsp;-&nbsp;cookie:&nbsp;&nbsp;&nbsp;JSESSIONID&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&gt;&nbsp;A6293E5AAC56D62B9A0AA63E6C4B4935<br />
</span><span style="color: #000000;">03</span><span style="color: #000000;">&nbsp;Feb&nbsp;</span><span style="color: #000000;">2009</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">18</span><span style="color: #000000;">:</span><span style="color: #000000;">48</span><span style="color: #000000;">:</span><span style="color: #000000;">20</span><span style="color: #000000;">&nbsp;(CharsetFilter.java:</span><span style="color: #000000;">37</span><span style="color: #000000;">)&nbsp;INFO&nbsp;&nbsp;&nbsp;-&nbsp;cookie:&nbsp;&nbsp;&nbsp;user_request_locale&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&gt;&nbsp;zh_CN<br />
</span><span style="color: #000000;">03</span><span style="color: #000000;">&nbsp;Feb&nbsp;</span><span style="color: #000000;">2009</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">18</span><span style="color: #000000;">:</span><span style="color: #000000;">48</span><span style="color: #000000;">:</span><span style="color: #000000;">20</span><span style="color: #000000;">&nbsp;(CharsetFilter.java:</span><span style="color: #000000;">42</span><span style="color: #000000;">)&nbsp;INFO&nbsp;&nbsp;&nbsp;-&nbsp;header:&nbsp;&nbsp;&nbsp;user-agent&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&gt;&nbsp;Mozilla/</span><span style="color: #000000;">5.0</span><span style="color: #000000;">&nbsp;(Windows</span><span style="color: #008000;">;</span><span style="color: #008000;">&nbsp;U;&nbsp;Windows&nbsp;NT&nbsp;5.1;&nbsp;en-US)&nbsp;AppleWebKit/525.19&nbsp;(KHTML,&nbsp;like&nbsp;Gecko)&nbsp;Chrome/1.0.154.43&nbsp;Safari/525.19</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">03</span><span style="color: #000000;">&nbsp;Feb&nbsp;</span><span style="color: #000000;">2009</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">18</span><span style="color: #000000;">:</span><span style="color: #000000;">48</span><span style="color: #000000;">:</span><span style="color: #000000;">20</span><span style="color: #000000;">&nbsp;(CharsetFilter.java:</span><span style="color: #000000;">42</span><span style="color: #000000;">)&nbsp;INFO&nbsp;&nbsp;&nbsp;-&nbsp;header:&nbsp;&nbsp;&nbsp;referer&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&gt;&nbsp;http://</span><span style="color: #000000;">192.168.1.212</span><span style="color: #000000;">:</span><span style="color: #000000;">8180</span><span style="color: #000000;">/mw/customerHome.action<br />
</span><span style="color: #000000;">03</span><span style="color: #000000;">&nbsp;Feb&nbsp;</span><span style="color: #000000;">2009</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">18</span><span style="color: #000000;">:</span><span style="color: #000000;">48</span><span style="color: #000000;">:</span><span style="color: #000000;">20</span><span style="color: #000000;">&nbsp;(CharsetFilter.java:</span><span style="color: #000000;">42</span><span style="color: #000000;">)&nbsp;INFO&nbsp;&nbsp;&nbsp;-&nbsp;header:&nbsp;&nbsp;&nbsp;accept&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&gt;&nbsp;text/xml</span><span style="color: #000000;">,</span><span style="color: #000000;">application/xml</span><span style="color: #000000;">,</span><span style="color: #000000;">application/xhtml+xml</span><span style="color: #000000;">,</span><span style="color: #000000;">text/html</span><span style="color: #008000;">;</span><span style="color: #008000;">q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">03</span><span style="color: #000000;">&nbsp;Feb&nbsp;</span><span style="color: #000000;">2009</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">18</span><span style="color: #000000;">:</span><span style="color: #000000;">48</span><span style="color: #000000;">:</span><span style="color: #000000;">20</span><span style="color: #000000;">&nbsp;(CharsetFilter.java:</span><span style="color: #000000;">42</span><span style="color: #000000;">)&nbsp;INFO&nbsp;&nbsp;&nbsp;-&nbsp;header:&nbsp;&nbsp;&nbsp;accept-encoding&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&gt;&nbsp;gzip</span><span style="color: #000000;">,</span><span style="color: #000000;">deflate</span><span style="color: #000000;">,</span><span style="color: #000000;">bzip2</span><span style="color: #000000;">,</span><span style="color: #000000;">sdch<br />
</span><span style="color: #000000;">03</span><span style="color: #000000;">&nbsp;Feb&nbsp;</span><span style="color: #000000;">2009</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">18</span><span style="color: #000000;">:</span><span style="color: #000000;">48</span><span style="color: #000000;">:</span><span style="color: #000000;">20</span><span style="color: #000000;">&nbsp;(CharsetFilter.java:</span><span style="color: #000000;">42</span><span style="color: #000000;">)&nbsp;INFO&nbsp;&nbsp;&nbsp;-&nbsp;header:&nbsp;&nbsp;&nbsp;cookie&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&gt;&nbsp;JSESSIONID</span><span style="color: #000000;">=</span><span style="color: #000000;">A6293E5AAC56D62B9A0AA63E6C4B4935</span><span style="color: #008000;">;</span><span style="color: #008000;">&nbsp;user_request_locale=zh_CN</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">03</span><span style="color: #000000;">&nbsp;Feb&nbsp;</span><span style="color: #000000;">2009</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">18</span><span style="color: #000000;">:</span><span style="color: #000000;">48</span><span style="color: #000000;">:</span><span style="color: #000000;">20</span><span style="color: #000000;">&nbsp;(CharsetFilter.java:</span><span style="color: #000000;">42</span><span style="color: #000000;">)&nbsp;INFO&nbsp;&nbsp;&nbsp;-&nbsp;header:&nbsp;&nbsp;&nbsp;accept-language&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&gt;&nbsp;zh-CN</span><span style="color: #000000;">,</span><span style="color: #000000;">zh<br />
</span><span style="color: #000000;">03</span><span style="color: #000000;">&nbsp;Feb&nbsp;</span><span style="color: #000000;">2009</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">18</span><span style="color: #000000;">:</span><span style="color: #000000;">48</span><span style="color: #000000;">:</span><span style="color: #000000;">20</span><span style="color: #000000;">&nbsp;(CharsetFilter.java:</span><span style="color: #000000;">42</span><span style="color: #000000;">)&nbsp;INFO&nbsp;&nbsp;&nbsp;-&nbsp;header:&nbsp;&nbsp;&nbsp;accept-charset&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&gt;&nbsp;gb18030</span><span style="color: #000000;">,</span><span style="color: #000000;">*</span><span style="color: #000000;">,</span><span style="color: #000000;">utf-</span><span style="color: #000000;">8</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">03</span><span style="color: #000000;">&nbsp;Feb&nbsp;</span><span style="color: #000000;">2009</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">18</span><span style="color: #000000;">:</span><span style="color: #000000;">48</span><span style="color: #000000;">:</span><span style="color: #000000;">20</span><span style="color: #000000;">&nbsp;(CharsetFilter.java:</span><span style="color: #000000;">42</span><span style="color: #000000;">)&nbsp;INFO&nbsp;&nbsp;&nbsp;-&nbsp;header:&nbsp;&nbsp;&nbsp;if-none-match&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&gt;&nbsp;W/</span><span style="color: #000000;">"</span><span style="color: #000000;">1296-1233658401000</span><span style="color: #000000;">"</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">03</span><span style="color: #000000;">&nbsp;Feb&nbsp;</span><span style="color: #000000;">2009</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">18</span><span style="color: #000000;">:</span><span style="color: #000000;">48</span><span style="color: #000000;">:</span><span style="color: #000000;">20</span><span style="color: #000000;">&nbsp;(CharsetFilter.java:</span><span style="color: #000000;">42</span><span style="color: #000000;">)&nbsp;INFO&nbsp;&nbsp;&nbsp;-&nbsp;header:&nbsp;&nbsp;&nbsp;if-modified-since&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&gt;&nbsp;Tue</span><span style="color: #000000;">,</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">03</span><span style="color: #000000;">&nbsp;Feb&nbsp;</span><span style="color: #000000;">2009</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">10</span><span style="color: #000000;">:</span><span style="color: #000000;">53</span><span style="color: #000000;">:</span><span style="color: #000000;">21</span><span style="color: #000000;">&nbsp;GMT<br />
</span><span style="color: #000000;">03</span><span style="color: #000000;">&nbsp;Feb&nbsp;</span><span style="color: #000000;">2009</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">18</span><span style="color: #000000;">:</span><span style="color: #000000;">48</span><span style="color: #000000;">:</span><span style="color: #000000;">20</span><span style="color: #000000;">&nbsp;(CharsetFilter.java:</span><span style="color: #000000;">42</span><span style="color: #000000;">)&nbsp;INFO&nbsp;&nbsp;&nbsp;-&nbsp;header:&nbsp;&nbsp;&nbsp;host&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&gt;&nbsp;</span><span style="color: #000000;">192.168.1.212</span><span style="color: #000000;">:</span><span style="color: #000000;">8180</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">03</span><span style="color: #000000;">&nbsp;Feb&nbsp;</span><span style="color: #000000;">2009</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">18</span><span style="color: #000000;">:</span><span style="color: #000000;">48</span><span style="color: #000000;">:</span><span style="color: #000000;">20</span><span style="color: #000000;">&nbsp;(CharsetFilter.java:</span><span style="color: #000000;">42</span><span style="color: #000000;">)&nbsp;INFO&nbsp;&nbsp;&nbsp;-&nbsp;header:&nbsp;&nbsp;&nbsp;connection&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&gt;&nbsp;Keep-Alive<br />
</span><span style="color: #000000;">03</span><span style="color: #000000;">&nbsp;Feb&nbsp;</span><span style="color: #000000;">2009</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">18</span><span style="color: #000000;">:</span><span style="color: #000000;">48</span><span style="color: #000000;">:</span><span style="color: #000000;">20</span><span style="color: #000000;">&nbsp;(CharsetFilter.java:</span><span style="color: #000000;">44</span><span style="color: #000000;">)&nbsp;INFO&nbsp;&nbsp;&nbsp;-&nbsp;response.getCharacterEncoding()&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&gt;&nbsp;ISO-</span><span style="color: #000000;">8859</span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;"><br />
</span><span style="color: #000000;">03</span><span style="color: #000000;">&nbsp;Feb&nbsp;</span><span style="color: #000000;">2009</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">18</span><span style="color: #000000;">:</span><span style="color: #000000;">48</span><span style="color: #000000;">:</span><span style="color: #000000;">20</span><span style="color: #000000;">&nbsp;(CharsetFilter.java:</span><span style="color: #000000;">45</span><span style="color: #000000;">)&nbsp;INFO&nbsp;&nbsp;&nbsp;-&nbsp;response.getLocale().getLanguage()&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&gt;&nbsp;en<br />
</span><span style="color: #000000;">03</span><span style="color: #000000;">&nbsp;Feb&nbsp;</span><span style="color: #000000;">2009</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">18</span><span style="color: #000000;">:</span><span style="color: #000000;">48</span><span style="color: #000000;">:</span><span style="color: #000000;">20</span><span style="color: #000000;">&nbsp;(CharsetFilter.java:</span><span style="color: #000000;">46</span><span style="color: #000000;">)&nbsp;INFO&nbsp;&nbsp;&nbsp;-&nbsp;response.getContentType()&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&gt;&nbsp;null<br />
</span><span style="color: #000000;">03</span><span style="color: #000000;">&nbsp;Feb&nbsp;</span><span style="color: #000000;">2009</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">18</span><span style="color: #000000;">:</span><span style="color: #000000;">48</span><span style="color: #000000;">:</span><span style="color: #000000;">20</span><span style="color: #000000;">&nbsp;(StandardWrapperValve.java:</span><span style="color: #000000;">225</span><span style="color: #000000;">)&nbsp;WARN&nbsp;&nbsp;&nbsp;-&nbsp;Servlet.service()&nbsp;for&nbsp;servlet&nbsp;default&nbsp;threw&nbsp;exception<br />
java.io.IOException:&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;cn.vbl.mw.web.filter.CharsetFilter.doFilter(CharsetFilter.java:</span><span style="color: #000000;">47</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:</span><span style="color: #000000;">202</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:</span><span style="color: #000000;">173</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:</span><span style="color: #000000;">213</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:</span><span style="color: #000000;">178</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:</span><span style="color: #000000;">126</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:</span><span style="color: #000000;">105</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:</span><span style="color: #000000;">107</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:</span><span style="color: #000000;">148</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:</span><span style="color: #000000;">869</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:</span><span style="color: #000000;">664</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:</span><span style="color: #000000;">527</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:</span><span style="color: #000000;">80</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:</span><span style="color: #000000;">684</span><span style="color: #000000;">)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;at&nbsp;java.lang.Thread.run(Thread.java:</span><span style="color: #000000;">595</span><span style="color: #000000;">)</span></div>
<br />
不得其解<br />
<span style="color: red;"><br />
<hr size="2" width="100%" />
后记：<br />
1. 两个地址<br />
Bug 28331 &#8211; Unpredictable switch from UTF-8 to other encoding in Response　　 https://issues.apache.org/bugzilla/show_bug.cgi?id=28331 <br />
Bug 28347 &#8211; Response committed before invocation of service method　　　　　　https://issues.apache.org/bugzilla/show_bug.cgi?id=28347<br />
<br />
28347内写明了原因。<br />
<br />
2. 解决方法<br />
把 tomcat 的 security 加上就OK了。</span>
<img src ="http://www.blogjava.net/liltos/aggbug/253218.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/liltos/" target="_blank">洁白滴黑子</a> 2009-02-04 12:00 <a href="http://www.blogjava.net/liltos/articles/253218.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>