<?xml version="1.0" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="css/rss.xslt"?>
<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>王波的博客 - Java相关</title><link>http://www.1314lucky.cn/</link><description>幸运的笨小孩 - </description><generator>RainbowSoft Studio Z-Blog 1.8 Arwen Build 90619</generator><language>zh-CN</language><copyright>Copyright xxxx-xxxx Your WebSite. Some Rights Reserved.</copyright><pubDate>Sun, 05 Sep 2010 05:22:09 +0800</pubDate><item><title>今天纠结了半天才解决的中文乱码问题</title><author>wb8180013@163.com (lucky)</author><link>http://www.1314lucky.cn/post/27.html</link><pubDate>Sat, 10 Oct 2009 19:45:46 +0800</pubDate><guid>http://www.1314lucky.cn/post/27.html</guid><description><![CDATA[<p>&nbsp;&nbsp;&nbsp; 中午刚吃完饭，对面同事叫我过去帮他看个中文乱码问题，问题是页面在进行下拉框选择操作时，根据Ajax调用后台方法，后台从数据库里查出数据封装成XML的字符串返回给页面，这时候页面展示的是乱码，而在eclipse控制台上打出来的是中文。</p><p>&nbsp;&nbsp;&nbsp; 源码大概如下：</p><p>&nbsp;&nbsp;&nbsp; PrintWriter out&nbsp;=&nbsp; response.getWriter();</p><p>&nbsp;&nbsp; StringBuffer buff = new StringBuffer();</p><p>&nbsp; // 从数据库立查出名字</p><p>&nbsp; String name = &quot;江苏&quot;; // 这里就不细写了</p><p>&nbsp;&nbsp; buff.append(&quot;&lt;&quot;).append(name)append(&quot;&gt;&quot;);//大概拼写 知道是这个意思</p><p>&nbsp;&nbsp; //&nbsp;这里是防止乱码&nbsp;由于页面采用的是UTF-8 所以这里如下，下面这行是必须的</p><p>&nbsp;&nbsp;&nbsp;&nbsp;response.setContentType(&quot;text/html;charset=UTF-8&quot;);&nbsp;</p><p>&nbsp;&nbsp; out.write(buff.toString());</p><p>这样按理应该就不会是乱码了，但是实际上还是乱码！我还特地用抓包工具，抓包看了下，确实是乱码，乱码显示为英文的&quot;?&quot;。</p><p>后来折腾了很久，还重新写了个Servlet例子，发现是好的，可以的。那问题肯定还是处在这段代码上。</p><p>后来，是这样改的</p><p><span style="color: #ff0000">&nbsp;&nbsp; PrintWriter out&nbsp;=&nbsp; <strong>null;</strong></span></p><p>&nbsp;&nbsp; StringBuffer buff = new StringBuffer();</p><p>&nbsp; // 从数据库立查出名字</p><p>&nbsp; String name = &quot;江苏&quot;; // 这里就不细写了</p><p>&nbsp;&nbsp; buff.append(&quot;&lt;&quot;).append(name)append(&quot;&gt;&quot;);//大概拼写 知道是这个意思</p><p>&nbsp;&nbsp; //&nbsp;这里是防止乱码&nbsp;由于页面采用的是UTF-8 所以这里如下，下面这行是必须的</p><p>&nbsp;&nbsp;&nbsp;&nbsp;response.setContentType(&quot;text/html;charset=UTF-8&quot;);&nbsp;</p><p>&nbsp;&nbsp; <span style="color: #ff0000"><em><strong>out&nbsp; = response.getWriter();</strong></em></span></p><p>&nbsp;&nbsp; out.write(buff.toString());</p><p>原来黑斜体代码应该写在 设置ContentType之后才生效。</p><p>唉！中间绕了很大一个圈子，还为respnse对象设置header啊等等。这次算是积累了经验！&nbsp;以前涉及到乱码问题都是XML解析时会出现，那种情况只要两边编码统一就可以了，XML文件头中一般会有编码方式。如&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;</p><p>&nbsp;</p>]]></description><category>Java相关</category><comments>http://www.1314lucky.cn/post/27.html#comment</comments><wfw:comment>http://www.1314lucky.cn/</wfw:comment><wfw:commentRss>http://www.1314lucky.cn/feed.asp?cmt=27</wfw:commentRss><trackback:ping>http://www.1314lucky.cn/cmd.asp?act=tb&amp;id=27&amp;key=92975534</trackback:ping></item><item><title>工厂模式</title><author>wb8180013@163.com (lucky)</author><link>http://www.1314lucky.cn/post/16.html</link><pubDate>Sat, 15 Aug 2009 10:35:56 +0800</pubDate><guid>http://www.1314lucky.cn/post/16.html</guid><description><![CDATA[<p>&nbsp;&nbsp;&nbsp; 模式大概分为：创建模式，结构模式和行为模式。今天要学习的是最基本的工厂模式。</p><p>&nbsp;&nbsp;&nbsp; 创建模式是对类的实例化过程的抽象化。一些系统在创建对象时，需要动态地决定怎样创建对象，创建哪些对象，以及如何组合和表示这些对象。创建模式描述了怎样构造和封装这些动态的决定。</p><p>&nbsp;&nbsp;&nbsp; 简单工厂模式是类的创建模式，又叫做静态工厂方法模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。</p><p>&nbsp; 如下代码所示(参考《Java与模式》)<br /><br />/**<br />&nbsp;* 水果的抽象接口<br />&nbsp;* @author wb<br />&nbsp;*<br />&nbsp;*/<br />public interface Fruit {<br /><br />&nbsp;&nbsp;&nbsp; /**<br />&nbsp;&nbsp;&nbsp; &nbsp;* 生长<br />&nbsp;&nbsp;&nbsp; &nbsp;*/<br />&nbsp;&nbsp;&nbsp; void grow();<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; /**<br />&nbsp;&nbsp;&nbsp; &nbsp;* 收获<br />&nbsp;&nbsp;&nbsp; &nbsp;*/<br />&nbsp;&nbsp;&nbsp; void harvest();<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; /**<br />&nbsp;&nbsp;&nbsp; &nbsp;* 种植<br />&nbsp;&nbsp;&nbsp; &nbsp;*/<br />&nbsp;&nbsp;&nbsp; void plant();<br />}<br /><br />/**<br />&nbsp;* 苹果<br />&nbsp;* @author wb<br />&nbsp;*<br />&nbsp;*/<br />public class Apple implements Fruit <br />{<br />&nbsp;&nbsp;&nbsp; private int treeAge;<br /><br />&nbsp;&nbsp;&nbsp; public void grow() <br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(&quot;Apple is growing...&quot;);<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public void harvest() <br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(&quot;Apple has been harvested.&quot;);<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public void plant() <br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; System.out.println(&quot;Apple has been planted.&quot;);<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public int getTreeAge()<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return treeAge;<br />&nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; public void setTreeAge(int treeAge)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; this.treeAge = treeAge;<br />&nbsp;&nbsp;&nbsp; }<br />}<br /><br />/**<br />&nbsp;* 葡萄<br />&nbsp;* @author wb<br />&nbsp;*<br />&nbsp;*/<br />public class Grape implements Fruit<br />{<br /><br />&nbsp;&nbsp;&nbsp; public void grow() <br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(&quot;Grape is growing...&quot;);&nbsp;&nbsp;&nbsp; <br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public void harvest() <br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(&quot;Grape has been harveseted...&quot;);<br />&nbsp;&nbsp;&nbsp; }<br /><br />&nbsp;&nbsp;&nbsp; public void plant() <br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; System.out.println(&quot;Grape is has been planted...&quot;);<br />&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp; <br /><br />}<br /><br />/**<br />&nbsp;* 创建水果的工厂类<br />&nbsp;* @author wb<br />&nbsp;*<br />&nbsp;*/<br />public class FruitGardener<br />{<br />&nbsp;&nbsp;&nbsp; /**<br />&nbsp;&nbsp;&nbsp; &nbsp;* 根据水果名字来创建水果实例<br />&nbsp;&nbsp;&nbsp; &nbsp;* @param name<br />&nbsp;&nbsp;&nbsp; &nbsp;* @return<br />&nbsp;&nbsp;&nbsp; &nbsp;*/<br />&nbsp;&nbsp;&nbsp; public static Fruit createFruit(String name)<br />&nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; if(name.equalsIgnoreCase(&quot;apple&quot;))<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return new Apple();<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else if(name.equalsIgnoreCase(&quot;grape&quot;))<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; return new Grape();<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; else<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; {<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; throw new RuntimeException(&quot;Error fruit name&quot;);<br />&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; }<br />&nbsp;&nbsp;&nbsp; }<br />}<br />&nbsp;</p><p>&nbsp;&nbsp;&nbsp; 工厂类（FruitGardener）角色：是工厂方法模式的核心，含有与应用紧密相关的商业逻辑。工厂类在客户端的直接调用下创建产品对象，它往往由一个具体Java类实现。</p><p>&nbsp;&nbsp;&nbsp; 抽象产品（Fruit）角色：担任这个角色的类或接口是由工厂方法模式所创建的对象的父类，或他们共同拥有的接口。抽象产品角色可以是抽象类或者接口。</p><p>&nbsp;&nbsp;&nbsp; 具体产品角色（Apple,Grape）：工厂方法模式所创建的任何对象都是这个角色的实例，具体产品角色是由一个具体Java类实现。</p><p>&nbsp;</p><p>&nbsp;</p><p><br />&nbsp;</p>]]></description><category>Java相关</category><comments>http://www.1314lucky.cn/post/16.html#comment</comments><wfw:comment>http://www.1314lucky.cn/</wfw:comment><wfw:commentRss>http://www.1314lucky.cn/feed.asp?cmt=16</wfw:commentRss><trackback:ping>http://www.1314lucky.cn/cmd.asp?act=tb&amp;id=16&amp;key=a992b8df</trackback:ping></item></channel></rss>
