﻿<?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-资料整理-文章分类-数据持久化</title><link>http://www.blogjava.net/savage100/category/12620.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 12:04:55 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 12:04:55 GMT</pubDate><ttl>60</ttl><item><title>ThreadLocal模式下管理的Session会在事务提交后自动关闭！</title><link>http://www.blogjava.net/savage100/articles/88430.html</link><dc:creator>谢玮</dc:creator><author>谢玮</author><pubDate>Mon, 18 Dec 2006 01:13:00 GMT</pubDate><guid>http://www.blogjava.net/savage100/articles/88430.html</guid><wfw:comment>http://www.blogjava.net/savage100/comments/88430.html</wfw:comment><comments>http://www.blogjava.net/savage100/articles/88430.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/savage100/comments/commentRss/88430.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/savage100/services/trackbacks/88430.html</trackback:ping><description><![CDATA[
		<table width="100%">
				<tbody>
						<tr valign="top">
								<td width="50%">
										<div class="date_show">  <br /></div>
								</td>
								<td align="right" width="50%">
										<a href="http://zgdhj95.javaeye.com/?list=1">缩略显示</a>     </td>
						</tr>
				</tbody>
		</table>
		<div style="MARGIN-TOP: 5px; MARGIN-LEFT: 15px">
				<h2>
						<a title="永久链接：ThreadLocal模式下管理的Session会在事务提交后自动关闭！" href="http://zgdhj95.javaeye.com/blog/36353">ThreadLocal模式下管理的Session会在事务提交后自动关闭！</a>
				</h2>
		</div>
		<div style="MARGIN-TOP: 5px; MARGIN-LEFT: 15px">
				<b>关键字:</b>   Hibernate     </div>
		<div style="MARGIN-TOP: 5px; MARGIN-LEFT: 15px; OVERFLOW: auto; WIDTH: 710px; WORD-BREAK: break-all; LINE-HEIGHT: 17pt">
				<table width="100%">
						<tbody>
								<tr>
										<td>
												<p>最近对Hibernate的ThreadLocal Session模式有点兴趣。于是根据曹晓钢翻译的Hibernate Reference做了个小测验，结果发现了一个小bug。 <br />代码很简单，都是利用Hibernate Reference中现成的代码。 <br />首先是一个辅助的得到线程安全的session的HibernateUtil类，</p>
												<p>public class HibernateUtil { <br />public static final SessionFactory sessionFactory; <br />static{ <br />try { <br />sessionFactory = new Configuration().configure().buildSessionFactory(); <br />} <br />catch(Throwable ex){ <br />throw new ExceptionInInitializerError(ex); <br />} <br />}</p>
												<p>public static final ThreadLocal session = new ThreadLocal(); <br />public static Session currentSession() <br />{ <br />Session s = (Session) session.get(); <br />if (s==null ) <br />{ <br />s = sessionFactory.getCurrentSession(); <br />session.set(s); <br />} <br />return s; <br />} <br />public static void closeSession() <br />{ <br />Session s = (Session) session.get(); <br />if (s!=null) <br />s.close(); <br />session.set(null); <br />} <br />public static SessionFactory getSessionFactory() <br />{ <br />return sessionFactory; <br />} <br />} <br />然后是一个测试插入数据的代码。也很简单，也是仿Hibernate Reference上面的代码。 <br />public class InsertUser { <br />public static void main(String[] args) { <br />Session session = HibernateUtil.currentSession(); <br />Transaction tx= session.beginTransaction(); <br />TUser user = new TUser(); <br />user.setName("Emma"); <br />session.save(user); <br />tx.commit(); <br />HibernateUtil.closeSession(); <br />} <br />}</p>
												<p>就这么简单一个程序，运行到最后，出现一个错误。</p>
												<p>org.hibernate.SessionException: Session was already closed <br />at org.hibernate.impl.SessionImpl.close(SessionImpl.java:270) <br />at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) <br />at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) <br />at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) <br />at java.lang.reflect.Method.invoke(Unknown Source) <br />at org.hibernate.context.ThreadLocalSessionContext$TransactionProtectionWrapper.invoke(ThreadLocalSessionContext.java:301) <br />at $Proxy0.close(Unknown Source) <br />at Util.HibernateUtil.closeSession(HibernateUtil.java:36) <br />at test.InsertUser.main(InsertUser.java:20) <br />Exception in thread "main" </p>
												<p>错误出现在 HibernateUtil.closeSession(); 这一行，意思是session已经关闭了，再次关闭它就引起异常了。</p>
												<p>不过前面的代码中只有个tx.commit(); 提交事务 而已，并没有自动关闭session啊？</p>
												<p>于是把DEBUG信息调用出来，发现了以下几句提示： <br />DEBUG [main] - after transaction completion <br />DEBUG [main] - automatically closing session <br />DEBUG [main] - closing session <br />DEBUG [main] - connection already null in cleanup : no action <br />DEBUG [main] - allowing proxied method [close] to proceed to real session <br />DEBUG [main] - closing session <br />org.hibernate.SessionException: Session was already closed</p>
												<p>
														<br />特别是下面这3句话引起了我的注意，果然是session关闭了，而且是在 事务结束以后自动关闭的。 <br />DEBUG [main] - after transaction completion <br />DEBUG [main] - automatically closing session <br />DEBUG [main] - closing session</p>
												<p>那么这个机制是怎么发生的呢？</p>
												<p>打开了Hibernate3的源码，我找到了答案。 <br />首先，根据sessionFactory = new Configuration().configure().buildSessionFactory(); <br />打开Configuration类的buildSessionFactory()方法，找到sessionFactory的生成语句 <br />return new SessionFactoryImpl( <br />this, <br />mapping, <br />settings, <br />getInitializedEventListeners() <br />); <br />，然后找到SessionFactoryImpl的getCurrentSession方法，发现是这么定义的。</p>
												<p>public org.hibernate.classic.Session getCurrentSession() throws HibernateException { <br />if ( currentSessionContext == null ) { <br />throw new HibernateException( "No CurrentSessionContext configured!" ); <br />} <br />return currentSessionContext.currentSession(); <br />}</p>
												<p>他调用的是一个currentSessionContext的currentSession方法。查找currentSessionContext变量，</p>
												<p>currentSessionContext = buildCurrentSessionContext();</p>
												<p>，知道了buildCurrentSessionContext方法产生了这个currentSessionContext 对象。</p>
												<p>private CurrentSessionContext buildCurrentSessionContext() { <br />String impl = properties.getProperty( Environment.CURRENT_SESSION_CONTEXT_CLASS ); <br />// for backward-compatability <br />if ( impl == null &amp;&amp; transactionManager != null ) { <br />impl = "jta"; <br />}</p>
												<p>if ( impl == null ) { <br />return null; <br />} <br />else if ( "jta".equals( impl ) ) { <br />return new JTASessionContext( this ); <br />} <br />else if ( "thread".equals( impl ) ) { <br />return new ThreadLocalSessionContext( this ); <br />} <br />else { <br />try { <br />Class implClass = ReflectHelper.classForName( impl ); <br />return ( CurrentSessionContext ) implClass <br />.getConstructor( new Class[] { SessionFactoryImplementor.class } ) <br />.newInstance( new Object[] { this } ); <br />} <br />catch( Throwable t ) { <br />log.error( "Unable to construct current session context [" + impl + "]", t ); <br />return null; <br />} <br />} <br />}</p>
												<p>这个方法就是用来判断使用JTA管理这个SessionContext还是用ThreadLocal来管理SessionContext的。 <br />在我们这里是用 ThreadLocal 来管理的，于是找到了currentSessionContext 的实现类是 ThreadLocalSessionContext。</p>
												<p>找到该类的currentSession方法 </p>
												<p>public final Session currentSession() throws HibernateException { <br />Session current = existingSession( factory ); <br />if (current == null) { <br />current = buildOrObtainSession(); <br />// register a cleanup synch <br />current.getTransaction().registerSynchronization( buildCleanupSynch() ); <br />// wrap the session in the transaction-protection proxy <br />if ( needsWrapping( current ) ) { <br />current = wrap( current ); <br />} <br />// then bind it <br />doBind( current, factory ); <br />} <br />return current; <br />}</p>
												<p>然后跟踪到 buildOrObtainSession(),就是这里，打开了session。</p>
												<p>protected Session buildOrObtainSession() { <br />return factory.openSession( <br />null, <br />isAutoFlushEnabled(), <br />isAutoCloseEnabled(), <br />getConnectionReleaseMode() <br />); <br />} <br />注意第三个参数：isAutoCloseEnabled <br />打开Session这个接口，看到 openSession方法中这个参数是如下描述的： <br />* @param autoCloseSessionEnabled Should the session be auto-closed after <br />* transaction completion? </p>
												<p>，就是说session是否应该在事务提交后自动关闭。</p>
												<p>然后打开 ThreadLocalSessionContext 的isAutoCloseEnabled()方法。</p>
												<p>/** <br />* Mainly for subclass usage. This impl always returns true. <br />* <br />* @return Whether or not the the session should be closed by transaction completion. <br />*/ <br />protected boolean isAutoCloseEnabled() { <br />return true; <br />} <br />看到如下提示：Whether or not the the session should be closed by transaction completion ，即无论如何session应该在事务完成后关闭。</p>
												<p>答案就在这里，就是说在ThreadLocal Session模式下面，只要提交了事务，那么session就自动关闭了，因此我参照Hibernate Refernece上面的代码写的在事务关闭以后再调用HibernateUtil.closeSession();是不对的，这句代码是完全多余的。</p>
										</td>
								</tr>
						</tbody>
				</table>
		</div>
<img src ="http://www.blogjava.net/savage100/aggbug/88430.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/savage100/" target="_blank">谢玮</a> 2006-12-18 09:13 <a href="http://www.blogjava.net/savage100/articles/88430.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>什么是数据库左连接</title><link>http://www.blogjava.net/savage100/articles/58604.html</link><dc:creator>谢玮</dc:creator><author>谢玮</author><pubDate>Mon, 17 Jul 2006 09:00:00 GMT</pubDate><guid>http://www.blogjava.net/savage100/articles/58604.html</guid><wfw:comment>http://www.blogjava.net/savage100/comments/58604.html</wfw:comment><comments>http://www.blogjava.net/savage100/articles/58604.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/savage100/comments/commentRss/58604.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/savage100/services/trackbacks/58604.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; mso-para-margin-left: 1.0gd">
				<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">什么是左连接，右连接和完全连接？？如下：</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; mso-para-margin-left: 1.0gd">
				<span lang="EN-US" style="COLOR: black; FONT-FAMILY: Arial; mso-bidi-font-size: 7.5pt">select * from testdata!customer; <br />    left outer join testdata!orders; <br />    on customer.cust_id=orders.cust_id <br />    </span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 7.5pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">如果是左连接该命令将返回</span>
				<span lang="EN-US" style="COLOR: black; FONT-FAMILY: Arial; mso-bidi-font-size: 7.5pt">join</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 7.5pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">左侧表</span>
				<span lang="EN-US" style="COLOR: black; FONT-FAMILY: Arial; mso-bidi-font-size: 7.5pt">(customer)</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 7.5pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">中的所有记录以及右侧表中匹配的记录；右连接则反之，返回</span>
				<span lang="EN-US" style="COLOR: black; FONT-FAMILY: Arial; mso-bidi-font-size: 7.5pt">orders</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 7.5pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">中所有记录和</span>
				<span lang="EN-US" style="COLOR: black; FONT-FAMILY: Arial; mso-bidi-font-size: 7.5pt">customer</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; mso-bidi-font-size: 7.5pt; mso-ascii-font-family: Arial; mso-hansi-font-family: Arial; mso-bidi-font-family: Arial">的匹配记录；完全连接返回两个表中的所有记录。</span>
				<span lang="EN-US" style="COLOR: black; FONT-FAMILY: Arial; mso-bidi-font-size: 7.5pt">
						<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
						<o:p>
						</o:p>
				</span>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; mso-para-margin-left: 1.0gd">
				<span lang="EN-US" style="COLOR: black; FONT-FAMILY: Arial; mso-bidi-font-size: 7.5pt">
						<span style="mso-spacerun: yes">  </span>
				</span>
				<span style="COLOR: #3a6882; FONT-FAMILY: 宋体; mso-bidi-font-size: 7.5pt; mso-ascii-font-family: 'Lucida Sans Unicode'; mso-hansi-font-family: 'Lucida Sans Unicode'; mso-bidi-font-family: 'Lucida Sans Unicode'; mso-ansi-language: EN">右连接说明等号右侧的所有记录均会被显示，无论其在左侧是否得到匹配，</span>
				<span lang="EN-US" style="COLOR: black; FONT-FAMILY: Arial; mso-bidi-font-size: 7.5pt">
						<o:p>
						</o:p>
				</span>
		</p>
<img src ="http://www.blogjava.net/savage100/aggbug/58604.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/savage100/" target="_blank">谢玮</a> 2006-07-17 17:00 <a href="http://www.blogjava.net/savage100/articles/58604.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Hibernate 常见异常</title><link>http://www.blogjava.net/savage100/articles/58602.html</link><dc:creator>谢玮</dc:creator><author>谢玮</author><pubDate>Mon, 17 Jul 2006 08:59:00 GMT</pubDate><guid>http://www.blogjava.net/savage100/articles/58602.html</guid><wfw:comment>http://www.blogjava.net/savage100/comments/58602.html</wfw:comment><comments>http://www.blogjava.net/savage100/articles/58602.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/savage100/comments/commentRss/58602.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/savage100/services/trackbacks/58602.html</trackback:ping><description><![CDATA[
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 10.5pt; mso-para-margin-left: 1.0gd">
				<span lang="EN-US" style="COLOR: black; LETTER-SPACING: 0.3pt">Hibernate</span>
				<span style="COLOR: black; FONT-FAMILY: 宋体; LETTER-SPACING: 0.3pt; mso-ascii-font-family: 'Times New Roman'; mso-hansi-font-family: 'Times New Roman'">常见错误</span>
				<span lang="EN-US" style="COLOR: black; LETTER-SPACING: 0.3pt">
						<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /?>
						<o:p>
						</o:p>
				</span>
		</p>
		<p style="TEXT-INDENT: 24pt; LINE-HEIGHT: 12.5pt">
				<span style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 9.0pt">
						<font face="宋体">常见错误：<span lang="EN-US"><o:p></o:p></span></font>
				</span>
		</p>
		<p style="TEXT-INDENT: 24pt; LINE-HEIGHT: 12.5pt">
				<font face="宋体">
						<span lang="EN-US" style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 9.0pt">1</span>
						<span style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 9.0pt">．<span lang="EN-US">Caused by: org.dom4j.DocumentException: Invalid byte 2 of 2-byte UTF-8 sequence. Nested exception: Invalid byte 2 of 2-byte UTF-8 sequence. <o:p></o:p></span></span>
				</font>
		</p>
		<p style="TEXT-INDENT: 24pt; LINE-HEIGHT: 12.5pt">
				<span style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 9.0pt">
						<font face="宋体">如果出现这行错误说明你的<span lang="EN-US"><a href="http://dev.21tx.com/web/xml/" target="_blank">XML</a></span>配置文件有不规范的字符，检查下。 <span lang="EN-US"><o:p></o:p></span></font>
				</span>
		</p>
		<p style="TEXT-INDENT: 24pt; LINE-HEIGHT: 12.5pt">
				<font face="宋体">
						<span lang="EN-US" style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 9.0pt">2</span>
						<span style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 9.0pt">．<span lang="EN-US">net.sf.hibernate.MappingException: Error reading resource: hibernate/Hello_Bean.hbm.xml <o:p></o:p></span></span>
				</font>
		</p>
		<p style="TEXT-INDENT: 24pt; LINE-HEIGHT: 12.5pt">
				<span style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 9.0pt">
						<font face="宋体">如果出现这行错误说明你的<span lang="EN-US">hibernate</span>的<span lang="EN-US">XML</span>配置文件有错 <span lang="EN-US"><o:p></o:p></span></font>
				</span>
		</p>
		<p style="TEXT-INDENT: 24pt; LINE-HEIGHT: 12.5pt">
				<font face="宋体">
						<span lang="EN-US" style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 9.0pt">3</span>
						<span style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 9.0pt">．<span lang="EN-US">net.sf.hibernate.MappingException: Resource: hibernate/Hello_Bean.hbm.xml not found <o:p></o:p></span></span>
				</font>
		</p>
		<p style="TEXT-INDENT: 24pt; LINE-HEIGHT: 12.5pt">
				<span style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 9.0pt">
						<font face="宋体">如果出现这行错误说明<span lang="EN-US">hibernate</span>的<span lang="EN-US">XML</span>配置文件没有找到，你应该把<span lang="EN-US">XML</span>文件放在与你的类文件同个目录下<span lang="EN-US">,</span>本文中是放在<span lang="EN-US">hibernate\classes\hibernate\</span>目录下，也就是跟<span lang="EN-US">Hello_Bean.class</span>类文件一起。 <span lang="EN-US"><o:p></o:p></span></font>
				</span>
		</p>
		<p style="TEXT-INDENT: 24pt; LINE-HEIGHT: 12.5pt">
				<font face="宋体">
						<span lang="EN-US" style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 9.0pt">4</span>
						<span style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 9.0pt">．<span lang="EN-US">net.sf.hibernate.PropertyNotFoundException: Could not find a setter for property name in class hibernate.Hello_Bean <o:p></o:p></span></span>
				</font>
		</p>
		<p style="TEXT-INDENT: 24pt; LINE-HEIGHT: 12.5pt">
				<span style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 9.0pt">
						<font face="宋体">如果出现这行错误说明你的<span lang="EN-US">xml</span>文件里设置的字段名<span lang="EN-US">name</span>的值与<span lang="EN-US">Hello_Bean.<a href="http://dev.21tx.com/java/" target="_blank">Java</a></span>类里的<span lang="EN-US">getXXX</span>或<span lang="EN-US">setXXX</span>方法不一致。<span lang="EN-US"><o:p></o:p></span></font>
				</span>
		</p>
		<p style="LINE-HEIGHT: 12.5pt">
				<font face="宋体">
						<span lang="EN-US" style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 9.0pt">5</span>
						<span style="FONT-SIZE: 10.5pt; mso-bidi-font-size: 9.0pt">．<span lang="EN-US">net.sf.hibernate.HibernateException: <a href="http://dev.21tx.com/java/adv/jdbc/" target="_blank">JDBC</a> Driver class not found: org.gjt.mm.mysql.Driver <br /><o:p></o:p></span></span>
				</font>
		</p>
		<p class="MsoNormal" style="MARGIN: 0cm 0cm 0pt 17.95pt; TEXT-INDENT: 42pt; mso-para-margin-left: 1.71gd; mso-char-indent-count: 4.0">
				<span lang="EN-US" style="FONT-SIZE: 10pt; BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt; mso-highlight: white">
						<br />6.The database returned no natively generated identity value</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">。</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<span style="mso-spacerun: yes">     </span>
				</span>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体; mso-ascii-font-family: 'Courier New'; mso-hansi-font-family: 'Courier New'; mso-font-kerning: 0pt; mso-bidi-font-family: 'Courier New'">主键没有添加增量</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-font-kerning: 0pt">
						<o:p>
						</o:p>
				</span>
		</p>
<img src ="http://www.blogjava.net/savage100/aggbug/58602.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/savage100/" target="_blank">谢玮</a> 2006-07-17 16:59 <a href="http://www.blogjava.net/savage100/articles/58602.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Tomcat中文问题的处理方法</title><link>http://www.blogjava.net/savage100/articles/58096.html</link><dc:creator>谢玮</dc:creator><author>谢玮</author><pubDate>Fri, 14 Jul 2006 01:09:00 GMT</pubDate><guid>http://www.blogjava.net/savage100/articles/58096.html</guid><wfw:comment>http://www.blogjava.net/savage100/comments/58096.html</wfw:comment><comments>http://www.blogjava.net/savage100/articles/58096.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/savage100/comments/commentRss/58096.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/savage100/services/trackbacks/58096.html</trackback:ping><description><![CDATA[
		<font face="宋体">
				<p>第一部分:  jsp  ---&gt; java/servlet<br /><br />对于流行的<span lang="EN-US">Tomcat</span>来说，有以下三种解决方法：</p>
				<p>　　<span lang="EN-US">1) </span>更改<span lang="EN-US"> D:\Tomcat\conf\server.xml</span>，指定浏览器的编码格式为<span lang="EN-US">“</span>简体中文<span lang="EN-US">”</span>：</p>
				<p>　　方法是找到<span lang="EN-US"> server.xml </span>中的</p>
				<p>
						<span lang="EN-US">    &lt;Connector port="8080" maxThreads="150" minSpareThreads="25" maxSpareThreads="75"<br />    enableLookups="false" redirectPort="8443" acceptCount="100"<br />    connectionTimeout="20000" disableUploadTimeout="true" <strong><span style="FONT-FAMILY: 宋体">URIEncoding='GBK'</span></strong> /&gt;</span>
				</p>
				<p>　　标记，粗体字是我添加的。</p>
				<p>　　可以这样验证你的更改是否成功：在更改前，在你出现乱码的页面的<span lang="EN-US">IE</span>浏览器，点击菜单<span lang="EN-US">“</span>查看｜编码<span lang="EN-US">”</span>，会发现<span lang="EN-US">“</span>西欧<span lang="EN-US">(ISO)”</span>处于选中状态。而更改后，点击菜单<span lang="EN-US">“</span>查看｜编码<span lang="EN-US">”</span>，会发现<span lang="EN-US">“</span>简体中文<span lang="EN-US">(GB2312)”</span>处于选中状态。注意你的Tomcat的common下要有"endorsed"和"i18n"文件夹，其中包含编码所需的lib<br /></p>
				<p>   <br />　　<span lang="EN-US">2)</span>更该<span lang="EN-US"> Java </span>程序，<br /><span lang="EN-US"> public class ThreeParams extends HttpServlet {<br />  public void doGet(HttpServletRequest request, HttpServletResponse response)<br />   throws ServletException, IOException {<br />      <strong><span style="FONT-FAMILY: 宋体">response.setContentType("text/html; charset=GBK");</span></strong><b><br /></b>      ...<br />  }  <br />}</span></p>
				<p>　　粗体字是必需要有的，它的作用是让浏览器把<span lang="EN-US">Unicode</span>字符转换为<span lang="EN-US">GBK</span>字符。这样页面的内容和浏览器的显示模式都设成了<span lang="EN-US">GBK</span>，就不会乱码了。</p>
				<p>   <br /><br /><br /><br /><br />第二部分    java/servlet   ----&gt;   mysql<br />mysql和Hibernate中的中文问题解决方法<br />另一种解决方法(mysql-4.1.11).低版本的mysql似乎没出现过中文问题(mysql-4.0.17). :)</p>
				<p>1.添加一个过滤器,将字符集编码设为GBK.<br />修改web.xml:</p>
				<p> &lt;filter&gt;<br />  &lt;filter-name&gt;SetCharacterEncoding&lt;/filter-name&gt;<br />  &lt;filter-class&gt;hxz.filter.SetEncodingFilter&lt;/filter-class&gt;<br />  &lt;init-param&gt;<br />   &lt;param-name&gt;encoding&lt;/param-name&gt;<br />   &lt;param-value&gt;GBK&lt;/param-value&gt;<br />  &lt;/init-param&gt;<br /> &lt;/filter&gt;<br /> <br /> &lt;filter-mapping&gt;<br />  &lt;filter-name&gt;SetCharacterEncoding&lt;/filter-name&gt;<br />  &lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br /> &lt;/filter-mapping&gt;</p>
				<p>新建一个过滤器:<br />package hxz.filter;</p>
				<p>import java.io.IOException;</p>
				<p>import javax.servlet.*;</p>
				<p>public class SetEncodingFilter implements Filter {<br /> <br /> // default character encoding<br /> String defaultEncoding = "GBK"; <br /> <br /> public void init(FilterConfig config) throws ServletException {<br />  String encoding = config.getInitParameter("encoding");<br />  if (encoding != null) {<br />   defaultEncoding = encoding;<br />  }<br /> }</p>
				<p> public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {<br />  request.setCharacterEncoding(defaultEncoding);<br />  chain.doFilter(request, response);<br /> }</p>
				<p> public void destroy() {<br />  defaultEncoding = null;<br /> }</p>
				<p>}</p>
				<p>2.修改hibernate配置文件:<br />&lt;property name="url"&gt;<br />  &lt;value&gt;jdbc:mysql://localhost:3306/test?useUnicode=true&amp;amp;characterEncoding=GBK&lt;/value&gt;<br />&lt;/property&gt;<br />注意后面的:useUnicode=true&amp;amp;characterEncoding=GBK, 在xml中&amp;要改为;amp;</p>
				<p>3.在新版本中mysql建表时,你可以选择一种字符集,将它设为GBK.<br />jsp或servlet中把字符集改为GBK.</p>
				<p> </p>
		</font>
<img src ="http://www.blogjava.net/savage100/aggbug/58096.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/savage100/" target="_blank">谢玮</a> 2006-07-14 09:09 <a href="http://www.blogjava.net/savage100/articles/58096.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>常用站点</title><link>http://www.blogjava.net/savage100/articles/56979.html</link><dc:creator>谢玮</dc:creator><author>谢玮</author><pubDate>Thu, 06 Jul 2006 08:55:00 GMT</pubDate><guid>http://www.blogjava.net/savage100/articles/56979.html</guid><wfw:comment>http://www.blogjava.net/savage100/comments/56979.html</wfw:comment><comments>http://www.blogjava.net/savage100/articles/56979.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/savage100/comments/commentRss/56979.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/savage100/services/trackbacks/56979.html</trackback:ping><description><![CDATA[
		<font color="#7fffd4">
				<font size="6">
						<font color="#a52a2a">Ajax</font>
						<br />
				</font>
		</font>dojo         <a href="http://download.dojotoolkit.org/">http://download.dojotoolkit.org/</a><br />dwr          <a href="http://getahead.ltd.uk/dwr/download"><font color="#bbbb99" size="2">http://getahead.ltd.uk/dwr/download</font></a><br />prototype  <a href="http://prototype.conio.net/">http://prototype.conio.net/</a><br />prototype 在线学习指南   <a href="http://www.sergiopereira.com/articles/prototype.js.html">http://www.sergiopereira.com/articles/prototype.js.html</a><br />prototype 1.4中文手册(hot!!!)  <a href="http://thinhunan.cnblogs.com/archive/2006/04/01/DeveloperNotesForPrototype.html">http://thinhunan.cnblogs.com/archive/2006/04/01/DeveloperNotesForPrototype.html</a><br /><font color="#000000">wiki.script.aculo.us API <br /></font><a href="http://wiki.script.aculo.us/scriptaculous/show/Prototype">http://wiki.script.aculo.us/scriptaculous/show/Prototype</a><br />某prototype 笔记   <a href="https://compdoc2cn.dev.java.net/prototype/html/prototype.js.cn.html">https://compdoc2cn.dev.java.net/prototype/html/prototype.js.cn.html</a>  <br /><br />json  指南: Quick guide to somewhat advanced JavaScript  tour of some OO features<br /><a href="http://www.sergiopereira.com/articles/advjs.html">http://www.sergiopereira.com/articles/advjs.html</a><br />《征服Ajax web2.0详解》作者的blog<br /><a href="http://www.x2blog.cn/supNate/#sid.0/page.1/">http://www.x2blog.cn/supNate/#sid.0/page.1/</a><br /><font color="#a52a2a" size="5">Eclipse</font><br />eclipse     <a href="http://www.eclipse.org/">http://www.eclipse.org</a><br />csdn文章中心        <a href="http://kb.csdn.net/java/Articles/200606/7105353e-2f75-4398-9282-119b58937764.html">http://kb.csdn.net/java/Articles/200606/7105353e-2f75-4398-9282-119b58937764.html</a><br />JSEclipse 插件下载地址       <a href="http://www.apple.com/downloads/macosx/development_tools/jseclipse.html">http://www.apple.com/downloads/macosx/development_tools/jseclipse.html</a><br />JSEclipse 插件官方地址       <a href="http://www.interaktonline.com/">http://www.interaktonline.com/</a><br />视频教程                              <a href="http://www.interaktonline.com/Products/Eclipse/JSEclipse/Flash-Demos/">http://www.interaktonline.com/Products/Eclipse/JSEclipse/Flash-Demos/</a><br />java视线                 <a href="http://www.hibernate.org.cn/">http://www.hibernate.org.cn</a><br />曹晓刚满江红        <a href="http://www.redsaga.com/mambo/content/view/42/2/">http://www.redsaga.com/mambo/content/view/42/2/</a><br /><br />在线javascript手册   <a href="http://www.8esky.com/handbook/JavaScript/index.html">http://www.8esky.com/handbook/JavaScript/index.html</a><br />Mysql 手册         <a href="http://www.uplinux.com/download/doc/mysql/mysql4/index.html">http://www.uplinux.com/download/doc/mysql/mysql4/index.html</a><br />CVSclient入门     <a href="http://www.redsaga.com/CVS_newbie_win32/">http://www.redsaga.com/CVS_newbie_win32/</a><br />一个不错的Ajax Blog      <a href="https://blueprints.dev.java.net/ajax-faq-zh.html#ajax-libraries">https://blueprints.dev.java.net/ajax-faq-zh.html#ajax-libraries</a><br />框架视频教程   <a href="/oksonic/archive/2005/11/06/18370.aspx">http://www.blogjava.net/oksonic/archive/2005/11/06/18370.aspx</a><br /><font color="#a52a2a" size="5"><br />Java开源</font><br /><br />开源站点 <a href="http://sourceforge.net/new/">http://sourceforge.net/new/</a><br />一个国内的java开源站点 HOT  <a href="http://www.ideagrace.com/sf/bloggers/">http://www.ideagrace.com/sf/bloggers/</a> <br />java自由人   <a href="http://www.javayou.com/">http://www.javayou.com/</a><br />开发工具下载站点  <a href="http://www.topdownloads.org/software/view.php?id=75020">http://www.topdownloads.org/software/view.php?id=75020</a><img src ="http://www.blogjava.net/savage100/aggbug/56979.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/savage100/" target="_blank">谢玮</a> 2006-07-06 16:55 <a href="http://www.blogjava.net/savage100/articles/56979.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>