<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>IT北瓜 &#187; Java</title>
	<atom:link href="http://imleeo.com/category/java/feed" rel="self" type="application/rss+xml" />
	<link>http://imleeo.com</link>
	<description>关注jQuery,关注java,关注计算机应用,关注生活...</description>
	<lastBuildDate>Tue, 06 Jul 2010 05:30:00 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>org.hibernate.SessionException: Session is closed! 异常解决方法</title>
		<link>http://imleeo.com/java/org-hibernate-sessionexception-session-is-closed.html</link>
		<comments>http://imleeo.com/java/org-hibernate-sessionexception-session-is-closed.html#comments</comments>
		<pubDate>Thu, 29 Apr 2010 08:19:00 +0000</pubDate>
		<dc:creator>IT北瓜</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Session is closed]]></category>
		<category><![CDATA[异常处理]]></category>
		<category><![CDATA[异常解决]]></category>

		<guid isPermaLink="false">http://imleeo.com/java/org-hibernate-sessionexception-session-is-closed.html</guid>
		<description><![CDATA[刚刚在程序中出现了org.hibernate.SessionException: Session is closed! 这个异常，查看Firebug控制台，还能发现有这样的异常信息org.springframework.transaction.TransactionSystemException: Could not commit Hibernate transaction;记录一下解决方法。

<div class="posturl"><span><span class="r1"></span><span class="r2"></span><span class="r3"></span><span class="r4"></span></span><div class="posturl-content">
关联文章导读：<ol><li><a href='http://imleeo.com/java/hibernate/hibernate-exception-and-treatment.html' rel='bookmark' title='Permanent Link: Hibernate常见异常与分析处理（收集整理）'>Hibernate常见异常与分析处理（收集整理）</a> <small>1.&#160;&#160;&#160; net.sf.hibernate.MappingException 分析处理： 当出现net.sf.hibernate.MappingException: Error reading resource:…异常时一般是因为映射文件出现错误。 当出现net.sf.hibernate.MappingException: Resource: … not found是因为XML配置文件没找到所致，有可能是放置目录不正确，或者没将其加入hibernate.cfg.xml中。 2.&#160;&#160;&#160; net.sf.hibernate.PropertyNotFoundException 分析处理： 当出现net.sf.hibernate.PropertyNotFoundException: Could not find a...</small></li>
<li><a href='http://imleeo.com/java/hibernate3-3-2-spring2-5-6-struts2-1-6.html' rel='bookmark' title='Permanent Link: Hibernate3.3.2+Spring2.5.6+Struts2.1.6整合异常解决&mdash;&mdash;不断更新'>Hibernate3.3.2+Spring2.5.6+Struts2.1.6整合异常解决&mdash;&mdash;不断更新</a> <small>1、org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'sessionFactory' is defined 异常说明：sessionFactory bean未定义 异常原因：applicationContext.xml配置文件中使用其他名字sessionFactory...</small></li>
<li><a href='http://imleeo.com/java/struts2-flashfileupload-fileupload-and-generate-thumbnails-and-add-watermarks.html' rel='bookmark' title='Permanent Link: Struts2+FlashFileUpload文件上传并生成缩略图和添加水印'>Struts2+FlashFileUpload文件上传并生成缩略图和添加水印</a> <small>&#160;&#160;&#160;&#160;&#160; 以前用过SWFUpload，功能确实很强大。javaeye上有人发布了这样一篇文章step-by-step多文件WEB批量上传(swfupload)的完美解决方案有兴趣的朋友可以看一下。Leeo觉得SWFUpload稍微不足的就是界面的定制，总感觉自己定制出来的界面有点难登大雅之堂。下面Leeo为大家介绍一下，如何使用FlashFileUpload这个Flash组件来实现多文件上传，并且通过java程序自动生成缩略图和添加水印，FlashFileUpload定制出来的界面还是挺漂亮的（PS：这个界面是Leeo从UUShare上弄下来的，^_^），先来Show一张效果图： ...</small></li>
</ol></div><span><span class="r4"></span><span class="r3"></span><span class="r2"></span><span class="r1"></span></span></div>]]></description>
			<content:encoded><![CDATA[<p>刚刚在程序中出现了org.hibernate.SessionException: Session is closed! 这个异常，查看Firebug控制台，还能发现有这样的异常信息org.springframework.transaction.TransactionSystemException: Could not commit Hibernate transaction;记录一下解决方法。</p>
<p>程序代码如下：</p>
<pre><span style="color: #0000ff">public</span> <span style="color: #0000ff">boolean</span> activityUpdate(Activity activity) <span style="color: #0000ff">throws</span> Exception {

	Session session = <span style="color: #0000ff">null</span>;
	Transaction tran = <span style="color: #0000ff">null</span>;

	<span style="color: #0000ff">boolean</span> r = <span style="color: #0000ff">false</span>;

	<span style="color: #0000ff">try</span>{
		<span style="color: #008000">//创建sql</span>
		String sql1 = &quot;<span style="color: #8b0000">delete from Activityfilm where activityid=</span>&quot; + activity.getId();<span style="color: #008000">//删除活动影片数据</span>
		String sql2 = &quot;<span style="color: #8b0000">delete from Activityclient where activityid=</span>&quot; + activity.getId();<span style="color: #008000">//删除活动客户数据</span>

		<span style="color: #008000">//获得session</span>
		session = <span style="color: #0000ff">this</span>.getSession();
		<span style="color: #008000">//开始事务</span>
		tran = session.beginTransaction();
		<span style="color: #008000">//执行删除操作</span>
		<span style="color: #0000ff">int</span> del_1 = session.createSQLQuery(sql1).executeUpdate(), del_2 = session.createSQLQuery(sql2).executeUpdate();
		System.out.println(&quot;<span style="color: #8b0000">del_1: </span>&quot;+ del_1 + &quot;<span style="color: #8b0000">###del_2: </span>&quot; + del_2);
		<span style="color: #008000">//更新活动</span>
		session.update(activity);
		<span style="color: #0000ff">if</span>(del_1 &gt; 0 &amp;&amp; del_2 &gt; 0){
			r = <span style="color: #0000ff">true</span>;
		}<span style="color: #0000ff">else</span>{
			r = <span style="color: #0000ff">false</span>;
		}
		System.out.println(&quot;<span style="color: #8b0000">r: </span>&quot;+ r);
		tran.commit();
		<span style="color: #0000ff">if</span>(!r){<span style="color: #008000">//执行回滚</span>
			System.out.println(&quot;<span style="color: #8b0000">执行回滚#####################</span>&quot;);
			tran.rollback();
		}
	}<span style="color: #0000ff">catch</span>(Exception ex){
		<span style="color: #0000ff">if</span>(tran != <span style="color: #0000ff">null</span>){
			System.out.println(&quot;<span style="color: #8b0000">执行回滚@@@@@@@@@@@@@@@@@@@@@</span>&quot;);
			tran.rollback();
		}
		ex.printStackTrace();
	}<span style="color: #0000ff">finally</span>{
		<span style="color: #0000ff">if</span>(tran != <span style="color: #0000ff">null</span>){
			System.out.println(&quot;<span style="color: #8b0000">设置事务为null</span>&quot;);
			tran = <span style="color: #0000ff">null</span>;
		}
		<span style="color: #0000ff">if</span>(session != <span style="color: #0000ff">null</span>){
			System.out.println(&quot;<span style="color: #8b0000">关闭session$$$$$$$$$$$$$$$$$</span>&quot;);
			session.close();<span style="color: #008000">//执行这一行总是报异常：org.hibernate.SessionException: Session is closed! </span>
		}
	}
	System.out.println(&quot;<span style="color: #8b0000">返回: </span>&quot;+ r);
	<span style="color: #0000ff">return</span> r;

}</pre>
<p>引用网上的资料：</p>
<blockquote>
<p>先看看SessionFactory.getCurrentSession与openSession的区别<br />
    <br />1. 如果使用的是getCurrentSession来创建session的话，在commit后，session就自动被关闭了， </p>
<p>&#160;&#160;&#160; 也就是不用再session.close()了。但是如果使用的是openSession方法创建的session的话， </p>
<p>&#160;&#160;&#160; 那么必须显示的关闭session，也就是调用session.close()方法。这样commit后，session并没有关闭 </p>
<p>/*2. getCurrentSession的使用可以参见hibernate\hibernate-3.2\doc\tutorial\src项目 </p>
<p>3. 使用SessionFactory.getCurrentSession()需要在hibernate.cfg.xml中如下配置： </p>
<p>&#160;&#160; * 如果采用jdbc独立引用程序配置如下： </p>
<p>&#160;&#160;&#160; &lt;property name=&quot;hibernate.current_session_context_class&quot;&gt;thread&lt;/property&gt; </p>
<p>&#160;&#160; * 如果采用了JTA事务配置如下 </p>
<p>&#160;&#160;&#160; &lt;property name=&quot;hibernate.current_session_context_class&quot;&gt;jta&lt;/property&gt;*/</p>
</blockquote>
<p>将以上程序中的：</p>
<pre><span style="color: #008000">//获得session</span>
session = <span style="color: #0000ff">this</span>.getSession();</pre>
<p>修改为：</p>
<pre><span style="color: #008000">//获得session</span>
session = <span style="color: #0000ff">this</span>.getHibernateTemplate().getSessionFactory().openSession();</pre>
<p>这样异常就解决了。</p>


<div class="posturl"><span><span class="r1"></span><span class="r2"></span><span class="r3"></span><span class="r4"></span></span><div class="posturl-content"><p>关联文章导读：<ol><li><a href='http://imleeo.com/java/hibernate/hibernate-exception-and-treatment.html' rel='bookmark' title='Permanent Link: Hibernate常见异常与分析处理（收集整理）'>Hibernate常见异常与分析处理（收集整理）</a> <small>1.&#160;&#160;&#160; net.sf.hibernate.MappingException 分析处理： 当出现net.sf.hibernate.MappingException: Error reading resource:…异常时一般是因为映射文件出现错误。 当出现net.sf.hibernate.MappingException: Resource: … not found是因为XML配置文件没找到所致，有可能是放置目录不正确，或者没将其加入hibernate.cfg.xml中。 2.&#160;&#160;&#160; net.sf.hibernate.PropertyNotFoundException 分析处理： 当出现net.sf.hibernate.PropertyNotFoundException: Could not find a...</small></li>
<li><a href='http://imleeo.com/java/hibernate3-3-2-spring2-5-6-struts2-1-6.html' rel='bookmark' title='Permanent Link: Hibernate3.3.2+Spring2.5.6+Struts2.1.6整合异常解决&mdash;&mdash;不断更新'>Hibernate3.3.2+Spring2.5.6+Struts2.1.6整合异常解决&mdash;&mdash;不断更新</a> <small>1、org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'sessionFactory' is defined 异常说明：sessionFactory bean未定义 异常原因：applicationContext.xml配置文件中使用其他名字sessionFactory...</small></li>
<li><a href='http://imleeo.com/java/struts2-flashfileupload-fileupload-and-generate-thumbnails-and-add-watermarks.html' rel='bookmark' title='Permanent Link: Struts2+FlashFileUpload文件上传并生成缩略图和添加水印'>Struts2+FlashFileUpload文件上传并生成缩略图和添加水印</a> <small>&#160;&#160;&#160;&#160;&#160; 以前用过SWFUpload，功能确实很强大。javaeye上有人发布了这样一篇文章step-by-step多文件WEB批量上传(swfupload)的完美解决方案有兴趣的朋友可以看一下。Leeo觉得SWFUpload稍微不足的就是界面的定制，总感觉自己定制出来的界面有点难登大雅之堂。下面Leeo为大家介绍一下，如何使用FlashFileUpload这个Flash组件来实现多文件上传，并且通过java程序自动生成缩略图和添加水印，FlashFileUpload定制出来的界面还是挺漂亮的（PS：这个界面是Leeo从UUShare上弄下来的，^_^），先来Show一张效果图： ...</small></li>
</ol></p></div><span><span class="r4"></span><span class="r3"></span><span class="r2"></span><span class="r1"></span></span></div>]]></content:encoded>
			<wfw:commentRss>http://imleeo.com/java/org-hibernate-sessionexception-session-is-closed.html/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Struts2常见异常与分析处理【不断更新】</title>
		<link>http://imleeo.com/java/struts2-exception-and-treatment.html</link>
		<comments>http://imleeo.com/java/struts2-exception-and-treatment.html#comments</comments>
		<pubDate>Mon, 18 Jan 2010 02:48:00 +0000</pubDate>
		<dc:creator>IT北瓜</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Struts2]]></category>
		<category><![CDATA[异常处理]]></category>
		<category><![CDATA[异常解决]]></category>

		<guid isPermaLink="false">http://imleeo.com/java/struts2-exception-and-treatment.html</guid>
		<description><![CDATA[<p>&#160;&#160;&#160;&#160;&#160; <strong><font color="#800000">1、ognl.OgnlException: target is null for setProperty</font></strong></p>

<p>&#160;&#160;&#160;&#160;&#160; <em>分析处理：</em></p>

<p>&#160;&#160;&#160;&#160;&#160; 在action中有：</p>

<pre><span style="color: #0000ff">private</span> <span style="color: #0000ff">transient</span> Filmrlspack filmrlspack;
<span style="color: #008000">/**
 *这里省略了getter、setter方法的代码
 */</span></pre>

<p>&#160;&#160;&#160;&#160;&#160; 提交数据的表单代码：</p>

<div class="posturl"><span><span class="r1"></span><span class="r2"></span><span class="r3"></span><span class="r4"></span></span><div class="posturl-content">
关联文章导读：<ol><li><a href='http://imleeo.com/java/hibernate3-3-2-spring2-5-6-struts2-1-6.html' rel='bookmark' title='Permanent Link: Hibernate3.3.2+Spring2.5.6+Struts2.1.6整合异常解决&mdash;&mdash;不断更新'>Hibernate3.3.2+Spring2.5.6+Struts2.1.6整合异常解决&mdash;&mdash;不断更新</a> <small>1、org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'sessionFactory' is defined 异常说明：sessionFactory bean未定义 异常原因：applicationContext.xml配置文件中使用其他名字sessionFactory...</small></li>
<li><a href='http://imleeo.com/jquery/different-results-in-firefox-an-ie-of-fileupload-using-struts2-and-json-and-jquery.html' rel='bookmark' title='Permanent Link: Struts2+json+jQuery上传文件在Firefox和IE下返回结果截然不同'>Struts2+json+jQuery上传文件在Firefox和IE下返回结果截然不同</a> <small>&#160;&#160;&#160;&#160;&#160; 在Struts2中利用json格式返回数据，struts.xml文件配置如下： &lt;package name=&quot;struts2json&quot; extends=&quot;json-default&quot;&gt; &lt;!-- jsonfilm --&gt; &lt;action name=&quot;jsonFilm&quot; class=&quot;film&quot;&gt; &lt;result type=&quot;json&quot;&gt; &lt;param name=&quot;excludeProperties&quot;&gt;.*hibernateLazyInitializer,pageBean,film&lt;/param&gt; &lt;/result&gt; &lt;/action&gt; &lt;/package&gt; 而表单利用jquery.form.js插件提供的ajax方式来提交，javascript代码如下：...</small></li>
<li><a href='http://imleeo.com/java/struts2-flashfileupload-fileupload-and-generate-thumbnails-and-add-watermarks.html' rel='bookmark' title='Permanent Link: Struts2+FlashFileUpload文件上传并生成缩略图和添加水印'>Struts2+FlashFileUpload文件上传并生成缩略图和添加水印</a> <small>&#160;&#160;&#160;&#160;&#160; 以前用过SWFUpload，功能确实很强大。javaeye上有人发布了这样一篇文章step-by-step多文件WEB批量上传(swfupload)的完美解决方案有兴趣的朋友可以看一下。Leeo觉得SWFUpload稍微不足的就是界面的定制，总感觉自己定制出来的界面有点难登大雅之堂。下面Leeo为大家介绍一下，如何使用FlashFileUpload这个Flash组件来实现多文件上传，并且通过java程序自动生成缩略图和添加水印，FlashFileUpload定制出来的界面还是挺漂亮的（PS：这个界面是Leeo从UUShare上弄下来的，^_^），先来Show一张效果图： ...</small></li>
</ol></div><span><span class="r4"></span><span class="r3"></span><span class="r2"></span><span class="r1"></span></span></div>]]></description>
			<content:encoded><![CDATA[<p>&#160;&#160;&#160;&#160;&#160; <strong><font color="#800000">1、ognl.OgnlException: target is null for setProperty</font></strong></p>
<p>&#160;&#160;&#160;&#160;&#160; <em>分析处理：</em></p>
<p>&#160;&#160;&#160;&#160;&#160; 在action中有：</p>
<pre><span style="color: #0000ff">private</span> <span style="color: #0000ff">transient</span> Filmrlspack filmrlspack;
<span style="color: #008000">/**
 *这里省略了getter、setter方法的代码
 */</span></pre>
<p>&#160;&#160;&#160;&#160;&#160; 提交数据的表单代码：</p>
<pre class="csharpcode"><span class="asp">&lt;%@ page language=&quot;java&quot; import=&quot;java.util.*&quot; pageEncoding=&quot;UTF-8&quot;%&gt;</span>
<span class="kwrd">&lt;</span><span class="html">form</span> <span class="attr">method</span><span class="kwrd">=&quot;post&quot;</span> <span class="attr">name</span><span class="kwrd">=&quot;wmfForm&quot;</span> <span class="attr">id</span><span class="kwrd">=&quot;wmfForm&quot;</span> <span class="attr">action</span><span class="kwrd">=&quot;&quot;</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;</span><span class="html">span</span> <span class="attr">id</span><span class="kwrd">=&quot;wmf-msg&quot;</span><span class="kwrd">&gt;&lt;/</span><span class="html">span</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;</span><span class="html">table</span> <span class="attr">width</span><span class="kwrd">=&quot;700&quot;</span> <span class="attr">border</span><span class="kwrd">=&quot;0&quot;</span> <span class="attr">cellspacing</span><span class="kwrd">=&quot;0&quot;</span> <span class="attr">cellpadding</span><span class="kwrd">=&quot;0&quot;</span> <span class="attr">class</span><span class="kwrd">=&quot;sample&quot;</span><span class="kwrd">&gt;</span>
  <span class="kwrd">&lt;</span><span class="html">tr</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">td</span><span class="kwrd">&gt;</span>影片发行版名称：<span class="kwrd">&lt;/</span><span class="html">td</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">td</span><span class="kwrd">&gt;&lt;</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">=&quot;text&quot;</span> <span class="attr">readonly</span><span class="kwrd">=&quot;readonly&quot;</span> <span class="attr">name</span><span class="kwrd">=&quot;Filmrlspack.filmname&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;&lt;%=request.getParameter(&quot;</span><span class="attr">filmname</span><span class="kwrd">&quot;) %&gt;&quot;</span> <span class="kwrd">/&gt;&lt;/</span><span class="html">td</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">td</span><span class="kwrd">&gt;</span>业务类型：<span class="kwrd">&lt;/</span><span class="html">td</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">td</span><span class="kwrd">&gt;&lt;</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">=&quot;hidden&quot;</span> <span class="attr">name</span><span class="kwrd">=&quot;businesstypeID&quot;</span>  <span class="attr">value</span><span class="kwrd">=&quot;&lt;%=request.getParameter(&quot;</span><span class="attr">businesstypeID</span><span class="kwrd">&quot;) %&gt;&quot;</span> <span class="kwrd">/&gt;&lt;</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">=&quot;text&quot;</span> <span class="attr">name</span><span class="kwrd">=&quot;businesstypeName&quot;</span> <span class="attr">readonly</span><span class="kwrd">=&quot;readonly&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;&lt;%=request.getParameter(&quot;</span><span class="attr">businesstypeName</span><span class="kwrd">&quot;) %&gt;&quot;</span> <span class="kwrd">/&gt;&lt;/</span><span class="html">td</span><span class="kwrd">&gt;</span>
  <span class="kwrd">&lt;/</span><span class="html">tr</span><span class="kwrd">&gt;</span>
  <span class="kwrd">&lt;</span><span class="html">tr</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">td</span><span class="kwrd">&gt;</span>出品单位：<span class="kwrd">&lt;/</span><span class="html">td</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">td</span><span class="kwrd">&gt;&lt;</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">=&quot;text&quot;</span> <span class="attr">name</span><span class="kwrd">=&quot;Filmrlspack.manufacture&quot;</span> <span class="kwrd">/&gt;&lt;/</span><span class="html">td</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">td</span><span class="kwrd">&gt;</span>出品年代：<span class="kwrd">&lt;/</span><span class="html">td</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">td</span><span class="kwrd">&gt;&lt;</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">=&quot;text&quot;</span> <span class="attr">name</span><span class="kwrd">=&quot;Filmrlspack.manufacturedate&quot;</span> <span class="kwrd">/&gt;&lt;/</span><span class="html">td</span><span class="kwrd">&gt;</span>
  <span class="kwrd">&lt;/</span><span class="html">tr</span><span class="kwrd">&gt;</span>
  <span class="kwrd">&lt;</span><span class="html">tr</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">td</span><span class="kwrd">&gt;</span>导演：<span class="kwrd">&lt;/</span><span class="html">td</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">td</span><span class="kwrd">&gt;&lt;</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">=&quot;text&quot;</span> <span class="attr">name</span><span class="kwrd">=&quot;Filmrlspack.directors&quot;</span> <span class="kwrd">/&gt;&lt;/</span><span class="html">td</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">td</span><span class="kwrd">&gt;</span>主演：<span class="kwrd">&lt;/</span><span class="html">td</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">td</span><span class="kwrd">&gt;&lt;</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">=&quot;text&quot;</span> <span class="attr">name</span><span class="kwrd">=&quot;Filmrlspack.leaderact&quot;</span> <span class="kwrd">/&gt;&lt;/</span><span class="html">td</span><span class="kwrd">&gt;</span>
  <span class="kwrd">&lt;/</span><span class="html">tr</span><span class="kwrd">&gt;</span>
  <span class="kwrd">&lt;</span><span class="html">tr</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">td</span><span class="kwrd">&gt;</span>语种：<span class="kwrd">&lt;/</span><span class="html">td</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">td</span><span class="kwrd">&gt;&lt;</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">=&quot;text&quot;</span> <span class="attr">name</span><span class="kwrd">=&quot;Filmrlspack.langtype&quot;</span> <span class="kwrd">/&gt;&lt;/</span><span class="html">td</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">td</span><span class="kwrd">&gt;</span>是否主语种：<span class="kwrd">&lt;/</span><span class="html">td</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">td</span><span class="kwrd">&gt;&lt;</span><span class="html">input</span> <span class="attr">type</span><span class="kwrd">=&quot;checkbox&quot;</span> <span class="attr">name</span><span class="kwrd">=&quot;Filmrlspack.maintype&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;1&quot;</span> <span class="attr">checked</span><span class="kwrd">=&quot;checked&quot;</span> <span class="kwrd">/&gt;&lt;/</span><span class="html">td</span><span class="kwrd">&gt;</span>
  <span class="kwrd">&lt;/</span><span class="html">tr</span><span class="kwrd">&gt;</span>
  <span class="kwrd">&lt;</span><span class="html">tr</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">td</span><span class="kwrd">&gt;</span>影片描述：<span class="kwrd">&lt;/</span><span class="html">td</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">td</span> <span class="attr">colspan</span><span class="kwrd">=&quot;3&quot;</span><span class="kwrd">&gt;&lt;</span><span class="html">textarea</span> <span class="attr">rows</span><span class="kwrd">=&quot;5&quot;</span> <span class="attr">cols</span><span class="kwrd">=&quot;75&quot;</span>  <span class="attr">name</span><span class="kwrd">=&quot;Filmrlspack.filmname&quot;</span> <span class="kwrd">&gt;&lt;/</span><span class="html">textarea</span><span class="kwrd">&gt;&lt;/</span><span class="html">td</span><span class="kwrd">&gt;</span>
  <span class="kwrd">&lt;/</span><span class="html">tr</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;/</span><span class="html">table</span><span class="kwrd">&gt;</span>
<span class="kwrd">&lt;/</span><span class="html">form</span><span class="kwrd">&gt;</span></pre>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>&#160;&#160;&#160;&#160;&#160; 其中很多字段为非必填字段，若什么都不填提交到action中为null，报以上异常。</p>
<p>&#160;&#160;&#160;&#160;&#160; 把action中的</p>
</p>
<pre><span style="color: #0000ff">private</span> <span style="color: #0000ff">transient</span> Filmrlspack filmrlspack;
<span style="color: #008000">/**
 *这里省略了getter、setter方法的代码
 */</span></pre>
</p>
<p>&#160;&#160;&#160;&#160;&#160; 改成</p>
<pre><span style="color: #0000ff">private</span> <span style="color: #0000ff">transient</span> Filmrlspack filmrlspack = <span style="color: #0000ff">new</span> Filmrlspack();
<span style="color: #008000">/**
 *这里省略了getter、setter方法
 */</span></pre>
<p>&#160;&#160;&#160;&#160;&#160; 就可以了。</p>
<p>&#160;&#160;&#160;&#160;&#160; <strong><font color="#800000">2、Caused by: There is no result type defined for type &#8216;redirect-action&#8217; mapped with name</font></strong></p>
<p>&#160;&#160;&#160;&#160;&#160; <em>分析处理：</em></p>
<p>&#160;&#160;&#160;&#160;&#160; 在struts.xml中配置如下：</p>
<pre><span style="color: #0000ff">&lt;</span><span style="color: #800000">global</span>-<span style="color: #ff0000">results</span><span style="color: #0000ff">&gt;</span>
	<span style="color: #0000ff">&lt;</span><span style="color: #800000">result</span> <span style="color: #ff0000">name</span>=<span style="color: #0000ff">&quot;login&quot;</span> <span style="color: #ff0000">type</span>=<span style="color: #0000ff">&quot;redirect-action&quot;</span><span style="color: #0000ff">&gt;</span>redirectLoginAction<span style="color: #0000ff">&lt;/</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;/</span><span style="color: #800000">global</span>-results<span style="color: #0000ff">&gt;</span></pre>
<p>&#160;&#160;&#160;&#160;&#160;&#160; 报以上异常，用的Struts2包版本为2.1.8.1，后来查看了jar包中的struts-default.xml，发现type中没有redirect-action这一类型，而是变成了redirectAction，把<font color="#ff0000">type=”redirect-action”</font>改成<font color="#ff0000">type=”redirectAction”</font>就不会有这个异常了。</p>
<p>&#160;&#160;&#160;&#160;&#160; <font color="#ff0000"><em>(2010年1月19日更新)</em></font></p>
<p><strong><font color="#800000">&#160;&#160;&#160;&#160;&#160; 3、待更新…</font></strong></p>
<p>&#160;&#160;&#160;&#160;&#160; <em>分析处理：</em></p>


<div class="posturl"><span><span class="r1"></span><span class="r2"></span><span class="r3"></span><span class="r4"></span></span><div class="posturl-content"><p>关联文章导读：<ol><li><a href='http://imleeo.com/java/hibernate3-3-2-spring2-5-6-struts2-1-6.html' rel='bookmark' title='Permanent Link: Hibernate3.3.2+Spring2.5.6+Struts2.1.6整合异常解决&mdash;&mdash;不断更新'>Hibernate3.3.2+Spring2.5.6+Struts2.1.6整合异常解决&mdash;&mdash;不断更新</a> <small>1、org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'sessionFactory' is defined 异常说明：sessionFactory bean未定义 异常原因：applicationContext.xml配置文件中使用其他名字sessionFactory...</small></li>
<li><a href='http://imleeo.com/jquery/different-results-in-firefox-an-ie-of-fileupload-using-struts2-and-json-and-jquery.html' rel='bookmark' title='Permanent Link: Struts2+json+jQuery上传文件在Firefox和IE下返回结果截然不同'>Struts2+json+jQuery上传文件在Firefox和IE下返回结果截然不同</a> <small>&#160;&#160;&#160;&#160;&#160; 在Struts2中利用json格式返回数据，struts.xml文件配置如下： &lt;package name=&quot;struts2json&quot; extends=&quot;json-default&quot;&gt; &lt;!-- jsonfilm --&gt; &lt;action name=&quot;jsonFilm&quot; class=&quot;film&quot;&gt; &lt;result type=&quot;json&quot;&gt; &lt;param name=&quot;excludeProperties&quot;&gt;.*hibernateLazyInitializer,pageBean,film&lt;/param&gt; &lt;/result&gt; &lt;/action&gt; &lt;/package&gt; 而表单利用jquery.form.js插件提供的ajax方式来提交，javascript代码如下：...</small></li>
<li><a href='http://imleeo.com/java/struts2-flashfileupload-fileupload-and-generate-thumbnails-and-add-watermarks.html' rel='bookmark' title='Permanent Link: Struts2+FlashFileUpload文件上传并生成缩略图和添加水印'>Struts2+FlashFileUpload文件上传并生成缩略图和添加水印</a> <small>&#160;&#160;&#160;&#160;&#160; 以前用过SWFUpload，功能确实很强大。javaeye上有人发布了这样一篇文章step-by-step多文件WEB批量上传(swfupload)的完美解决方案有兴趣的朋友可以看一下。Leeo觉得SWFUpload稍微不足的就是界面的定制，总感觉自己定制出来的界面有点难登大雅之堂。下面Leeo为大家介绍一下，如何使用FlashFileUpload这个Flash组件来实现多文件上传，并且通过java程序自动生成缩略图和添加水印，FlashFileUpload定制出来的界面还是挺漂亮的（PS：这个界面是Leeo从UUShare上弄下来的，^_^），先来Show一张效果图： ...</small></li>
</ol></p></div><span><span class="r4"></span><span class="r3"></span><span class="r2"></span><span class="r1"></span></span></div>]]></content:encoded>
			<wfw:commentRss>http://imleeo.com/java/struts2-exception-and-treatment.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>JDK1.6存储空间信息计算</title>
		<link>http://imleeo.com/java/jdk16-computing-storage-space-information.html</link>
		<comments>http://imleeo.com/java/jdk16-computing-storage-space-information.html#comments</comments>
		<pubDate>Fri, 15 Jan 2010 01:53:00 +0000</pubDate>
		<dc:creator>IT北瓜</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[JDK1.6]]></category>
		<category><![CDATA[存储空间]]></category>

		<guid isPermaLink="false">http://imleeo.com/java/jdk16-computing-storage-space-information.html</guid>
		<description><![CDATA[<p>&#160;&#160;&#160;&#160;&#160; 在JDK6.0之前，获取剩余存储空间是很困难的事情，需要借助Java本地调用JNI才能做到，在JDK6.0之后引入了获取可用存储空间的3个方法。</p>

<pre><span style="color: #008000">/**
 * @ 功能 返回此抽象路径名指定的分区总存储空间大小，以字节为单位；如果此抽象路径名没有指定分区，则返回 0L。
 * @ return Long
 */</span>
<span style="color: #0000ff">public</span> <span style="color: #0000ff">long</span> getTotalSpace()</pre>

<div class="posturl"><span><span class="r1"></span><span class="r2"></span><span class="r3"></span><span class="r4"></span></span><div class="posturl-content">
暂无关联文章！</div><span><span class="r4"></span><span class="r3"></span><span class="r2"></span><span class="r1"></span></span></div>]]></description>
			<content:encoded><![CDATA[<p>&#160;&#160;&#160;&#160;&#160; 在JDK6.0之前，获取剩余存储空间是很困难的事情，需要借助Java本地调用JNI才能做到，在JDK6.0之后引入了获取可用存储空间的3个方法。</p>
<pre><span style="color: #008000">/**
 * @ 功能 返回此抽象路径名指定的分区总存储空间大小，以字节为单位；如果此抽象路径名没有指定分区，则返回 0L。
 * @ return Long
 */</span>
<span style="color: #0000ff">public</span> <span style="color: #0000ff">long</span> getTotalSpace()</pre>
<pre><span style="color: #008000">/**
 * @ 功能 返回此抽象路径名指定的分区中未分配的字节数。
 * @ return Long
 */</span>
<span style="color: #0000ff">public</span> <span style="color: #0000ff">long</span> getFreeSpace()</pre>
<pre><span style="color: #008000">/**
 * @ 功能 返回此抽象路径名指定的分区上可用于此虚拟机的字节数。
 *             若有可能，此方法将检查写权限和其他操作系统限制，
 *             因此与 getFreeSpace() 相比，此方法能更准确地估计可实际写入的新数据数。
 *             分区上的可用字节数；如果抽象路径名没有指定分区，则返回 0L。
 *             在此信息不可用的系统上，此方法等效于调用 getFreeSpace()。
 * @ return Long
 */</span>
<span style="color: #0000ff">public</span> <span style="color: #0000ff">long</span> getUsableSpace()</pre>
<p>测试类：</p>
<pre><span style="color: #0000ff">package</span> com.io;

<span style="color: #0000ff">import</span> java.io.File;

<span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> Test {

	<span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> main(String[] arges){
		File fi=<span style="color: #0000ff">new</span> File(&quot;<span style="color: #8b0000">D:\\电影</span>&quot;);

		System.out.println(&quot;<span style="color: #8b0000">总分区大小=</span>&quot;+fi.getTotalSpace());
		System.out.println(&quot;<span style="color: #8b0000">剩余分区大小=</span>&quot;+fi.getFreeSpace());
		System.out.println(&quot;<span style="color: #8b0000">剩余分区大小=</span>&quot;+fi.getUsableSpace());

	}
}</pre>


<div class="posturl"><span><span class="r1"></span><span class="r2"></span><span class="r3"></span><span class="r4"></span></span><div class="posturl-content"><p>暂无关联文章！</p></div><span><span class="r4"></span><span class="r3"></span><span class="r2"></span><span class="r1"></span></span></div>]]></content:encoded>
			<wfw:commentRss>http://imleeo.com/java/jdk16-computing-storage-space-information.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hibernate常见异常与分析处理（收集整理）</title>
		<link>http://imleeo.com/java/hibernate/hibernate-exception-and-treatment.html</link>
		<comments>http://imleeo.com/java/hibernate/hibernate-exception-and-treatment.html#comments</comments>
		<pubDate>Thu, 07 Jan 2010 05:04:00 +0000</pubDate>
		<dc:creator>IT北瓜</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[异常处理]]></category>
		<category><![CDATA[异常解决]]></category>

		<guid isPermaLink="false">http://imleeo.com/java/hibernate/hibernate-exception-and-treatment.html</guid>
		<description><![CDATA[<p><strong><font color="#400000">1.&#160;&#160;&#160; net.sf.hibernate.MappingException</font></strong></p>

<p><em>分析处理：</em></p>

<p>当出现net.sf.hibernate.MappingException: Error reading resource:…异常时一般是因为映射文件出现错误。
  <br />当出现net.sf.hibernate.MappingException: Resource: … not found是因为XML配置文件没找到所致，有可能是放置目录不正确，或者没将其加入hibernate.cfg.xml中。</p>

<p><strong><font color="#400000">2.&#160;&#160;&#160; net.sf.hibernate.PropertyNotFoundException</font></strong></p>

<p><em>分析处理：</em></p>

<p>当出现net.sf.hibernate.PropertyNotFoundException: Could not find a setter for property name in class …时，原因一般是因为XML映射文件中的属性与对应的Java类中的属性的getter或setter方法不一致。</p>

<p><strong><font color="#400000">3.&#160;&#160;&#160; org.hibernate.id.IdentifierGenerationException</font></strong></p>

<p><em>分析处理：</em></p>

<p>当出现org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save():异常时，一般是因为&#60;id&#62;元素配置不正确，&#60;id&#62;元素缺少其子元素&#60;generator&#62;&#60;/generator&#62;的配置引起。</p>

<p>&#60;id&#62;元素映射了相应数据库表的主键字段，对其子元素&#60;generator class=&#34;&#34;&#62;,其中class的取值可以为increment、identity、sequence、hilo、nativ-e……等，更多的可参考hibernate参考文档，一般取其值为native。</p>

<p><strong><font color="#400000">4.&#160;&#160;&#160; a different object with the same identifier value was already associated with the session</font></strong></p>

<p><em>分析处理：</em></p>

<p>当出现a different object with the same identifier value was already associated with the session时，一般是因为在hibernate中同一个session里面有了两个相同标识但是是不同实体。</p>

<p>有如下几种解决方案：
  <br />（1）使用session.clean()，如果在clean操作后面又进行了saveOrUpdate(object)等改变数据状态的操作，有可能会报出&#34;Found two representations of same collection&#34;异常。

  <br />（2）使用session.refresh(object)，当object不是数据库中已有数据的对象的时候，不能使用session.refresh(object)因为该方法是从hibernate的session中去重新取object，如果session中没有这个对象，则会报错所以当你使用saveOrUpdate(object)之前还需要判断一下。

  <br />（3）session.merge(object)，Hibernate里面自带的方法，推荐使用。</p>

<div class="posturl"><span><span class="r1"></span><span class="r2"></span><span class="r3"></span><span class="r4"></span></span><div class="posturl-content">
关联文章导读：<ol><li><a href='http://imleeo.com/java/org-hibernate-sessionexception-session-is-closed.html' rel='bookmark' title='Permanent Link: org.hibernate.SessionException: Session is closed! 异常解决方法'>org.hibernate.SessionException: Session is closed! 异常解决方法</a> <small>刚刚在程序中出现了org.hibernate.SessionException: Session is closed! 这个异常，查看Firebug控制台，还能发现有这样的异常信息org.springframework.transaction.TransactionSystemException: Could not commit Hibernate transaction;记录一下解决方法。...</small></li>
<li><a href='http://imleeo.com/java/hibernate3-3-2-spring2-5-6-struts2-1-6.html' rel='bookmark' title='Permanent Link: Hibernate3.3.2+Spring2.5.6+Struts2.1.6整合异常解决&mdash;&mdash;不断更新'>Hibernate3.3.2+Spring2.5.6+Struts2.1.6整合异常解决&mdash;&mdash;不断更新</a> <small>1、org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'sessionFactory' is defined 异常说明：sessionFactory bean未定义 异常原因：applicationContext.xml配置文件中使用其他名字sessionFactory...</small></li>
</ol></div><span><span class="r4"></span><span class="r3"></span><span class="r2"></span><span class="r1"></span></span></div>]]></description>
			<content:encoded><![CDATA[<p><strong><font color="#400000">1.&#160;&#160;&#160; net.sf.hibernate.MappingException</font></strong></p>
<p><em>分析处理：</em></p>
<p>当出现net.sf.hibernate.MappingException: Error reading resource:…异常时一般是因为映射文件出现错误。    <br />当出现net.sf.hibernate.MappingException: Resource: … not found是因为XML配置文件没找到所致，有可能是放置目录不正确，或者没将其加入hibernate.cfg.xml中。</p>
<p><strong><font color="#400000">2.&#160;&#160;&#160; net.sf.hibernate.PropertyNotFoundException</font></strong></p>
<p><em>分析处理：</em></p>
<p>当出现net.sf.hibernate.PropertyNotFoundException: Could not find a setter for property name in class …时，原因一般是因为XML映射文件中的属性与对应的Java类中的属性的getter或setter方法不一致。</p>
<p><strong><font color="#400000">3.&#160;&#160;&#160; org.hibernate.id.IdentifierGenerationException</font></strong></p>
<p><em>分析处理：</em></p>
<p>当出现org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save():异常时，一般是因为&lt;id&gt;元素配置不正确，&lt;id&gt;元素缺少其子元素&lt;generator&gt;&lt;/generator&gt;的配置引起。</p>
<p>&lt;id&gt;元素映射了相应数据库表的主键字段，对其子元素&lt;generator class=&quot;&quot;&gt;,其中class的取值可以为increment、identity、sequence、hilo、nativ-e……等，更多的可参考hibernate参考文档，一般取其值为native。</p>
<p><strong><font color="#400000">4.&#160;&#160;&#160; a different object with the same identifier value was already associated with the session</font></strong></p>
<p><em>分析处理：</em></p>
<p>当出现a different object with the same identifier value was already associated with the session时，一般是因为在hibernate中同一个session里面有了两个相同标识但是是不同实体。</p>
<p>有如下几种解决方案：    <br />（1）使用session.clean()，如果在clean操作后面又进行了saveOrUpdate(object)等改变数据状态的操作，有可能会报出&quot;Found two representations of same collection&quot;异常。     <br />（2）使用session.refresh(object)，当object不是数据库中已有数据的对象的时候，不能使用session.refresh(object)因为该方法是从hibernate的session中去重新取object，如果session中没有这个对象，则会报错所以当你使用saveOrUpdate(object)之前还需要判断一下。     <br />（3）session.merge(object)，Hibernate里面自带的方法，推荐使用。</p>
<p><strong><font color="#400000">5.&#160;&#160;&#160; SQL Grammer Exception,Could not execute JDBC batch update</font></strong></p>
<p><em>分析处理：</em></p>
<p>当出现SQL Grammer Exception,Could not execute JDBC batch upd-ate异常时，一般是由如下问题引起：    <br />（1）SQL语句中存在语法错误或是传入的数据有误;     <br />（2）数据库的配置不合法，或者说是配置有误。较容易出现的有数据表的映射文件     <br />(,hbm.xml文件)配置有误；Hibernate.cfg.xml文件配置有误;     <br />（3） 当前的数据库用户权限不足，不能操作数据库。以是以Oracle 数据库为例，这种情况下在错误提示中会显示java.sql.BatchUpdateException: ORA-01031: ins-ufficient privileges这样的信息。</p>
<p><strong><font color="#400000">6．&#160; Caused by: org.dom4j.DocumentException: Invalid byte 2 of2-byte UTF-8 sequence. Nested exception: Invalid byte 2 of2-byte UTF-8 sequence.</font></strong> </p>
<p><em>分析处理：</em></p>
<p>如果出现这行错误说明你的XML配置文件有不规范的字符，检查下。</p>
<p><strong><font color="#400000">7．&#160; hibernate/Hello_Bean.hbm.xml</font></strong></p>
<p><em>分析处理：</em></p>
<p>如果出现这行错误说明你的hibernate的XML配置文件有错</p>
<p><strong><font color="#400000">8．&#160; net.sf.hibernate.HibernateException: JDBC Driver class not f-ound: org.gjt.mm.mysql.Driver：</font></strong></p>
<p><em>分析处理：</em></p>
<p>没有找到数据库驱动程序</p>
<p><strong><font color="#400000">9．&#160; The database return no natively generate indentity value</font></strong></p>
<p><em>分析处理：</em></p>
<p>主键没有添加增量</p>
<p><strong><font color="#400000">10．&#160; net.sf.hibernate.PropertyValueException:not-null property ref-erences a null or transient</font></strong></p>
<p><em>分析处理：</em></p>
<p>value:com.pack.Rordercontent.异常产生原因：Rordercontent对象的非空属性Rordertable引用了一个临时对象。</p>
<p><strong><font color="#400000">11．&#160; net.sf.hibernate.TransientobjectException:objiect references an unsaved transient instance – save the transient instance before flushing: com.pack.Rordertable</font></strong></p>
<p><em>分析处理：</em></p>
<p>持久化对象的某个属性引用了一个临时对象Rordertable</p>
<p><strong><font color="#400000">12.&#160;&#160; net.sf.hibernate.PropertyNotFoundException</font></strong></p>
<p><em>分析处理：</em></p>
<p>当出现net.sf.hibernate.PropertyNotFoundException: Could not find a setter for pr-operty name in class …时，原因一般是因为XML映射文件中的属性与对应的Java类中的属性的getXXX或setXXX方法不一致。</p>
<p><strong><font color="#400000">13．&#160; tce of my chapter.pack6.Rordertable altered from 1 to 100:</font></strong></p>
<p><em>分析处理：</em></p>
<p>企图修改处于持久化状态的对象的OID。修改了处于持久化对象的OID在Session清理缓存时就会抛出此异常（对象处于持久化状态时。不允许程序随意修改它的OID。注意：无论java对象处于临时状态、持久化状态还是游离状态，应用程序都不应该修改它的OID。因为，比较安全的做法时，在定义持久化类时，吧他的setId()方法设为private类型，禁止外部程序访问该方法）。</p>
<p><strong><font color="#400000">14．&#160; net.sf.hibernate.MappingException: Unknown entity class:未知的实体类</font></strong></p>
<p><em>分析处理：</em></p>
<p>Hibernate把持久化类的属性分为2种：值（Value）类型和实体（Entity）类型。值类型和实体类型最重要的区别是前者没有OID，不能被单独持久化，它的声明周期依赖于所属的持久化类的对象的声明周期，组件类型就是一种值类型；而实体类型有OID，可以被单独持久化。</p>
<p><strong><font color="#400000">15．&#160;&#160; net.sf.hibernate.QueryException: undefined alias</font></strong></p>
<p><em>分析处理：</em></p>
<p>我猜想出项这种错误的原因有很多种：可能是大小写问题，还有其他很多种可能</p>
<p><strong><font color="#400000">16．&#160;&#160; net.sf.hibernate.NonUniqueResultException:</font></strong></p>
<p><em>分析处理：</em></p>
<p>检索单个对象时，查询结果包含多个对象，但没有调用setMaxResult（1）方法</p>
<p><strong><font color="#400000">17．&#160; net.sf.hibernate.QueryException: Not all named paramete-rrs have been set</font></strong></p>
<p><em>分析处理：</em></p>
<p>使用setProperties（）方法：用于把命名参数与一个对象的属性值绑定时，对象中没有匹配的名字相同的属性。</p>


<div class="posturl"><span><span class="r1"></span><span class="r2"></span><span class="r3"></span><span class="r4"></span></span><div class="posturl-content"><p>关联文章导读：<ol><li><a href='http://imleeo.com/java/org-hibernate-sessionexception-session-is-closed.html' rel='bookmark' title='Permanent Link: org.hibernate.SessionException: Session is closed! 异常解决方法'>org.hibernate.SessionException: Session is closed! 异常解决方法</a> <small>刚刚在程序中出现了org.hibernate.SessionException: Session is closed! 这个异常，查看Firebug控制台，还能发现有这样的异常信息org.springframework.transaction.TransactionSystemException: Could not commit Hibernate transaction;记录一下解决方法。...</small></li>
<li><a href='http://imleeo.com/java/hibernate3-3-2-spring2-5-6-struts2-1-6.html' rel='bookmark' title='Permanent Link: Hibernate3.3.2+Spring2.5.6+Struts2.1.6整合异常解决&mdash;&mdash;不断更新'>Hibernate3.3.2+Spring2.5.6+Struts2.1.6整合异常解决&mdash;&mdash;不断更新</a> <small>1、org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'sessionFactory' is defined 异常说明：sessionFactory bean未定义 异常原因：applicationContext.xml配置文件中使用其他名字sessionFactory...</small></li>
</ol></p></div><span><span class="r4"></span><span class="r3"></span><span class="r2"></span><span class="r1"></span></span></div>]]></content:encoded>
			<wfw:commentRss>http://imleeo.com/java/hibernate/hibernate-exception-and-treatment.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove &#8216;readOnly&#8217; marker from transaction definition.</title>
		<link>http://imleeo.com/java/org-springframework-dao-invaliddataaccessapiusageexception-write-operations-are-not-allowed-in-read-only-mode-flushmode-nevermanual-turn-your-session-into-flushmode-commitauto-or-remove-readon.html</link>
		<comments>http://imleeo.com/java/org-springframework-dao-invaliddataaccessapiusageexception-write-operations-are-not-allowed-in-read-only-mode-flushmode-nevermanual-turn-your-session-into-flushmode-commitauto-or-remove-readon.html#comments</comments>
		<pubDate>Thu, 31 Dec 2009 02:53:26 +0000</pubDate>
		<dc:creator>IT北瓜</dc:creator>
				<category><![CDATA[Hibernate]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Spring]]></category>

		<guid isPermaLink="false">http://imleeo.com/?p=95</guid>
		<description><![CDATA[昨天遇到这个异常“org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.”大概意思是说试图在只读模式下向数据库插入内容。由于出现这个异常的时候刚好要下班了，所以今天才把这个异常解决了，在这里记录一下。

由于博客上没有装代码高亮插件，都是用Windows Live Writer写文章，现在的这个电脑上没安装Windows Live Writer，所以一下内容引用代码的部分就没办法高亮显示了，不过涉及的代码不多，讲究着吧~~~

问题分析：上面的异常总的来说是由于lazy机制引起的，我们知道懒加载问题一般都是通过配置OpenSessionInViewFilter来解决。原先web.xml中配置OpenSessionInViewFilter部分的代码如下：
<blockquote>&#60;filter&#62;
&#60;description&#62;处理Hibernate的懒加载问题&#60;/description&#62;
&#60;filter-name&#62;hibernateFilter&#60;/filter-name&#62;
&#60;filter-class&#62;
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter
&#60;/filter-class&#62;
&#60;/filter&#62;
&#60;filter-mapping&#62;
&#60;filter-name&#62;hibernateFilter&#60;/filter-name&#62;
&#60;url-pattern&#62;/*&#60;/url-pattern&#62;
&#60;/filter-mapping&#62;</blockquote>
解决方法：其实异常信息中已经很清楚的告诉我们解决方法了，异常中说到需要把session改为FlushMode.COMMIT（或者FlushMode.AUTO），抑或去掉Spring事务配置中的readOnly。这里Leeo选择将session改为FlushMode.COMMIT的方式。具体做法是自己写一个类继承org.springframework.orm.hibernate3.support.OpenSessionInViewFilter，代码如下：

<div class="posturl"><span><span class="r1"></span><span class="r2"></span><span class="r3"></span><span class="r4"></span></span><div class="posturl-content">
暂无关联文章！</div><span><span class="r4"></span><span class="r3"></span><span class="r2"></span><span class="r1"></span></span></div>]]></description>
			<content:encoded><![CDATA[<p>昨天遇到这个异常“org.springframework.dao.InvalidDataAccessApiUsageException: Write operations are not allowed in read-only mode (FlushMode.NEVER/MANUAL): Turn your Session into FlushMode.COMMIT/AUTO or remove &#8216;readOnly&#8217; marker from transaction definition.”大概意思是说试图在只读模式下向数据库插入内容。由于出现这个异常的时候刚好要下班了，所以今天才把这个异常解决了，在这里记录一下。</p>
<p>由于博客上没有装代码高亮插件，都是用Windows Live Writer写文章，现在的这个电脑上没安装Windows Live Writer，所以一下内容引用代码的部分就没办法高亮显示了，不过涉及的代码不多，讲究着吧~~~</p>
<p>问题分析：上面的异常总的来说是由于lazy机制引起的，我们知道懒加载问题一般都是通过配置OpenSessionInViewFilter来解决。原先web.xml中配置OpenSessionInViewFilter部分的代码如下：</p>
<blockquote><p>&lt;filter&gt;<br />
&lt;description&gt;处理Hibernate的懒加载问题&lt;/description&gt;<br />
&lt;filter-name&gt;hibernateFilter&lt;/filter-name&gt;<br />
&lt;filter-class&gt;<br />
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter<br />
&lt;/filter-class&gt;<br />
&lt;/filter&gt;<br />
&lt;filter-mapping&gt;<br />
&lt;filter-name&gt;hibernateFilter&lt;/filter-name&gt;<br />
&lt;url-pattern&gt;/*&lt;/url-pattern&gt;<br />
&lt;/filter-mapping&gt;</p></blockquote>
<p>解决方法：其实异常信息中已经很清楚的告诉我们解决方法了，异常中说到需要把session改为FlushMode.COMMIT（或者FlushMode.AUTO），抑或去掉Spring事务配置中的readOnly。这里Leeo选择将session改为FlushMode.COMMIT的方式。具体做法是自己写一个类继承org.springframework.orm.hibernate3.support.OpenSessionInViewFilter，代码如下：</p>
<blockquote><p>import org.hibernate.FlushMode;<br />
import org.hibernate.Session;<br />
import org.hibernate.SessionFactory;<br />
import org.springframework.dao.DataAccessResourceFailureException;<br />
import org.springframework.orm.hibernate3.SessionFactoryUtils;</p>
<p>public class OpenSessionInViewFilter extends<br />
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter {<br />
/**<br />
* we do a different flushmode than in the codebase<br />
* here<br />
*/<br />
protected Session getSession(SessionFactory sessionFactory) throws DataAccessResourceFailureException {<br />
Session session = SessionFactoryUtils.getSession(sessionFactory, true);<br />
session.setFlushMode(FlushMode.COMMIT);<br />
return session;<br />
}<br />
/**<br />
* we do an explicit flush here just in case<br />
* we do not have an automated flush<br />
*/<br />
protected void closeSession(Session session, SessionFactory factory) {<br />
session.flush();<br />
super.closeSession(session, factory);<br />
}</p>
<p>}</p></blockquote>
<p>然后只要把原先web.xml中的</p>
<blockquote><p>&lt;filter-class&gt;<br />
org.springframework.orm.hibernate3.support.OpenSessionInViewFilter<br />
&lt;/filter-class&gt;</p></blockquote>
<p>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter改为刚刚写的类的包路径就可以了，即：</p>
<blockquote><p>&lt;filter-class&gt;<br />
com.frscs.util.OpenSessionInViewFilter<br />
&lt;/filter-class&gt;</p></blockquote>


<div class="posturl"><span><span class="r1"></span><span class="r2"></span><span class="r3"></span><span class="r4"></span></span><div class="posturl-content"><p>暂无关联文章！</p></div><span><span class="r4"></span><span class="r3"></span><span class="r2"></span><span class="r1"></span></span></div>]]></content:encoded>
			<wfw:commentRss>http://imleeo.com/java/org-springframework-dao-invaliddataaccessapiusageexception-write-operations-are-not-allowed-in-read-only-mode-flushmode-nevermanual-turn-your-session-into-flushmode-commitauto-or-remove-readon.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>struts2 Action中获取request, response对象的方法</title>
		<link>http://imleeo.com/java/struts2-request-response.html</link>
		<comments>http://imleeo.com/java/struts2-request-response.html#comments</comments>
		<pubDate>Tue, 29 Dec 2009 09:56:10 +0000</pubDate>
		<dc:creator>IT北瓜</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Struts2]]></category>

		<guid isPermaLink="false">http://imleeo.com/?p=94</guid>
		<description><![CDATA[<span><span>struts2 Action中获取request, response对象的方法</span></span>
<blockquote><span><span><span><span>ActionContext ctx = ActionContext.getContext(); </span></span></span></span>

<span><span><span>HttpServletRequest request = (HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST); </span></span></span>

<span><span><span>HttpServletResponse response = (HttpServletResponse)ctx.get(ServletActionContext.HTTP_RESPONSE);</span></span></span></blockquote>

<div class="posturl"><span><span class="r1"></span><span class="r2"></span><span class="r3"></span><span class="r4"></span></span><div class="posturl-content">
暂无关联文章！</div><span><span class="r4"></span><span class="r3"></span><span class="r2"></span><span class="r1"></span></span></div>]]></description>
			<content:encoded><![CDATA[<p><span><span>struts2 Action中获取request, response对象的方法</span></span></p>
<blockquote><p><span><span><span><span>ActionContext ctx = ActionContext.getContext(); </span></span></span></span></p>
<p><span><span><span>HttpServletRequest request = (HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST); </span></span></span></p>
<p><span><span><span>HttpServletResponse response = (HttpServletResponse)ctx.get(ServletActionContext.HTTP_RESPONSE);</span></span></span></p></blockquote>


<div class="posturl"><span><span class="r1"></span><span class="r2"></span><span class="r3"></span><span class="r4"></span></span><div class="posturl-content"><p>暂无关联文章！</p></div><span><span class="r4"></span><span class="r3"></span><span class="r2"></span><span class="r1"></span></span></div>]]></content:encoded>
			<wfw:commentRss>http://imleeo.com/java/struts2-request-response.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>java中从含反斜杠路径截取文件名的方法</title>
		<link>http://imleeo.com/java/interception-of-the-file-name-in-java.html</link>
		<comments>http://imleeo.com/java/interception-of-the-file-name-in-java.html#comments</comments>
		<pubDate>Sat, 19 Dec 2009 07:24:00 +0000</pubDate>
		<dc:creator>IT北瓜</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[反斜杠]]></category>
		<category><![CDATA[截取文件名]]></category>

		<guid isPermaLink="false">http://imleeo.com/java/interception-of-the-file-name-in-java.html</guid>
		<description><![CDATA[<p>&#160;&#160;&#160;&#160;&#160; 例如：获取到的文件路径为C:\Documents and Settings\Leeo\My Documents\logo.gif</p>

<p>&#160;&#160;&#160;&#160;&#160; 现在想要取得图片的名称logo.gif，我们知道反斜杠“\”是转义字符，所以不能直接</p>

<pre>String temp[] = filePath.split(&#34;<span style="color: #8b0000">\&#34;);//filePath的值就是上面的文件路径</span></pre>

<p>&#160;&#160;&#160;&#160;&#160; 来分割文件路径，而应该这样写</p>

<pre><span style="color: #008000">/*
 *java中\\表示一个\，而regex中\\也表示\，
 *所以当\\\\解析成regex的时候为\\
 **/</span>
String temp[] = filePath.split(&#34;<span style="color: #8b0000">\\\\</span>&#34;);</pre>

<div class="posturl"><span><span class="r1"></span><span class="r2"></span><span class="r3"></span><span class="r4"></span></span><div class="posturl-content">
关联文章导读：<ol><li><a href='http://imleeo.com/java/struts2-flashfileupload-fileupload-and-generate-thumbnails-and-add-watermarks.html' rel='bookmark' title='Permanent Link: Struts2+FlashFileUpload文件上传并生成缩略图和添加水印'>Struts2+FlashFileUpload文件上传并生成缩略图和添加水印</a> <small>&#160;&#160;&#160;&#160;&#160; 以前用过SWFUpload，功能确实很强大。javaeye上有人发布了这样一篇文章step-by-step多文件WEB批量上传(swfupload)的完美解决方案有兴趣的朋友可以看一下。Leeo觉得SWFUpload稍微不足的就是界面的定制，总感觉自己定制出来的界面有点难登大雅之堂。下面Leeo为大家介绍一下，如何使用FlashFileUpload这个Flash组件来实现多文件上传，并且通过java程序自动生成缩略图和添加水印，FlashFileUpload定制出来的界面还是挺漂亮的（PS：这个界面是Leeo从UUShare上弄下来的，^_^），先来Show一张效果图： ...</small></li>
</ol></div><span><span class="r4"></span><span class="r3"></span><span class="r2"></span><span class="r1"></span></span></div>]]></description>
			<content:encoded><![CDATA[<p>&#160;&#160;&#160;&#160;&#160; 例如：获取到的文件路径为C:\Documents and Settings\Leeo\My Documents\logo.gif</p>
<p>&#160;&#160;&#160;&#160;&#160; 现在想要取得图片的名称logo.gif，我们知道反斜杠“\”是转义字符，所以不能直接</p>
<pre>String temp[] = filePath.split(&quot;<span style="color: #8b0000">\&quot;);//filePath的值就是上面的文件路径</span></pre>
<p>&#160;&#160;&#160;&#160;&#160; 来分割文件路径，而应该这样写</p>
<pre><span style="color: #008000">/*
 *java中\\表示一个\，而regex中\\也表示\，
 *所以当\\\\解析成regex的时候为\\
 **/</span>
String temp[] = filePath.split(&quot;<span style="color: #8b0000">\\\\</span>&quot;);</pre>
<p>&#160;&#160;&#160;&#160;&#160; 在Linux系统中</p>
<pre>System.getProperty(&quot;<span style="color: #8b0000">file.separator</span>&quot;, &quot;<span style="color: #8b0000">\\</span>&quot;)</pre>
<p>&#160;&#160;&#160;&#160;&#160; 输出为“/”，而在Windows系统中输出为“\”，所以要兼容两者可以这么写</p>
<pre>String temp[] = filePath.replaceAll(&quot;<span style="color: #8b0000">\\\\</span>&quot;,&quot;<span style="color: #8b0000">/</span>&quot;).split(&quot;<span style="color: #8b0000">/</span>&quot;);</pre>
<p>&#160;&#160;&#160;&#160;&#160; 获取文件名称的完整代码如下：</p>
<pre>String temp[] = filePath.replaceAll(&quot;<span style="color: #8b0000">\\\\</span>&quot;,&quot;<span style="color: #8b0000">/</span>&quot;).split(&quot;<span style="color: #8b0000">/</span>&quot;);
String fileName = &quot;<span style="color: #8b0000"></span>&quot;
<span style="color: #0000ff">if</span>(temp.length &gt; 1){
    fileName = temp[temp.length - 1];
}</pre>


<div class="posturl"><span><span class="r1"></span><span class="r2"></span><span class="r3"></span><span class="r4"></span></span><div class="posturl-content"><p>关联文章导读：<ol><li><a href='http://imleeo.com/java/struts2-flashfileupload-fileupload-and-generate-thumbnails-and-add-watermarks.html' rel='bookmark' title='Permanent Link: Struts2+FlashFileUpload文件上传并生成缩略图和添加水印'>Struts2+FlashFileUpload文件上传并生成缩略图和添加水印</a> <small>&#160;&#160;&#160;&#160;&#160; 以前用过SWFUpload，功能确实很强大。javaeye上有人发布了这样一篇文章step-by-step多文件WEB批量上传(swfupload)的完美解决方案有兴趣的朋友可以看一下。Leeo觉得SWFUpload稍微不足的就是界面的定制，总感觉自己定制出来的界面有点难登大雅之堂。下面Leeo为大家介绍一下，如何使用FlashFileUpload这个Flash组件来实现多文件上传，并且通过java程序自动生成缩略图和添加水印，FlashFileUpload定制出来的界面还是挺漂亮的（PS：这个界面是Leeo从UUShare上弄下来的，^_^），先来Show一张效果图： ...</small></li>
</ol></p></div><span><span class="r4"></span><span class="r3"></span><span class="r2"></span><span class="r1"></span></span></div>]]></content:encoded>
			<wfw:commentRss>http://imleeo.com/java/interception-of-the-file-name-in-java.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Struts2 jQuery Plugin</title>
		<link>http://imleeo.com/jquery/struts2-jquery-plugin.html</link>
		<comments>http://imleeo.com/jquery/struts2-jquery-plugin.html#comments</comments>
		<pubDate>Fri, 18 Dec 2009 05:10:40 +0000</pubDate>
		<dc:creator>IT北瓜</dc:creator>
				<category><![CDATA[Struts2]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[插件推荐]]></category>

		<guid isPermaLink="false">http://imleeo.com/?p=91</guid>
		<description><![CDATA[&#160;&#160;&#160;&#160;Leeo本人一直很喜欢<a title="jQuery" href="http://jquery.com" target="_blank">jQuery</a>这个优秀的js框架。刚刚在<a title="Google" href="http://www.google.cn" target="_blank">Google</a>搜索jqGrid结合Struts2使用的时候，无意中发现这这么一个插件“<a title="Struts2 jQuery Plugin" href="http://code.google.com/p/struts2-jquery/" target="_blank">Struts2 jQuery Plugin</a>”，貌似很不错，以后有空要研究研究，这里暂时做个记录，方便日后查阅。

&#160;&#160;&#160;&#160;作者博客：<a title="作者博客" href="http://www.jgeppert.com/" target="_blank">http://www.jgeppert.com/</a>

&#160;&#160;&#160;&#160;项目地址：<a title="项目地址" href="http://code.google.com/p/struts2-jquery/" target="_blank">http://code.google.com/p/struts2-jquery/</a>

&#160;&#160;&#160;&#160;实例地址：<a title="实例地址" href="http://www.weinfreund.de/struts2-jquery-showcase/index.action" target="_blank">http://www.weinfreund.de/struts2-jquery-showcase/index.action</a>

<div class="posturl"><span><span class="r1"></span><span class="r2"></span><span class="r3"></span><span class="r4"></span></span><div class="posturl-content">
暂无关联文章！</div><span><span class="r4"></span><span class="r3"></span><span class="r2"></span><span class="r1"></span></span></div>]]></description>
			<content:encoded><![CDATA[<p>Leeo本人一直很喜欢<a title="jQuery" href="http://jquery.com" target="_blank">jQuery</a>这个优秀的js框架。刚刚在<a title="Google" href="http://www.google.cn" target="_blank">Google</a>搜索jqGrid结合Struts2使用的时候，无意中发现这这么一个插件“<a title="Struts2 jQuery Plugin" href="http://code.google.com/p/struts2-jquery/" target="_blank">Struts2 jQuery Plugin</a>”，貌似很不错，以后有空要研究研究，这里暂时做个记录，方便日后查阅。</p>
<p>作者博客：<a title="作者博客" href="http://www.jgeppert.com/" target="_blank">http://www.jgeppert.com/</a></p>
<p>项目地址：<a title="项目地址" href="http://code.google.com/p/struts2-jquery/" target="_blank">http://code.google.com/p/struts2-jquery/</a></p>
<p>实例地址：<a title="实例地址" href="http://www.weinfreund.de/struts2-jquery-showcase/index.action" target="_blank">http://www.weinfreund.de/struts2-jquery-showcase/index.action</a></p>


<div class="posturl"><span><span class="r1"></span><span class="r2"></span><span class="r3"></span><span class="r4"></span></span><div class="posturl-content"><p>暂无关联文章！</p></div><span><span class="r4"></span><span class="r3"></span><span class="r2"></span><span class="r1"></span></span></div>]]></content:encoded>
			<wfw:commentRss>http://imleeo.com/jquery/struts2-jquery-plugin.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Struts2+FlashFileUpload文件上传并生成缩略图和添加水印</title>
		<link>http://imleeo.com/java/struts2-flashfileupload-fileupload-and-generate-thumbnails-and-add-watermarks.html</link>
		<comments>http://imleeo.com/java/struts2-flashfileupload-fileupload-and-generate-thumbnails-and-add-watermarks.html#comments</comments>
		<pubDate>Fri, 06 Nov 2009 07:48:00 +0000</pubDate>
		<dc:creator>IT北瓜</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Struts2]]></category>
		<category><![CDATA[flashfileupload]]></category>
		<category><![CDATA[文件上传]]></category>
		<category><![CDATA[水印]]></category>
		<category><![CDATA[缩略图]]></category>

		<guid isPermaLink="false">http://imleeo.com/java/struts2-flashfileupload-fileupload-and-generate-thumbnails-and-add-watermarks.html</guid>
		<description><![CDATA[<p>&#160;&#160;&#160;&#160;&#160; 以前用过<a href="http://www.swfupload.org/" target="_blank">SWFUpload</a>，功能确实很强大。javaeye上有人发布了这样一篇文章<a href="http://stephen830.javaeye.com/blog/255583" target="_blank">step-by-step多文件WEB批量上传(swfupload)的完美解决方案</a>有兴趣的朋友可以看一下。Leeo觉得SWFUpload稍微不足的就是界面的定制，总感觉自己定制出来的界面有点难登大雅之堂。下面Leeo为大家介绍一下，如何使用FlashFileUpload这个Flash组件来实现多文件上传，并且通过java程序自动生成缩略图和添加水印，FlashFileUpload定制出来的界面还是挺漂亮的（PS：这个界面是Leeo从UUShare上弄下来的，^_^），先来Show一张效果图：</p>  <div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:8747F07C-CDE8-481f-B0DF-C6CFD074BF67:3687f416-b78a-4de5-91c1-701f7764e2f2" class="wlWriterEditableSmartContent"><a href="http://imleeo.com/wp-content/uploads/Struts2FlashFileUpload_F15B/flashUpload8x6.jpg"  class="highslide-image" onclick="return hs.expand(this);" title="" rel="thumbnail"><img border="0" src="http://imleeo.com/wp-content/uploads/Struts2FlashFileUpload_F15B/flashUpload.png" width="335" height="290" /></a></div>

<div class="posturl"><span><span class="r1"></span><span class="r2"></span><span class="r3"></span><span class="r4"></span></span><div class="posturl-content">
关联文章导读：<ol><li><a href='http://imleeo.com/jquery/different-results-in-firefox-an-ie-of-fileupload-using-struts2-and-json-and-jquery.html' rel='bookmark' title='Permanent Link: Struts2+json+jQuery上传文件在Firefox和IE下返回结果截然不同'>Struts2+json+jQuery上传文件在Firefox和IE下返回结果截然不同</a> <small>&#160;&#160;&#160;&#160;&#160; 在Struts2中利用json格式返回数据，struts.xml文件配置如下： &lt;package name=&quot;struts2json&quot; extends=&quot;json-default&quot;&gt; &lt;!-- jsonfilm --&gt; &lt;action name=&quot;jsonFilm&quot; class=&quot;film&quot;&gt; &lt;result type=&quot;json&quot;&gt; &lt;param name=&quot;excludeProperties&quot;&gt;.*hibernateLazyInitializer,pageBean,film&lt;/param&gt; &lt;/result&gt; &lt;/action&gt; &lt;/package&gt; 而表单利用jquery.form.js插件提供的ajax方式来提交，javascript代码如下：...</small></li>
<li><a href='http://imleeo.com/java/hibernate3-3-2-spring2-5-6-struts2-1-6.html' rel='bookmark' title='Permanent Link: Hibernate3.3.2+Spring2.5.6+Struts2.1.6整合异常解决&mdash;&mdash;不断更新'>Hibernate3.3.2+Spring2.5.6+Struts2.1.6整合异常解决&mdash;&mdash;不断更新</a> <small>1、org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'sessionFactory' is defined 异常说明：sessionFactory bean未定义 异常原因：applicationContext.xml配置文件中使用其他名字sessionFactory...</small></li>
<li><a href='http://imleeo.com/java/org-hibernate-sessionexception-session-is-closed.html' rel='bookmark' title='Permanent Link: org.hibernate.SessionException: Session is closed! 异常解决方法'>org.hibernate.SessionException: Session is closed! 异常解决方法</a> <small>刚刚在程序中出现了org.hibernate.SessionException: Session is closed! 这个异常，查看Firebug控制台，还能发现有这样的异常信息org.springframework.transaction.TransactionSystemException: Could not commit Hibernate transaction;记录一下解决方法。...</small></li>
</ol></div><span><span class="r4"></span><span class="r3"></span><span class="r2"></span><span class="r1"></span></span></div>]]></description>
			<content:encoded><![CDATA[<p>&#160;&#160;&#160;&#160;&#160; 以前用过<a href="http://www.swfupload.org/" target="_blank">SWFUpload</a>，功能确实很强大。javaeye上有人发布了这样一篇文章<a href="http://stephen830.javaeye.com/blog/255583" target="_blank">step-by-step多文件WEB批量上传(swfupload)的完美解决方案</a>有兴趣的朋友可以看一下。Leeo觉得SWFUpload稍微不足的就是界面的定制，总感觉自己定制出来的界面有点难登大雅之堂。下面Leeo为大家介绍一下，如何使用FlashFileUpload这个Flash组件来实现多文件上传，并且通过java程序自动生成缩略图和添加水印，FlashFileUpload定制出来的界面还是挺漂亮的（PS：这个界面是Leeo从UUShare上弄下来的，^_^），先来Show一张效果图：</p>
<div style="padding-bottom: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; float: none; padding-top: 0px" id="scid:8747F07C-CDE8-481f-B0DF-C6CFD074BF67:3687f416-b78a-4de5-91c1-701f7764e2f2" class="wlWriterEditableSmartContent"><a href="http://imleeo.com/wp-content/uploads/Struts2FlashFileUpload_F15B/flashUpload8x6.jpg" class="highslide-image" onclick="return hs.expand(this);" title="" rel="thumbnail"><img border="0" src="http://imleeo.com/wp-content/uploads/Struts2FlashFileUpload_F15B/flashUpload.png" width="335" height="290" /></a></div>
<p>&#160;&#160;&#160;&#160;&#160; 从上面的图片从可以看出中间有个水印（PS：本博客的Logo），这并不是用Photoshop之类的软件弄上去的，而是通过下面将要讲到的java程序自动添加的，效果很不错，(*^__^*) 嘻嘻……好，正式开始吧…</p>
<p>&#160;&#160;&#160;&#160;&#160; 第一步：当然是获取flashfileupload.swf这个Flash组件啦，大家可以从<a href="http://www.codeproject.com/KB/aspnet/FlashUpload.aspx" target="_blank">这里下载</a>，或者其他什么途径得到都行</p>
<p>&#160;&#160;&#160;&#160;&#160; 第二步：编写上传页面的代码如下：</p>
<p>&#160;</p>
<pre class="csharpcode"><span class="asp">&lt;%@ page language=&quot;java&quot; import=&quot;java.util.*&quot; pageEncoding=&quot;UTF-8&quot;%&gt;</span>
<span class="asp">&lt;%</span>
  String uploadType = (String)request.getParameter(<span class="str">&quot;uploadType&quot;</span>);
  Long filmid = Long.parseLong((String)request.getParameter(<span class="str">&quot;filmid&quot;</span>));
  <span class="rem">//out.print(uploadType);</span>
  <span class="rem">//out.print(filmid);</span>
<span class="asp">%&gt;</span>
<span class="kwrd">&lt;</span><span class="html">object</span> <span class="attr">id</span><span class="kwrd">=&quot;fileUpload&quot;</span>
    <span class="attr">codebase</span><span class="kwrd">=&quot;http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab#version=10,0,22,87&quot;</span>
    <span class="attr">height</span><span class="kwrd">=&quot;310&quot;</span> <span class="attr">width</span><span class="kwrd">=&quot;500&quot;</span> <span class="attr">align</span><span class="kwrd">=&quot;middle&quot;</span>
    <span class="attr">classid</span><span class="kwrd">=&quot;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&quot;</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">=&quot;_cx&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;13229&quot;</span> <span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">=&quot;_cy&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;8202&quot;</span> <span class="kwrd">/&gt;</span>
    <span class="asp">&lt;%</span>
        <span class="kwrd">if</span>(<span class="str">&quot;Video&quot;</span>.equals(uploadType)){
    <span class="asp">%&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">=&quot;flashvars&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;fileTypeDescription=允许视频格式&amp;fileTypes=*.asx;*.asf;*.mpg;*.wmv;*.3gp;*.mp4;*.mov;*.avi;*.flv;*.wmv9;*.rm;*.rmvb&amp;completeFunction=UploadComplete()&amp;fileSizeLimit=3000000&amp;totalUploadSize=10240000&amp;accounttype=0&amp;uploadPage=flashupload!Upload.action;jsessionid=${session.id}?uploadType=&lt;%=uploadType %&gt;-&lt;%=filmid %&gt;&quot;</span> <span class="kwrd">/&gt;</span>
    <span class="asp">&lt;%</span>
        }<span class="kwrd">else</span>{
    <span class="asp">%&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">=&quot;flashvars&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;fileTypeDescription=JPG格式图片&amp;fileTypes=*.jpg;*.jpeg&amp;completeFunction=UploadComplete()&amp;fileSizeLimit=3000000&amp;totalUploadSize=10240000&amp;accounttype=0&amp;uploadPage=flashupload!Upload.action;jsessionid=${session.id}?uploadType=&lt;%=uploadType %&gt;-&lt;%=filmid %&gt;&quot;</span> <span class="kwrd">/&gt;</span>
    <span class="asp">&lt;%</span>
        }
    <span class="asp">%&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">=&quot;movie&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;flashfileupload.swf?ver=20090520&quot;</span> <span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">=&quot;src&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;flashfileupload.swf?ver=20090520&quot;</span> <span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">=&quot;wmode&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;transparent&quot;</span> <span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">=&quot;play&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;0&quot;</span> <span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">=&quot;loop&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;-1&quot;</span> <span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">=&quot;quality&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;high&quot;</span> <span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">=&quot;salign&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;lt&quot;</span> <span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">=&quot;menu&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;-1&quot;</span> <span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">=&quot;base&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;&quot;</span> <span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">=&quot;allowscriptaccess&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;sameDomain&quot;</span> <span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">=&quot;scale&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;noscale&quot;</span> <span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">=&quot;devicefont&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;0&quot;</span> <span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">=&quot;embedmovie&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;0&quot;</span> <span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">=&quot;bgcolor&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;&quot;</span> <span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">=&quot;swremote&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;&quot;</span> <span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">=&quot;moviedata&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;&quot;</span> <span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">=&quot;seamlesstabbing&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;1&quot;</span> <span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">=&quot;profile&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;0&quot;</span> <span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">=&quot;profileaddress&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;&quot;</span> <span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">=&quot;profileport&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;0&quot;</span> <span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">=&quot;allownetworking&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;all&quot;</span> <span class="kwrd">/&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">param</span> <span class="attr">name</span><span class="kwrd">=&quot;allowfullscreen&quot;</span> <span class="attr">value</span><span class="kwrd">=&quot;true&quot;</span> <span class="kwrd">/&gt;</span>
    <span class="asp">&lt;%</span>
        <span class="kwrd">if</span>(<span class="str">&quot;Video&quot;</span>.equals(uploadType)){
    <span class="asp">%&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">embed</span> <span class="attr">src</span><span class="kwrd">=&quot;flashfileupload.swf?ver=20090520&quot;</span>
        <span class="attr">flashvars</span><span class="kwrd">=&quot;fileTypeDescription=允许视频格式&amp;fileTypes=*.asx;*.asf;*.mpg;*.wmv;*.3gp;*.mp4;*.mov;*.avi;*.flv;*.wmv9;*.rm;*.rmvb&amp;completeFunction=UploadComplete()&amp;fileSizeLimit=3000000&amp;totalUploadSize=10240000&amp;accounttype=0&amp;uploadPage=flashupload!Upload.action;jsessionid=${session.id}?uploadType=&lt;%=uploadType %&gt;-&lt;%=filmid %&gt;&quot;</span>
        <span class="attr">quality</span><span class="kwrd">=&quot;high&quot;</span>
        <span class="attr">wmode</span><span class="kwrd">=&quot;transparent&quot;</span>
        <span class="attr">width</span><span class="kwrd">=&quot;500&quot;</span>
        <span class="attr">height</span><span class="kwrd">=&quot;310&quot;</span>
        <span class="attr">name</span><span class="kwrd">=&quot;fileUpload&quot;</span>
        <span class="attr">align</span><span class="kwrd">=&quot;middle&quot;</span>
        <span class="attr">allowscriptaccess</span><span class="kwrd">=&quot;samedomain&quot;</span>
        <span class="attr">type</span><span class="kwrd">=&quot;application/x-shockwave-flash&quot;</span>
        <span class="attr">pluginspage</span><span class="kwrd">=&quot;http://www.macromedia.com/go/getflashplayer&quot;</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">embed</span><span class="kwrd">&gt;</span>
    <span class="asp">&lt;%</span>
        }<span class="kwrd">else</span>{
    <span class="asp">%&gt;</span>
    <span class="kwrd">&lt;</span><span class="html">embed</span> <span class="attr">src</span><span class="kwrd">=&quot;flashfileupload.swf?ver=20090520&quot;</span>
        <span class="attr">flashvars</span><span class="kwrd">=&quot;fileTypeDescription=JPG格式图片&amp;fileTypes=*.jpg;*.jpeg&amp;completeFunction=UploadComplete()&amp;fileSizeLimit=3000000&amp;totalUploadSize=10240000&amp;accounttype=0&amp;uploadPage=flashupload!Upload.action;jsessionid=${session.id}?uploadType=&lt;%=uploadType %&gt;-&lt;%=filmid %&gt;&quot;</span>
        <span class="attr">quality</span><span class="kwrd">=&quot;high&quot;</span>
        <span class="attr">wmode</span><span class="kwrd">=&quot;transparent&quot;</span>
        <span class="attr">width</span><span class="kwrd">=&quot;500&quot;</span>
        <span class="attr">height</span><span class="kwrd">=&quot;310&quot;</span>
        <span class="attr">name</span><span class="kwrd">=&quot;fileUpload&quot;</span>
        <span class="attr">align</span><span class="kwrd">=&quot;middle&quot;</span>
        <span class="attr">allowscriptaccess</span><span class="kwrd">=&quot;samedomain&quot;</span>
        <span class="attr">type</span><span class="kwrd">=&quot;application/x-shockwave-flash&quot;</span>
        <span class="attr">pluginspage</span><span class="kwrd">=&quot;http://www.macromedia.com/go/getflashplayer&quot;</span><span class="kwrd">&gt;</span>
    <span class="kwrd">&lt;/</span><span class="html">embed</span><span class="kwrd">&gt;</span>
    <span class="asp">&lt;%</span>
        }
    <span class="asp">%&gt;</span>
<span class="kwrd">&lt;/</span><span class="html">object</span><span class="kwrd">&gt;</span></pre>
<p>
  </p>
<style type="text/css">
<p>.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }</style>
<p>说明：其中主要的是<span class="attr">flashvars</span>这个参数的设置（PS：Leeo本人对这里的设置也仅仅是略知一二）</p>
<p>fileTypeDescription：允许上传文件的类型描述</p>
<p>fileTypes：允许上传的文件类型</p>
<p>completeFunction：上传完成后调用的js函数</p>
<p>fileSizeLimit：文件大小限制</p>
<p>totalUploadSize：一次性上传文件总大小限制</p>
<p>accounttype：这个没搞清楚怎么用，如果哪位知道的请告知一声，谢谢…</p>
<p>uploadPage：上传文件的请求路径，跟在它后面的是一些用户附加的数据。其中网上有网友说可以;jsessionid=的形式传递session，Leeo没有做测试。?uploadType=是程序中需要的一些附加数据，这里本来需要两个变量的，之所以把它写到一个变量里，然后用“-”隔开两个变量值，就像代码中的&lt;%=uploadType %&gt;-&lt;%=filmid %&gt;，是因为我们知道通常通过url传参是用“&amp;”号隔开的，但这里却不能这么做，因为整个<span class="attr">flashvars</span>就是用“&amp;”来隔开不同参数的，如果附加的数据也用“&amp;”隔开就会被截断，得不到我们想要的数据，所以这里用一种比较马虎的解决方法，利用“-”号把不同变量值连接起来，然后在服务器端的java代码中用split(&quot;-&quot;)再把它们分割开来</p>
<p>&#160;&#160;&#160; 第三步：配置struts.xml文件，如下：</p>
<pre><span style="color: #0000ff">&lt;</span><span style="color: #800000">package</span> <span style="color: #ff0000">name</span>=<span style="color: #0000ff">&quot;ajaxfileupload&quot;</span> <span style="color: #ff0000">namespace</span>=<span style="color: #0000ff">&quot;/&quot;</span> <span style="color: #ff0000">extends</span>=<span style="color: #0000ff">&quot;ajaxfileupload-default&quot;</span><span style="color: #0000ff">&gt;</span>
	<span style="color: #0000ff">&lt;</span><span style="color: #800000">action</span> <span style="color: #ff0000">name</span>=<span style="color: #0000ff">&quot;flashupload&quot;</span> <span style="color: #ff0000">class</span>=<span style="color: #0000ff">&quot;leeo.action.FlashfileuploadAction&quot;</span><span style="color: #0000ff">&gt;</span>
		<span style="color: #0000ff">&lt;</span><span style="color: #800000">result</span> <span style="color: #ff0000">name</span>=<span style="color: #0000ff">&quot;success&quot;</span> <span style="color: #ff0000">type</span>=<span style="color: #0000ff">&quot;httpheader&quot;</span><span style="color: #0000ff">&gt;</span>
			<span style="color: #0000ff">&lt;</span><span style="color: #800000">param</span> <span style="color: #ff0000">name</span>=<span style="color: #0000ff">&quot;status&quot;</span><span style="color: #0000ff">&gt;</span>200<span style="color: #0000ff">&lt;/</span><span style="color: #800000">param</span><span style="color: #0000ff">&gt;</span>
		<span style="color: #0000ff">&lt;/</span><span style="color: #800000">result</span><span style="color: #0000ff">&gt;</span>
	<span style="color: #0000ff">&lt;/</span><span style="color: #800000">action</span><span style="color: #0000ff">&gt;</span>
<span style="color: #0000ff">&lt;/</span><span style="color: #800000">package</span><span style="color: #0000ff">&gt;</span></pre>
<p><font color="#ff0000">特别说明：</font>这里还用到了ajax-file-upload-plugin-0.4.0.jar（PS：Struts2中用ajxa方式上传文件需要的jar包）</p>
<p>&#160;&#160;&#160;&#160;&#160; 第四步：编写action类代码，如下：</p>
<pre><span style="color: #008000">/** 文件对象 */</span>
<span style="color: #0000ff">private</span> <span style="color: #0000ff">transient</span> File[] Filedata;
<span style="color: #008000">/** 文件名 */</span>
<span style="color: #008000">/** 文件对象 */</span>
<span style="color: #0000ff">private</span> <span style="color: #0000ff">transient</span> File[] Filedata;
<span style="color: #008000">/** 文件名 */</span>
<span style="color: #0000ff">private</span> <span style="color: #0000ff">transient</span> String[] FiledataFileName;
<span style="color: #008000">/** 文件内容类型 */</span>
<span style="color: #0000ff">private</span> <span style="color: #0000ff">transient</span> String[] FiledataContentType;

<span style="color: #008000">/**
 * 区分是上传海报、剧照、片花
 * **/</span>
<span style="color: #0000ff">private</span> <span style="color: #0000ff">transient</span> String uploadType;

<span style="color: #0000ff">public</span> String Upload() <span style="color: #0000ff">throws</span> Exception {
	System.out.println(&quot;<span style="color: #8b0000">FiledataFileName length:</span>&quot; + FiledataFileName.length);
	System.out.println(&quot;<span style="color: #8b0000">uploadType:</span>&quot; + uploadType);
	String[] type_filmid = uploadType.split(&quot;<span style="color: #8b0000">-</span>&quot;);
	System.out.println(&quot;<span style="color: #8b0000">filmid:</span>&quot; + type_filmid[1]);

	Film f = filmService.findFilmById(<span style="color: #0000ff">new</span> Long(type_filmid[1]));
	<span style="color: #008000">//原文件存放路径  </span>
	String OriginalImageDirectory = ServletActionContext.getServletContext().getRealPath(&quot;<span style="color: #8b0000">/UploadFile/</span>&quot; + type_filmid[0] + &quot;<span style="color: #8b0000">/OriginalImage</span>&quot;) + System.getProperty(&quot;<span style="color: #8b0000">file.separator</span>&quot;, &quot;<span style="color: #8b0000">\\</span>&quot;);
	<span style="color: #0000ff">for</span>(<span style="color: #0000ff">int</span> i = 0; i &lt; Filedata.length; i ++){
		System.out.println(&quot;<span style="color: #8b0000">Filedata[</span>&quot;+i+&quot;<span style="color: #8b0000">]:</span>&quot; + Filedata[i]);
		System.out.println(&quot;<span style="color: #8b0000">FiledataFileName[</span>&quot;+i+&quot;<span style="color: #8b0000">]:</span>&quot; + FiledataFileName[i]);
		System.out.println(&quot;<span style="color: #8b0000">FiledataContentType[</span>&quot;+i+&quot;<span style="color: #8b0000">]:</span>&quot; + FiledataContentType[i]);

        <span style="color: #008000">//在指定目录创建文件</span>
        String newname = FileUpload.getFileName(FiledataFileName[i]);
        File bigFile = <span style="color: #0000ff">new</span> File(OriginalImageDirectory, newname);
        <span style="color: #008000">//把要上传的文件copy过去 </span>
        FileUpload.copy(Filedata[i], bigFile);

        <span style="color: #0000ff">if</span>(!&quot;<span style="color: #8b0000">Video</span>&quot;.equals(type_filmid[0])){
        	<span style="color: #008000">//缩略图存放路径</span>
			String ThumbnailsDirectory = ServletActionContext.getServletContext().getRealPath(&quot;<span style="color: #8b0000">/UploadFile/</span>&quot; + type_filmid[0] + &quot;<span style="color: #8b0000">/Thumbnails</span>&quot;) + System.getProperty(&quot;<span style="color: #8b0000">file.separator</span>&quot;, &quot;<span style="color: #8b0000">\\</span>&quot;);
			<span style="color: #008000">//生成缩略图</span>
			FileUpload.scaleImage(OriginalImageDirectory + newname, ThumbnailsDirectory + newname, 180, 200);
			<span style="color: #008000">//设置数据库海报字段路径</span>

			String waterImgFile = ServletActionContext.getServletContext().getRealPath(&quot;<span style="color: #8b0000">/UploadFile</span>&quot;) + System.getProperty(&quot;<span style="color: #8b0000">file.separator</span>&quot;, &quot;<span style="color: #8b0000">\\</span>&quot;);
	        <span style="color: #008000">// 给大图添加文字水印  </span>
	        <span style="color: #008000">//FileUpload.watermark(bigFile);  </span>
	        <span style="color: #008000">// 给大图添加图片水印，可以是gif或png格式  </span>
	        FileUpload.imageWaterMark(bigFile, waterImgFile);
			File smallFile = <span style="color: #0000ff">new</span> File(ThumbnailsDirectory, newname);
			<span style="color: #008000">// 给大图添加文字水印  </span>
	        <span style="color: #008000">//FileUpload.watermark(smallFile);  </span>
	        <span style="color: #008000">// 给大图添加图片水印，可以是gif或png格式  </span>
	        FileUpload.imageWaterMark(smallFile, waterImgFile);
        }

        <span style="color: #008000">/*
         * 操作数据库部分
         * */</span>
        <span style="color: #0000ff">if</span>(&quot;<span style="color: #8b0000">Poster</span>&quot;.equals(type_filmid[0])){
        	f.setFPoster(newname);
        	filmService.modFilm(f);
        }<span style="color: #0000ff">else</span> <span style="color: #0000ff">if</span>(&quot;<span style="color: #8b0000">Still</span>&quot;.equals(type_filmid[0])){
        	FilmStill fs = <span style="color: #0000ff">new</span> FilmStill();
        	fs.setFsPath(newname);
        	fs.setFilm(f);
        	filmService.addFilmStill(fs);
        }<span style="color: #0000ff">else</span> <span style="color: #0000ff">if</span>(&quot;<span style="color: #8b0000">Video</span>&quot;.equals(type_filmid[0])){
        	FilmVideo fv = <span style="color: #0000ff">new</span> FilmVideo();
        	fv.setFvPath(newname);
        	fv.setFilm(f);
        	filmService.addFilmVideo(fv);
        }
	}
	<span style="color: #0000ff">return</span> SUCCESS;
}

<span style="color: #0000ff">public</span> File[] getFiledata() {
	<span style="color: #0000ff">return</span> Filedata;
}

<span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> setFiledata(File[] filedata) {
	<span style="color: #0000ff">this</span>.Filedata = filedata;
}

<span style="color: #0000ff">public</span> String[] getFiledataFileName() {
	<span style="color: #0000ff">return</span> FiledataFileName;
}

<span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> setFiledataFileName(String[] filedataFileName) {
	<span style="color: #0000ff">this</span>.FiledataFileName = filedataFileName;
}

<span style="color: #0000ff">public</span> String[] getFiledataContentType() {
	<span style="color: #0000ff">return</span> FiledataContentType;
}

<span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> setFiledataContentType(String[] filedataContentType) {
	<span style="color: #0000ff">this</span>.FiledataContentType = filedataContentType;
}

<span style="color: #0000ff">public</span> String getUploadType() {
	<span style="color: #0000ff">return</span> uploadType;
}

<span style="color: #0000ff">public</span> <span style="color: #0000ff">void</span> setUploadType(String uploadType) {
	<span style="color: #0000ff">this</span>.uploadType = uploadType;
}</pre>
<p>其中，操作数据库部分的代码跟这个例子无关，可以省去。</p>
<p>&#160;&#160;&#160;&#160;&#160; 第五步：要用到的其他类的代码（PS：这部分代码来自互联网）</p>
<p>&#160;&#160;&#160;&#160;&#160; 1：FileUpload.java用于生成缩略图、添加水印、生成无重复的文件名</p>
<pre><span style="color: #0000ff">import</span> java.awt.AlphaComposite;
<span style="color: #0000ff">import</span> java.awt.Color;
<span style="color: #0000ff">import</span> java.awt.Font;
<span style="color: #0000ff">import</span> java.awt.Graphics2D;
<span style="color: #0000ff">import</span> java.awt.Image;
<span style="color: #0000ff">import</span> java.awt.image.BufferedImage;
<span style="color: #0000ff">import</span> java.io.BufferedInputStream;
<span style="color: #0000ff">import</span> java.io.BufferedOutputStream;
<span style="color: #0000ff">import</span> java.io.File;
<span style="color: #0000ff">import</span> java.io.FileInputStream;
<span style="color: #0000ff">import</span> java.io.FileOutputStream;
<span style="color: #0000ff">import</span> java.io.IOException;
<span style="color: #0000ff">import</span> java.io.InputStream;
<span style="color: #0000ff">import</span> java.io.OutputStream;
<span style="color: #0000ff">import</span> java.text.SimpleDateFormat;
<span style="color: #0000ff">import</span> java.util.Date;

<span style="color: #0000ff">import</span> javax.imageio.ImageIO;

<span style="color: #0000ff">import</span> com.sun.image.codec.jpeg.JPEGCodec;
<span style="color: #0000ff">import</span> com.sun.image.codec.jpeg.JPEGImageEncoder;

<span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> FileUpload {

	<span style="color: #0000ff">private</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">final</span> <span style="color: #0000ff">int</span> BUFFER_SIZE = 16 * 1024;
	<span style="color: #0000ff">private</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">final</span> String WATER_TEXT = &quot;<span style="color: #8b0000">文字水印</span>&quot;;
	<span style="color: #0000ff">private</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">final</span> String WATER_IMG_NAME = &quot;<span style="color: #8b0000">logo.png</span>&quot;;

	<span style="color: #008000">/*生成无重复文件名*/</span>
    <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> String getFileName(String name){

		SimpleDateFormat df =<span style="color: #0000ff">new</span> SimpleDateFormat(&quot;<span style="color: #8b0000">yyyyMMddHHmmss</span>&quot;);
		Date date = <span style="color: #0000ff">new</span> Date();
		String filename=<span style="color: #0000ff">null</span>;
		<span style="color: #0000ff">if</span>(!&quot;<span style="color: #8b0000"></span>&quot;.equals(name) &amp;&amp; name != <span style="color: #0000ff">null</span>){
			filename=df.format(date) + RandomNum.random2() + name.substring(name.lastIndexOf(&quot;<span style="color: #8b0000">.</span>&quot;), name.length());
		}
		System.out.println(&quot;<span style="color: #8b0000">filename is:</span>&quot;+filename);
		<span style="color: #0000ff">return</span> filename;
	}

    <span style="color: #008000">/*上传文件*/</span>
	<span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> copy(File src, File dst) {
        <span style="color: #0000ff">try</span> {
            InputStream in = <span style="color: #0000ff">null</span>;
            OutputStream out = <span style="color: #0000ff">null</span>;
            <span style="color: #0000ff">try</span> {
                in = <span style="color: #0000ff">new</span> BufferedInputStream(<span style="color: #0000ff">new</span> FileInputStream(src), BUFFER_SIZE);
                out = <span style="color: #0000ff">new</span> BufferedOutputStream(<span style="color: #0000ff">new</span> FileOutputStream(dst), BUFFER_SIZE);
                <span style="color: #0000ff">byte</span>[] buffer = <span style="color: #0000ff">new</span> <span style="color: #0000ff">byte</span>[BUFFER_SIZE];
                <span style="color: #0000ff">while</span> (in.read(buffer) &gt; 0) {
                    out.write(buffer);
                }
            } <span style="color: #0000ff">finally</span> {
                <span style="color: #0000ff">if</span> (<span style="color: #0000ff">null</span> != in) {
                    in.close();
                }
                <span style="color: #0000ff">if</span> (<span style="color: #0000ff">null</span> != out) {
                    out.close();
                }
            }
        } <span style="color: #0000ff">catch</span> (Exception e) {
            e.printStackTrace();
        }
    }

	<span style="color: #008000">/*生成缩略图*/</span>
	<span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> String scaleImage(String fromFileStr, String saveToFileStr, <span style="color: #0000ff">int</span> formatWideth, <span style="color: #0000ff">int</span> formatHeight) <span style="color: #0000ff">throws</span> Exception {
		ScaleImage is = <span style="color: #0000ff">new</span> ScaleImage();
		<span style="color: #0000ff">try</span> {
			is.saveImageAsJpg(fromFileStr, saveToFileStr, formatWideth, formatHeight);
        }<span style="color: #0000ff">catch</span> (Exception e) {
            <span style="color: #008000">// TODO Auto-generated catch block</span>
            e.printStackTrace();
            <span style="color: #0000ff">return</span> &quot;<span style="color: #8b0000">error</span>&quot;;
        }
        <span style="color: #0000ff">return</span> &quot;<span style="color: #8b0000">ok</span>&quot;;
	}

	<span style="color: #008000">/**
	     * 添加文字水印
	     *
	     * @return
	     * @throws Exception
	     * @throws Exception
	     */</span>
	    <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> watermark(File img) <span style="color: #0000ff">throws</span> Exception {
	        System.out.println(&quot;<span style="color: #8b0000">[watermark file name]--</span>&quot; + img.getPath());
	        <span style="color: #0000ff">try</span> {  

	            <span style="color: #0000ff">if</span> (!img.exists()) {
	                <span style="color: #0000ff">throw</span> <span style="color: #0000ff">new</span> IllegalArgumentException(&quot;<span style="color: #8b0000">file not found!</span>&quot;);
	            }  

	            System.out.println(&quot;<span style="color: #8b0000">[watermark][img]--</span>&quot; + img);  

	            <span style="color: #008000">// 创建一个FileInputStream对象从源图片获取数据流  </span>
	            FileInputStream sFile = <span style="color: #0000ff">new</span> FileInputStream(img);  

	            <span style="color: #008000">// 创建一个Image对象并以源图片数据流填充  </span>
	            Image src = ImageIO.read(sFile);  

	            <span style="color: #008000">// 得到源图宽  </span>
	            <span style="color: #0000ff">int</span> width = src.getWidth(<span style="color: #0000ff">null</span>);
	            <span style="color: #008000">// 得到源图长  </span>
	            <span style="color: #0000ff">int</span> height = src.getHeight(<span style="color: #0000ff">null</span>);  

	            <span style="color: #008000">// 创建一个BufferedImage来作为图像操作容器  </span>
	            BufferedImage image = <span style="color: #0000ff">new</span> BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
	            <span style="color: #008000">// 创建一个绘图环境来进行绘制图象  </span>
	            Graphics2D g = image.createGraphics();
	            <span style="color: #008000">// 将原图像数据流载入这个BufferedImage  </span>
	            System.out.println(&quot;<span style="color: #8b0000">width:</span>&quot; + width + &quot;<span style="color: #8b0000"> height:</span>&quot; + height);
	            g.drawImage(src, 0, 0, width, height, <span style="color: #0000ff">null</span>);
	            <span style="color: #008000">// 设定文本字体  </span>
	            g.setFont(<span style="color: #0000ff">new</span> Font(&quot;<span style="color: #8b0000">宋体</span>&quot;, Font.BOLD, 28));
	            String rand = WATER_TEXT;
	            <span style="color: #008000">// 设定文本颜色  </span>
	            g.setColor(Color.blue);
	            <span style="color: #008000">// 设置透明度  </span>
	            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.5f));
	            <span style="color: #008000">// 向BufferedImage写入文本字符,水印在图片上的坐标  </span>
	            g.drawString(rand, width - (width - 20), height - (height - 60));
	            <span style="color: #008000">// 使更改生效  </span>
	            g.dispose();
	            <span style="color: #008000">// 创建输出文件流  </span>
	            FileOutputStream outi = <span style="color: #0000ff">new</span> FileOutputStream(img);
	            <span style="color: #008000">// 创建JPEG编码对象  </span>
	            JPEGImageEncoder encodera = JPEGCodec.createJPEGEncoder(outi);
	            <span style="color: #008000">// 对这个BufferedImage (image)进行JPEG编码  </span>
	            encodera.encode(image);
	            <span style="color: #008000">// 关闭输出文件流  </span>
	            outi.close();
	            sFile.close();  

	        } <span style="color: #0000ff">catch</span> (IOException e) {
	            e.printStackTrace();
	            <span style="color: #0000ff">throw</span> <span style="color: #0000ff">new</span> Exception(e);
	        }
	    }  

	    <span style="color: #008000">/**
	     * 添加图片水印
	     *
	     */</span>
	    <span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">void</span> imageWaterMark(File imgFile, String waterFilePath) <span style="color: #0000ff">throws</span> Exception {
	        <span style="color: #0000ff">try</span> {
	            <span style="color: #008000">// 目标文件  </span>
	            Image src = ImageIO.read(imgFile);
	            <span style="color: #0000ff">int</span> wideth = src.getWidth(<span style="color: #0000ff">null</span>);
	            <span style="color: #0000ff">int</span> height = src.getHeight(<span style="color: #0000ff">null</span>);
	            BufferedImage image = <span style="color: #0000ff">new</span> BufferedImage(wideth, height, BufferedImage.TYPE_INT_RGB);
	            Graphics2D g = image.createGraphics();
	            g.drawImage(src, 0, 0, wideth, height, <span style="color: #0000ff">null</span>);  

	            <span style="color: #008000">// 水印文件 路径  </span>
	            String waterImgPath = waterFilePath + WATER_IMG_NAME;
	            System.out.println(&quot;<span style="color: #8b0000">waterImgPath--</span>&quot; + waterImgPath);
	            File waterFile = <span style="color: #0000ff">new</span> File(waterImgPath);
	            Image waterImg = ImageIO.read(waterFile);  

	            <span style="color: #0000ff">int</span> w_wideth = waterImg.getWidth(<span style="color: #0000ff">null</span>);
	            <span style="color: #0000ff">int</span> w_height = waterImg.getHeight(<span style="color: #0000ff">null</span>);
	            g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_ATOP, 0.5f));
	            g.drawImage(waterImg, (wideth - w_wideth) / 2, (height - w_height) / 2, w_wideth, w_height, <span style="color: #0000ff">null</span>);
	            <span style="color: #008000">// 水印文件结束  </span>

	            g.dispose();
	            FileOutputStream out = <span style="color: #0000ff">new</span> FileOutputStream(imgFile);
	            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
	            encoder.encode(image);
	            out.close();
	        } <span style="color: #0000ff">catch</span> (Exception e) {
	            e.printStackTrace();
	        }
	    }
}</pre>
<p>&#160;&#160;&#160;&#160;&#160; 2：RandomNum.java用于生成无重复随机数</p>
<pre><span style="color: #0000ff">import</span> java.util.Random;

<span style="color: #0000ff">public</span> <span style="color: #0000ff">class</span> RandomNum {

	<span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">int</span>[] random1() {
		Random r = <span style="color: #0000ff">new</span> Random();
		<span style="color: #0000ff">int</span> temp1, temp2;
		<span style="color: #0000ff">int</span> send[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21 };
		<span style="color: #0000ff">int</span> len = send.length;
		<span style="color: #0000ff">int</span> returnValue[] = <span style="color: #0000ff">new</span> <span style="color: #0000ff">int</span>[22];
		<span style="color: #0000ff">for</span> (<span style="color: #0000ff">int</span> i = 0; i &lt; 22; i++) {
			temp1 = Math.abs(r.nextInt()) % len;
			returnValue[i] = send[temp1];
			temp2 = send[temp1];
			send[temp1] = send[len - 1];
			send[len - 1] = temp2;
			len--;
		}
		<span style="color: #0000ff">return</span> returnValue;
	}
	<span style="color: #0000ff">public</span> <span style="color: #0000ff">static</span> <span style="color: #0000ff">int</span>[] random2() {
		<span style="color: #0000ff">int</span> send[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21 };
		<span style="color: #0000ff">int</span> temp1, temp2, temp3;
		Random r = <span style="color: #0000ff">new</span> Random();
		<span style="color: #0000ff">for</span> (<span style="color: #0000ff">int</span> i = 0; i &lt; send.length; i++){<span style="color: #008000">// 随机交换send.length次</span>
			temp1 = Math.abs(r.nextInt()) % (send.length - 1); <span style="color: #008000">// 随机产生一个位置</span>
			temp2 = Math.abs(r.nextInt()) % (send.length - 1); <span style="color: #008000">// 随机产生另一个位置</span>
			<span style="color: #0000ff">if</span> (temp1 != temp2) {
				temp3 = send[temp1];
				send[temp1] = send[temp2];
				send[temp2] = temp3;
			}
		}
		<span style="color: #0000ff">return</span> send;
	}
}</pre>
<p>&#160;&#160;&#160;&#160;&#160; 到此，本应用实例的代码就完成了，赶紧体验一下吧。。。</p>


<div class="posturl"><span><span class="r1"></span><span class="r2"></span><span class="r3"></span><span class="r4"></span></span><div class="posturl-content"><p>关联文章导读：<ol><li><a href='http://imleeo.com/jquery/different-results-in-firefox-an-ie-of-fileupload-using-struts2-and-json-and-jquery.html' rel='bookmark' title='Permanent Link: Struts2+json+jQuery上传文件在Firefox和IE下返回结果截然不同'>Struts2+json+jQuery上传文件在Firefox和IE下返回结果截然不同</a> <small>&#160;&#160;&#160;&#160;&#160; 在Struts2中利用json格式返回数据，struts.xml文件配置如下： &lt;package name=&quot;struts2json&quot; extends=&quot;json-default&quot;&gt; &lt;!-- jsonfilm --&gt; &lt;action name=&quot;jsonFilm&quot; class=&quot;film&quot;&gt; &lt;result type=&quot;json&quot;&gt; &lt;param name=&quot;excludeProperties&quot;&gt;.*hibernateLazyInitializer,pageBean,film&lt;/param&gt; &lt;/result&gt; &lt;/action&gt; &lt;/package&gt; 而表单利用jquery.form.js插件提供的ajax方式来提交，javascript代码如下：...</small></li>
<li><a href='http://imleeo.com/java/hibernate3-3-2-spring2-5-6-struts2-1-6.html' rel='bookmark' title='Permanent Link: Hibernate3.3.2+Spring2.5.6+Struts2.1.6整合异常解决&mdash;&mdash;不断更新'>Hibernate3.3.2+Spring2.5.6+Struts2.1.6整合异常解决&mdash;&mdash;不断更新</a> <small>1、org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'sessionFactory' is defined 异常说明：sessionFactory bean未定义 异常原因：applicationContext.xml配置文件中使用其他名字sessionFactory...</small></li>
<li><a href='http://imleeo.com/java/org-hibernate-sessionexception-session-is-closed.html' rel='bookmark' title='Permanent Link: org.hibernate.SessionException: Session is closed! 异常解决方法'>org.hibernate.SessionException: Session is closed! 异常解决方法</a> <small>刚刚在程序中出现了org.hibernate.SessionException: Session is closed! 这个异常，查看Firebug控制台，还能发现有这样的异常信息org.springframework.transaction.TransactionSystemException: Could not commit Hibernate transaction;记录一下解决方法。...</small></li>
</ol></p></div><span><span class="r4"></span><span class="r3"></span><span class="r2"></span><span class="r1"></span></span></div>]]></content:encoded>
			<wfw:commentRss>http://imleeo.com/java/struts2-flashfileupload-fileupload-and-generate-thumbnails-and-add-watermarks.html/feed</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
		<item>
		<title>eclipse 3.5在线汉化图解</title>
		<link>http://imleeo.com/java/eclipse-chinese-language-online.html</link>
		<comments>http://imleeo.com/java/eclipse-chinese-language-online.html#comments</comments>
		<pubDate>Thu, 29 Oct 2009 03:42:00 +0000</pubDate>
		<dc:creator>IT北瓜</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[计算机应用]]></category>
		<category><![CDATA[eclipse 3.5]]></category>
		<category><![CDATA[eclipse汉化]]></category>

		<guid isPermaLink="false">http://imleeo.com/java/eclipse-chinese-language-online.html</guid>
		<description><![CDATA[<p>&#160;&#160;&#160;&#160;&#160; 最近想学一下<a href="http://code.google.com/intl/zh-CN/webtoolkit/" target="_blank">Google 网页工具包</a>(<a href="http://www.google.cn/" target="_blank">Google</a> Web Toolkit)，于是装了eclipse3.5，由于本人E文实在有点对不起老师，还是中文界面看起来舒服。装完就赶紧把它给汉化了，虽然手动下载中文包汉化也很简单，但我还是喜欢在线升级的方式，这种方式方便日后升级。以下是在线汉化的过程图解：</p>  <p>&#160;&#160;&#160;&#160;&#160; 启动eclipse，依次打开Help——&#62;Install New Software…，在弹出窗口中点击Add…按钮，填写如下对话框：</p>  <div style="padding-bottom: 0px; padding-left: 0px; width: 335px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px" id="scid:8747F07C-CDE8-481f-B0DF-C6CFD074BF67:33dfdc14-73a8-430a-9069-f547548f3488" class="wlWriterEditableSmartContent"><a href="http://imleeo.com/wp-content/uploads/eclipse3.5_A59A/eclipse08x6.jpg" title="" rel="thumbnail"><img border="0" src="http://imleeo.com/wp-content/uploads/eclipse3.5_A59A/eclipse0.png" width="335" height="101" /></a></div>

<div class="posturl"><span><span class="r1"></span><span class="r2"></span><span class="r3"></span><span class="r4"></span></span><div class="posturl-content">
暂无关联文章！</div><span><span class="r4"></span><span class="r3"></span><span class="r2"></span><span class="r1"></span></span></div>]]></description>
			<content:encoded><![CDATA[<p>&#160;&#160;&#160;&#160;&#160; 最近想学一下<a href="http://code.google.com/intl/zh-CN/webtoolkit/" target="_blank">Google 网页工具包</a>(<a href="http://www.google.cn/" target="_blank">Google</a> Web Toolkit)，于是装了eclipse3.5，由于本人E文实在有点对不起老师，还是中文界面看起来舒服。装完就赶紧把它给汉化了，虽然手动下载中文包汉化也很简单，但我还是喜欢在线升级的方式，这种方式方便日后升级。以下是在线汉化的过程图解：</p>
<p>&#160;&#160;&#160;&#160;&#160; 启动eclipse，依次打开Help——&gt;Install New Software…，在弹出窗口中点击Add…按钮，填写如下对话框：</p>
<div style="padding-bottom: 0px; padding-left: 0px; width: 335px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px" id="scid:8747F07C-CDE8-481f-B0DF-C6CFD074BF67:33dfdc14-73a8-430a-9069-f547548f3488" class="wlWriterEditableSmartContent"><a href="http://imleeo.com/wp-content/uploads/eclipse3.5_A59A/eclipse08x6.jpg" class="highslide-image" onclick="return hs.expand(this);" title="" rel="thumbnail"><img border="0" src="http://imleeo.com/wp-content/uploads/eclipse3.5_A59A/eclipse0.png" width="335" height="101" /></a></div>
</p>
<p>&#160;&#160;&#160;&#160;&#160; 说明：Name项可以随便填，Locations填写<a href="http://download.eclipse.org/technology/babel/update-site/galileo">http://download.eclipse.org/technology/babel/update-site/galileo</a>，点OK…按钮。耐心等待其自动检索…</p>
<p>&#160;&#160;&#160;&#160;&#160; 在检索出来的结果中选择如下图：</p>
<div style="padding-bottom: 0px; padding-left: 0px; width: 335px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px" id="scid:8747F07C-CDE8-481f-B0DF-C6CFD074BF67:d021b096-1c52-4aca-8fe1-2bbfd3a7e9c9" class="wlWriterEditableSmartContent"><a href="http://imleeo.com/wp-content/uploads/eclipse3.5_A59A/eclipse18x6.jpg" class="highslide-image" onclick="return hs.expand(this);" title="" rel="thumbnail"><img border="0" src="http://imleeo.com/wp-content/uploads/eclipse3.5_A59A/eclipse1.png" width="335" height="131" /></a></div>
</p>
<p>&#160;&#160;&#160;&#160;&#160; 点击Next…按钮，再一次耐心等待中…</p>
<p>&#160;&#160;&#160;&#160;&#160; 出现如下检索结果：</p>
<div style="padding-bottom: 0px; padding-left: 0px; width: 335px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px" id="scid:8747F07C-CDE8-481f-B0DF-C6CFD074BF67:25559f66-a37b-4213-9442-8e1e549146df" class="wlWriterEditableSmartContent"><a href="http://imleeo.com/wp-content/uploads/eclipse3.5_A59A/eclipse28x6.jpg" class="highslide-image" onclick="return hs.expand(this);" title="" rel="thumbnail"><img border="0" src="http://imleeo.com/wp-content/uploads/eclipse3.5_A59A/eclipse2.png" width="335" height="179" /></a></div>
</p>
<p>&#160;&#160;&#160;&#160;&#160; 再次点击Next…按钮，并接受相关协议说明，如下：</p>
<div style="padding-bottom: 0px; padding-left: 0px; width: 335px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px" id="scid:8747F07C-CDE8-481f-B0DF-C6CFD074BF67:94b135ae-3c2e-428c-aeda-b5cec57733cc" class="wlWriterEditableSmartContent"><a href="http://imleeo.com/wp-content/uploads/eclipse3.5_A59A/eclipse38x6.jpg" class="highslide-image" onclick="return hs.expand(this);" title="" rel="thumbnail"><img border="0" src="http://imleeo.com/wp-content/uploads/eclipse3.5_A59A/eclipse3.png" width="335" height="97" /></a></div>
</p>
<p>&#160;&#160;&#160;&#160;&#160; 点击Finish…按钮，接下来就是等待自动安装了，安装完毕询问是否重启eclipse，当然选择Yes…，重启之后就可以见到熟悉的中文界面了，舒服…</p>
<div style="padding-bottom: 0px; padding-left: 0px; width: 335px; padding-right: 0px; display: block; float: none; margin-left: auto; margin-right: auto; padding-top: 0px" id="scid:8747F07C-CDE8-481f-B0DF-C6CFD074BF67:66429109-7f42-4ff6-a834-99e4906b2649" class="wlWriterEditableSmartContent"><a href="http://imleeo.com/wp-content/uploads/eclipse3.5_A59A/eclipse48x6.jpg" class="highslide-image" onclick="return hs.expand(this);" title="" rel="thumbnail"><img border="0" src="http://imleeo.com/wp-content/uploads/eclipse3.5_A59A/eclipse4.png" width="335" height="156" /></a></div>


<div class="posturl"><span><span class="r1"></span><span class="r2"></span><span class="r3"></span><span class="r4"></span></span><div class="posturl-content"><p>暂无关联文章！</p></div><span><span class="r4"></span><span class="r3"></span><span class="r2"></span><span class="r1"></span></span></div>]]></content:encoded>
			<wfw:commentRss>http://imleeo.com/java/eclipse-chinese-language-online.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
