<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
  <channel>
    <title>墙角的续集</title>
    <description></description>
    <link>http://kukuqiu.javaeye.com</link>
    <language>UTF-8</language>
    <copyright>Copyright 2003-2008, JavaEye.com</copyright>
    <docs>http://blogs.law.harvard.edu/tech/rss</docs>
    <generator>JavaEye - 做最棒的软件开发交流社区</generator>
      <item>
        <title>java小技：验证表单提交是否正确</title>
        <author>kukuqiu001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kukuqiu.javaeye.com">kukuqiu001</a>&nbsp;
          链接：<a href="http://kukuqiu.javaeye.com/blog/208974" style="color:red;">http://kukuqiu.javaeye.com/blog/208974</a>&nbsp;
          发表时间: 2008年06月28日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          打印java表单提交的内容，查找表单提交内容是否正确<br /><pre name="code" class="java">
 for (Enumeration e = request.getParameterNames(); e.hasMoreElements();)
        {
            String key = (String)e.nextElement();
            System.out.printf("request [%s]=[%s].", key,
                request.getParameter(key));
        }
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://kukuqiu.javaeye.com/blog/208974#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 28 Jun 2008 17:14:05 +0800</pubDate>
        <link>http://kukuqiu.javaeye.com/blog/208974</link>
        <guid>http://kukuqiu.javaeye.com/blog/208974</guid>
      </item>
      <item>
        <title>我们已经老了，无所谓了（纪念19年前的今天）</title>
        <author>kukuqiu001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kukuqiu.javaeye.com">kukuqiu001</a>&nbsp;
          链接：<a href="http://kukuqiu.javaeye.com/blog/199983" style="color:red;">http://kukuqiu.javaeye.com/blog/199983</a>&nbsp;
          发表时间: 2008年06月04日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          同学们，我们来得太晚了。对不起同学们了。你们说我们、批评我们，都是应该的。我这次来不是请你们原谅。我想说的是，现在同学们身体已经非常虚弱，绝食已经到了第七天，不能再这样下去了。绝食时间长了，对身体会造成难以弥补的损害，这是有生命危险的。现在最重要的是，希望尽快结束这次绝食。我知道，你们绝食是希望党和政府对你们所提出的问题给以最满意的答复。我觉得，我们的对话渠道是畅通的，有些问题需要一个过程才能解决。比如你们提到的性质、责任问题，我觉得这些问题终究可以得到解决，终究可以取得一致的看法。但是，你们也应该知道，情况是很复杂的，需要有一个过程。你们不能在绝食已进入第七天的情况下，还坚持一定要得到满意答复才停止绝食。<br /><br />    你们还年轻，来日方长，你们应该健康地活着，看到我们中国实现四化的那一天。你们不像我们，我们已经老了，无所谓了。国家和你们的父母培养你们上大学不容易呀！现在十几、二十几岁，就这样把生命牺牲掉哇，同学们能不能稍微理智地想一想。现在的情况已经非常严重，你们都知道，党和国家非常着急，整个社会都忧心如焚。另外，北京是首都，各方面情况一天天严重，这种情况不能再继续下去了，同学们都是好意，为了我们国家好，但是这种情况发展下去，失去控制，会造成各方面的严重影响。<br /><br />    总之，我就是这么一个心意。如果你们停止绝食，政府不会因此把对话的门关起来，绝不会！你们所提的问题，我们可以继续讨论。慢是慢了一些，但一些问题的认识正在逐步接近。我今天主要是看望一下同学们，同时说一说我们的心情，希望同学们冷静地想一想这个问题。这件事情在不理智的情况下，是很难想清楚的。大家都这么一股劲，年轻人么，我们都是从年轻人过来的，我们也游过行，卧过轨，当时根本不想以后怎么样。最后，我再次恳请同学们冷静地想一想今后的事。有很多事情总是可以解决的。希望你们早些结束绝食，谢谢同学们。<br /><br />纪念19年前的今天。
          <br/>
          <span style="color:red;">
            <a href="http://kukuqiu.javaeye.com/blog/199983#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Wed, 04 Jun 2008 09:36:05 +0800</pubDate>
        <link>http://kukuqiu.javaeye.com/blog/199983</link>
        <guid>http://kukuqiu.javaeye.com/blog/199983</guid>
      </item>
      <item>
        <title>ruby on rails 将数据库文件导出为csv文件（使用fastercsv）</title>
        <author>kukuqiu001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kukuqiu.javaeye.com">kukuqiu001</a>&nbsp;
          链接：<a href="http://kukuqiu.javaeye.com/blog/179307" style="color:red;">http://kukuqiu.javaeye.com/blog/179307</a>&nbsp;
          发表时间: 2008年04月03日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          上面一篇文章将csv导入到数据库，现在将数据库的数据导出<br />view层<br />href="../../contact_manager/csv_export"使用url转向的contact_manager是action,csv_export是action中的方法<br /><pre name="code" class="ruby">
&lt;a href="../../contact_manager/csv_export">export csv&lt;/a>
</pre><br />控制层<br /><pre name="code" class="ruby">
class InformationController &lt; ApplicationController
 require 'faster_csv'
 
 def csv_export
   @informations = CustomerInformation.find(:all)
   
   csv_string = FasterCSV.generate do |csv|
     csv &lt;&lt; ["name","email","remark"]
     @informations.each do |u|
       csv &lt;&lt; [u.name,u.email,u.remark]
     end
   end
   send_data csv_string,
             :type=>'text/csv; charset=iso-8859-1; header=present',
             :disposition => "attachment; filename=export.csv"
 end
  
end
</pre><br />实体<br /><pre name="code" class="ruby">
class CustomerInformation &lt; ActiveRecord::Base
end
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://kukuqiu.javaeye.com/blog/179307#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 03 Apr 2008 16:14:08 +0800</pubDate>
        <link>http://kukuqiu.javaeye.com/blog/179307</link>
        <guid>http://kukuqiu.javaeye.com/blog/179307</guid>
      </item>
      <item>
        <title>ruby on rails 使用fasterCSV将csv文件导入到数据库</title>
        <author>kukuqiu001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kukuqiu.javaeye.com">kukuqiu001</a>&nbsp;
          链接：<a href="http://kukuqiu.javaeye.com/blog/178268" style="color:red;">http://kukuqiu.javaeye.com/blog/178268</a>&nbsp;
          发表时间: 2008年04月01日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          在ruby on rails中<br />使用fasterCSV解析csv文件比标准库的csv要快10倍左右<br />不过的先安装fasterCSV ,使用gem来安装<br /><pre name="code" class="ruby">
gem install fastercsv 
</pre><br />如果是使用工具aptana开发的话,可以用名叫RubyGems的View窗口安装<br />这个例子是通过上传一个csv来解析csv文件<br />view层<br />index.html<br /><pre name="code" class="ruby">
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
&lt;html>
    &lt;head>
        &lt;meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
        &lt;title>Untitled Document&lt;/title>
    &lt;/head>
    &lt;body>
        &lt;% form_for :dump, :url=>{:controller=>"customer_information", :action=>"csv_import"}, :html => { :multipart => true } do |f| -%>
        &lt;table>
            &lt;tr>
                &lt;td>
                    &lt;label for=”dump_file”>
                        Select a CSV File :
                    &lt;/label>
                &lt;/td>
                &lt;td>
                    &lt;%= f.file_field :file -%>
                &lt;/td>
            &lt;/tr>
            &lt;tr>
                &lt;td colspan=’2′>
                    &lt;%= submit_tag 'Submit' -%>
                &lt;/td>
            &lt;/tr>
        &lt;/table>
        &lt;% end -%>
    &lt;/body>
&lt;/html>
</pre><br />csv_import<br /><pre name="code" class="ruby">
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
&lt;html>
	&lt;head>
		&lt;meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
		&lt;title>Untitled Document&lt;/title>
	&lt;/head>
	&lt;body>
		OK!!!
	&lt;/body>
&lt;/html>
</pre><br />controller层<br /><pre name="code" class="ruby">
class CustomerInformationController &lt; ApplicationController
  require 'faster_csv'
  
  def csv_import 
      n=0
      FasterCSV.parse(params[:dump][:file],:headers=>true)do |row|
      c=CustomerInformation.new
     
      c.name= row[0]
      c.email = row[1]
      c.remark = row[2]
      if c.save
        n=n+1
        GC.start if n%50==0
      end
      flash.now[:message]="CSV Import Successful,  #{n} new records added to data base"
    end
 end
end
</pre><br />这个例子是参考自<br />关于fasterCSV<a href="http://anw.stikipad.com/ocean/show/FasterCSV" target="_blank">http://anw.stikipad.com/ocean/show/FasterCSV</a><br />关于CSV<a href="http://privacystart.info/index.php?hl=f5&q=uggc%3A%2F%2Ffngvfubaenvyf.jbeqcerff.pbz%2F2007%2F07%2F18%2Fubj-gb-vzcbeg-pfi-svyr-va-envyf%2F" target="_blank">http://privacystart.info/index.php?hl=f5&q=uggc%3A%2F%2Ffngvfubaenvyf.jbeqcerff.pbz%2F2007%2F07%2F18%2Fubj-gb-vzcbeg-pfi-svyr-va-envyf%2F</a>
          <br/>
          <span style="color:red;">
            <a href="http://kukuqiu.javaeye.com/blog/178268#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 01 Apr 2008 09:14:16 +0800</pubDate>
        <link>http://kukuqiu.javaeye.com/blog/178268</link>
        <guid>http://kukuqiu.javaeye.com/blog/178268</guid>
      </item>
      <item>
        <title>dom4j  读写xml文档</title>
        <author>kukuqiu001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kukuqiu.javaeye.com">kukuqiu001</a>&nbsp;
          链接：<a href="http://kukuqiu.javaeye.com/blog/163476" style="color:red;">http://kukuqiu.javaeye.com/blog/163476</a>&nbsp;
          发表时间: 2008年02月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          据悉dom4j在xml解析方面是性能最好的，hibernate等框架都使用它作为解析的工具<br />写了简单的dom4j的使用的demo，以备回忆，有些是dom4j的文挡里例子改编的<br />使用dom4j解析下面的xml文件<br /><pre name="code" class="xml">
&lt;?xml version="1.0" encoding="GB2312"?> 

&lt;?xml-stylesheet type="text/xsl" href="students.xsl"?>

&lt;students>
    &lt;student sn="01">
        &lt;name>张三&lt;/name>
        &lt;age>18&lt;/age>
    &lt;/student>
    
    &lt;student sn="02">
        &lt;name>李四&lt;/name>
        &lt;age>20&lt;/age>
    &lt;/student>
&lt;/students></pre><br />Parse.java<br /><pre name="code" class="java">
import java.io.File;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.ProcessingInstruction;
import org.dom4j.VisitorSupport;
import org.dom4j.io.SAXReader;

public class Parse {

	public static void main(String[] args) {
		SAXReader reader = new SAXReader();
		File file = new File("src/students.xml");
		try {
			Document doc = reader.read(file);
			doc.accept(new MyVistor());
		} catch (DocumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public static class MyVistor extends VisitorSupport {
		public void visit(Attribute node) {
			System.out.println("Attibute:---" + node.getName() + "="
					+ node.getValue());
		}

		public void visit(Element node) {
			if (node.isTextOnly()) {
				System.out.println("Element:---" + node.getName() + "="
						+ node.getText());
			}else{
				System.out.println("--------" + node.getName() + "-------");
			}
		}

		@Override
		public void visit(ProcessingInstruction node) {
			// TODO Auto-generated method stub
			System.out.println("PI:"+node.getTarget()+" "+node.getText());
		}
	}
}

</pre><br />使用dom4j来将属性写入xml<br /><pre name="code" class="java">
import java.io.FileWriter;
import java.io.IOException;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;

public class DWriter {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			XMLWriter writer = new XMLWriter(new FileWriter("src/author.xml"));
			Document doc = createDoc();
			writer.write(doc);
			writer.close();

			// Pretty print the document to System.out
			// 設置了打印的格式,将读出到控制台的格式进行美化
			OutputFormat format = OutputFormat.createPrettyPrint();
			writer = new XMLWriter(System.out, format);
			writer.write(doc);

		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public static Document createDoc() {
		Document doc = DocumentHelper.createDocument();
		Element root = doc.addElement("root");
		Element author1 = root.addElement("author").addAttribute("name",
				"James").addAttribute("location", "UK")
				.addText("Jame Strachan");
		Element author2 = root.addElement("author").addAttribute("name", "Bob")
				.addAttribute("location", "US").addText("Bob McWrirter");
		return doc;
	}

}
</pre><br />使用dom4j写入到author.xml文件的内容<br /><pre name="code" class="xml">
&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;root>&lt;author name="James" location="UK">Jame Strachan&lt;/author>&lt;author name="Bob" location="US">Bob McWrirter&lt;/author>&lt;/root>
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://kukuqiu.javaeye.com/blog/163476#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Tue, 19 Feb 2008 21:21:04 +0800</pubDate>
        <link>http://kukuqiu.javaeye.com/blog/163476</link>
        <guid>http://kukuqiu.javaeye.com/blog/163476</guid>
      </item>
      <item>
        <title>spring aop实现权限控制，路径控制</title>
        <author>kukuqiu001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kukuqiu.javaeye.com">kukuqiu001</a>&nbsp;
          链接：<a href="http://kukuqiu.javaeye.com/blog/163199" style="color:red;">http://kukuqiu.javaeye.com/blog/163199</a>&nbsp;
          发表时间: 2008年02月18日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          spring aop 的权限的管理是通过对路径的控制来实现的<br />现在共有两个角色，经理和员工<br />经理的权限检查的代码<br />MgrAuthorityInterceptor.java<br /><pre name="code" class="java">
public class MgrAuthorityInterceptor implements MethodInterceptor
{

    public Object invoke(MethodInvocation invocation) throws Throwable
	{
        HttpServletRequest request = null;
        ActionMapping mapping = null;
        Object[] args = invocation.getArguments();
        //解析目标方法的参数
        for (int i = 0 ; i &lt; args.length ; i++ )
        {
            if (args[i] instanceof HttpServletRequest) request = (HttpServletRequest)args[i];
            if (args[i] instanceof ActionMapping) mapping = (ActionMapping)args[i];
        }
        //从session中得到用户的级别
        String level = (String)request.getSession().getAttribute("level");
        //如是经理级别则继续，否则，回到登陆页面
        if ( level != null && level.equals("mgr") )
        {
            return invocation.proceed();
        }
        else
        {
            return mapping.findForward("login");
        }
    }
}
</pre><br />员工的权限的实现,EmpAuthorityInterceptor.java<br /><pre name="code" class="java">
public class EmpAuthorityInterceptor implements MethodInterceptor
{

    public Object invoke(MethodInvocation invocation) throws Throwable
	{
        HttpServletRequest request = null;
        ActionMapping mapping = null;
        Object[] args = invocation.getArguments();
        for (int i = 0 ; i &lt; args.length ; i++ )
        {
            if (args[i] instanceof HttpServletRequest) request = (HttpServletRequest)args[i];
            if (args[i] instanceof ActionMapping) mapping = (ActionMapping)args[i];
        }
        //从session中得到用户的级别
        String level = (String)request.getSession().getAttribute("level");
        //如是经理或员工级别则继续，否则，回到登陆页面
        if ( level != null && (level.equals("emp") || level.equals("mgr")))
        {
            return invocation.proceed();
        }
        else
        {
            return mapping.findForward("login");
        }
    }
}
</pre><br /><br />员工，经理权限的实现，在action-servlet.xml中<br /><pre name="code" class="xml">
 &lt;!--  以经理权限拦截器生成代理  -->
    &lt;bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
	    &lt;property name="beanNames">
            &lt;list>
				action中的经理的操作
            &lt;/list>
	    &lt;/property>
        &lt;property name="interceptorNames">
            &lt;list>
                &lt;value>mgrAuthorityInterceptor&lt;/value> 
            &lt;/list>
        &lt;/property>
    &lt;/bean>

    &lt;!--  以普通员工权限拦截器生成代理  -->
    &lt;bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
	    &lt;property name="beanNames">
            &lt;list>
				员工中的action操作
            &lt;/list>
	    &lt;/property>
        &lt;property name="interceptorNames">
            &lt;list>
                &lt;value>empAuthorityInterceptor&lt;/value> 
            &lt;/list>
        &lt;/property>
    &lt;/bean>

    &lt;!-- 定义经理权限检查拦截器，class即前面的MgrAuthorityInterceptor.java-->
	&lt;bean id="mgrAuthorityInterceptor" class="org.***.MgrAuthorityInterceptor"/>
    &lt;!-- 定义普通员工权限检查拦截器 ，class即前面的EmpAuthorityInterceptor.java-->
	&lt;bean id="empAuthorityInterceptor" class="org.***.EmpAuthorityInterceptor"/>
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://kukuqiu.javaeye.com/blog/163199#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 18 Feb 2008 22:32:32 +0800</pubDate>
        <link>http://kukuqiu.javaeye.com/blog/163199</link>
        <guid>http://kukuqiu.javaeye.com/blog/163199</guid>
      </item>
      <item>
        <title>spring2.0+hibernate3.1+struts1.2 ssh开发的简单的应用3</title>
        <author>kukuqiu001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kukuqiu.javaeye.com">kukuqiu001</a>&nbsp;
          链接：<a href="http://kukuqiu.javaeye.com/blog/162439" style="color:red;">http://kukuqiu.javaeye.com/blog/162439</a>&nbsp;
          发表时间: 2008年02月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          编写这个小应用时出现的问题,以及解决的办法<br />1.<br />org.hibernate.LazyInitializationException: could not initialize proxy - the owning Session was closed<br />java.lang.NullPointerException   org.hibernate.tuple.AbstractEntityTuplizer.createProxy<br />原因：没有设置缓存的情况下，<br />只可使用getHibernateTemplate().get(user.class,id)的方法，而使用load()方法则只对缓存进行操作<br />原理：<br />Session.load/get方法均可以根据指定的实体类和id从数据库读取记录，并返回与之对应的实体对象。其区别在于：<br />如果未能发现符合条件的记录，get方法返回null，而load方法会抛出一个ObjectNotFoundException。 <br />Load方法可返回实体的代理类实例，而get方法永远直接返回实体类。 <br />load方法可以充分利用内部缓存和二级缓存中的现有数据，而get方法则仅仅在内部缓存中进行数据查找，如没有发现对应数据，将越过二级缓存，直接调用SQL完成数据读取。<br /><br />hibernate中session.get/load方法都能通过指定实体类名和id从数据库中读取指定的记录，并且<br /><br />返回与之对映的实体对象。但是它们也有很大的区别<br /><br />（1）当记录不存在时候，get方法返回null,load方法产生异常<br /><br />（2）load方法可以返回实体的代理类，get方法则返回真是的实体类<br /><br />（3）load方法可以充分利用hibernate的内部缓存和二级缓存中的现有数据，而get方法仅仅在内部缓存中进行数据查找，如果没有发现数据則将越过二级缓存，直接调用SQL查询数据库。<br /> (４) 也许别人把数据库中的数据修改了，load如何在缓存中找到了数据，则不会再访问数据库，而get则会返回最新数据。 <br />解决办法来自<br /><a href="http://matrix.org.cn/resource/news/Hibernate_974c4ed1-a759-11db-8440-755941c7293d.html" target="_blank">http://matrix.org.cn/resource/news/Hibernate_974c4ed1-a759-11db-8440-755941c7293d.html</a><br />2 <br />关于Hibernate的 Batch update returned unexpected row count from update异常 <br />ERROR [http-8080-Processor22] (BatchingBatcher.java:60) - Exception executing batch: <br />org.hibernate.StaleStateException: Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1<br />出现这一错误的主要原因有两个<br />（1）使用的是hibernate的saveOrUpdate方法保存实例。saveOrUpdate方法要求ID为null时才执行SAVE，在其它情况下执行UPDATE。在保存实例的时候是新增，但你的ID不为null，所以使用的是UPDATE，但是数据库里没有主键相关的值，所以出现异常。<br /><br />=================================================================<br />异常：<br />在插入时:<br />org.hibernate.StaleStateException: Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1 <br />解决方法：<br />unsaved-value="null"是否设置<br />可仔细看<a href="http://www.javaeye.com/topic/1604" target="_blank">http://www.javaeye.com/topic/1604</a><br />（2）在Hibernate映射一对多，多对一，多对多的时候新增常常会出现这个异常，代码如下：<br />public void saveFunctionCell(FunctionCell functionCell, Integer pid) {<br />  System.out.println("现在进行新增操作");<br />  FunctionCell fc = new FunctionCell();<br />    try {<br />   BeanUtils.copyProperties(fc, functionCell);<br />  } catch (IllegalAccessException e) {<br />   e.printStackTrace();<br />  } catch (InvocationTargetException e) {<br />   e.printStackTrace();<br />  }<br />  fc.setFuncCellID(null);<br />  // 获得父权限<br />  FunctionCell pfc = functionCellDao.findFunctionCellByID(pid);<br />  fc.setParentFunctionCell(pfc);<br />  functionCellDao.saveFunctionCell(fc);<br /> }<br /> 关键是beanutils的用法！！！！<br />注意特别标识出来的这个地方，BeanUtils拷贝Bean属性的时候，它会将你的Integer类型全部设置成0，在这里设置一个空，这样就不会抛出错误了。<br />这个解决办法来自<br /><a href="http://hain.javaeye.com/blog/105744" target="_blank">http://hain.javaeye.com/blog/105744</a>
          <br/>
          <span style="color:red;">
            <a href="http://kukuqiu.javaeye.com/blog/162439#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 15 Feb 2008 12:20:52 +0800</pubDate>
        <link>http://kukuqiu.javaeye.com/blog/162439</link>
        <guid>http://kukuqiu.javaeye.com/blog/162439</guid>
      </item>
      <item>
        <title>spring2.0+hibernate3.1+struts1.2 ssh开发的简单的应用2</title>
        <author>kukuqiu001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kukuqiu.javaeye.com">kukuqiu001</a>&nbsp;
          链接：<a href="http://kukuqiu.javaeye.com/blog/162427" style="color:red;">http://kukuqiu.javaeye.com/blog/162427</a>&nbsp;
          发表时间: 2008年02月15日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          主要简单说明一下页面的分页<br /><pre name="code" class="java">
package com.hello.web;

import java.util.ArrayList;
import java.util.List;

import com.hello.model.User;

public class Page {
	//设置当前页
	private int currentPage=1;
	//总页数
	private int totalPages=0;
	//每页的记录数
	private int pageRecorders=5;
	//总共的记录数
	private int totalRows=0;
	//页面的开始记录数
	private int pageStartRow=0;
	//页面结束时的记录数
	private int pageEndRow=0;
	//是否有下一页
	private boolean hasNextPage=false;
	//是否有上一页
	private boolean hasPreviousPage=false;
	//返回数据库的集合
	private List list;
	
	public Page(){
	}
	//构造器传入数据
	public Page(List list){
		this.list=list;
		
		totalRows = list.size();
		
		hasPreviousPage=false;
		currentPage=1;
		if((totalRows%pageRecorders)==0){
			totalPages = totalRows/pageRecorders;
		}else{
			totalPages = totalRows/pageRecorders+1;
		}
		//判断是否有下页
		if(currentPage >=totalPages){
			hasNextPage=false;
		}else{
			hasNextPage=true;
		}
		
		if(totalRows&lt;pageRecorders){
			this.pageStartRow=0;
			this.pageEndRow=totalRows;
		}else{
			this.pageStartRow=0;
			this.pageEndRow=pageRecorders;
		}
	}
	public String getCurrentPage() {
		return this.toString(currentPage);
	}
	private String toString(int temp) {
		// TODO Auto-generated method stub
		return Integer.toString(temp);
	}

	public void setCurrentPage(int currentPage) {
		this.currentPage = currentPage;
	}
	public String  getTotalPages() {
		return this.toString(totalPages);
	}
	public void setTotalPages(int totalPages) {
		this.totalPages = totalPages;
	}
	public int getPageRecorders() {
		return pageRecorders;
	}
	public void setPageRecorders(int pageRecorders) {
		this.pageRecorders = pageRecorders;
	}
	public String getTotalRows() {
		return this.toString(totalRows);
	}
	public void setTotalRows(int totalRows) {
		this.totalRows = totalRows;
	}
	public int getPageStartRow() {
		return pageStartRow;
	}
	public void setPageStartRow(int pageStartRow) {
		this.pageStartRow = pageStartRow;
	}
	public int getPageEndRow() {
		return pageEndRow;
	}
	public void setPageEndRow(int pageEndRow) {
		this.pageEndRow = pageEndRow;
	}
	public boolean isHasNextPage() {
		return hasNextPage;
	}
	public void setHasNextPage(boolean hasNextPage) {
		this.hasNextPage = hasNextPage;
	}
	public boolean isHasPreviousPage() {
		return hasPreviousPage;
	}
	public void setHasPreviousPage(boolean hasPreviousPage) {
		this.hasPreviousPage = hasPreviousPage;
	}
	//取得首页
	public void getFirstPage(){
		currentPage=1;
		hasPreviousPage=false;
		if(currentPage>=totalPages){
			hasNextPage=false;
		}else{
			hasNextPage = true;
		}
	}
	//取得下一页
	public void getNextPage(){
		currentPage=currentPage+1;
		if((currentPage-1)>0){
			hasPreviousPage=true;
		}else{
			hasPreviousPage=false;
		}
		
		if(currentPage>=totalPages){
			hasNextPage=false;
		}else{
			hasNextPage=true;
		}
	}
	//取得前一页
	public void getPreviousPage(){
		currentPage=currentPage-1;
		if(currentPage==0){
			currentPage=1;
		}
		if(currentPage>=totalPages){
			hasNextPage=false;
		}else{
			hasNextPage=true;
		}
		
		if((currentPage-1)>0){
			hasPreviousPage=true;
		}else{
			hasPreviousPage=false;
		}
	}
	//取得尾页
	public void getLastPage(){
		currentPage =totalPages;
		if(currentPage==0){
			currentPage=1;
		}
		hasNextPage=false;
		if((currentPage-1)>0){
			hasPreviousPage=true;
		}else{
			hasPreviousPage=false;
		}
	}
	//跳转页面
	public void setGotoPage(int gotoPage){
		this.currentPage = gotoPage;
		hasNextPage=true;
		hasPreviousPage=true;
		if(currentPage&lt;=1){
			currentPage=1;
			hasPreviousPage=false;
			hasNextPage=true;
		}
		
		if(currentPage >= totalPages){
			currentPage=totalPages;
			hasPreviousPage=true;
			hasNextPage=false;
		}
	}
	//取得页面list的信息
	public List&lt;User> getPageList(){
		//判断是否是最后一页
		if(currentPage*pageRecorders&lt;totalRows){
			pageEndRow = currentPage*pageRecorders;
			pageStartRow = pageEndRow-pageRecorders;
		}else{
			pageEndRow = totalRows;
			pageStartRow = pageRecorders*(totalPages-1);
		}
		List&lt;User> testList = new ArrayList&lt;User>();
		int j=0;
		for(int i=pageStartRow;i&lt;pageEndRow;i++){
			User user = (User) list.get(i);
			testList.add(j, user);
			j++;
		}
		return testList;
	}
	
	public void setList(List list) {
		this.list = list;
	}
		
}
</pre><br />页面的代码<br /><pre name="code" class="html">
&lt;%@ page language="java" pageEncoding="gbk"%>
&lt;%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
&lt;%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
&lt;%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
&lt;%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
&lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
&lt;html>
	&lt;head>
		&lt;title>LIST DATA&lt;/title>
	&lt;/head>

	&lt;body>
		
		&lt;table border="1">
			&lt;Tr>
				&lt;td> 
					id 
				&lt;/td>
				&lt;td>
					name
				&lt;/td>
				&lt;td>
					email
				&lt;/td>
				&lt;td>
					desn
				&lt;/td>
				&lt;td>
					edit
				&lt;/td>
				&lt;td>
					delete
				&lt;/td>
			&lt;/Tr>
			&lt;c:forEach items="${requestScope['users']}" var="user">
			&lt;tr>
				&lt;td>
				&lt;c:out value="${user.id}">&lt;/c:out>
				&lt;/td>
				&lt;td>
				&lt;c:out value="${user.name}">&lt;/c:out>
				&lt;/td>
				&lt;td>
				&lt;c:out value="${user.email}">&lt;/c:out>
				&lt;/td>
				&lt;td>
				&lt;c:out value="${user.descn}">&lt;/c:out>
				&lt;/td>
				&lt;td>
					&lt;a
					href="&lt;c:url value="/user.do?method=edit&id=${user.id}"/>">edit&lt;/a>
				&lt;/td>
				&lt;td>
					&lt;a
					href="&lt;c:url value="/user.do?method=delete&id=${user.id}"/>">delete&lt;/a>
				&lt;/td>
				
			&lt;/tr>
			&lt;/c:forEach>
		&lt;/Table> &lt;br>
		&lt;html:link page="/user.do?method=list&action=firstPage">首页&lt;/html:link>
		&lt;logic:equal name="page" property="hasPreviousPage" value="true">
			&lt;html:link page="/user.do?method=list&action=previousPage">上一页&lt;/html:link>
		&lt;/logic:equal>
		&lt;logic:equal name="page" property="hasPreviousPage" value="false">
			上一页
		&lt;/logic:equal>
		&lt;logic:equal name="page" property="hasNextPage" value="true">
			&lt;html:link page="/user.do?method=list&action=nextPage">下一页&lt;/html:link>
		&lt;/logic:equal>
		&lt;logic:equal name="page" property="hasNextPage" value="false">
			 下一页 
		&lt;/logic:equal>
		&lt;html:link page="/user.do?method=list&action=lastPage">尾页&lt;/html:link>
		共有数据
		&lt;bean:write name="page" property="totalRows"/>
		条；共分
		&lt;bean:write name="page" property="totalPages"/>
		页；当前是第
		&lt;bean:write name="page" property="currentPage"/>
		页
		&lt;br>&lt;button onclick="location.href='pages/edit.jsp'">add&lt;/button>

	&lt;/body>
&lt;/html>
</pre><br />UserAction,设置页面<br />只有list方法，其他的方法在代码里<br /><pre name="code" class="java">
public class UserAction extends DispatchAction {
private Page page;
	private UserService userService;

	public void setUserService(UserService userService) {
		this.userService = userService;
	}

	public ActionForward list(ActionMapping mapping, ActionForm form,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		List&lt;User> list;
		String action = null;
		action = request.getParameter("action");
		if (action == null || "action".equals(action)) {
			list = userService.loadAll();
			page = new Page(list);
			list = page.getPageList();
			request.setAttribute("users", list);
			request.setAttribute("page", page);
		} else {
			if (action == "firstPage" || action.equals("firstPage")) {
				page.getFirstPage();
				list = page.getPageList();
				request.setAttribute("users", list);
				request.setAttribute("page", page);
			}
			if (action == "nextPage" || action.equals("nextPage")) {
				page.getNextPage();
				list = page.getPageList();
				request.setAttribute("users", list);
				request.setAttribute("page", page);
			}
			if (action == "previousPage" || action.equals("previousPage")) {
				page.getPreviousPage();
				list = page.getPageList();
				request.setAttribute("users", list);
				request.setAttribute("page", page);
			}
			if (action == "lastPage" || action.equals("lastPage")) {
				page.getLastPage();
				list = page.getPageList();
				request.setAttribute("users", list);
				request.setAttribute("page", page);
			}

		}
		return mapping.findForward("list");
	}

----------------------
}
</pre>
          <br/>
          <span style="color:red;">
            <a href="http://kukuqiu.javaeye.com/blog/162427#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Fri, 15 Feb 2008 11:52:34 +0800</pubDate>
        <link>http://kukuqiu.javaeye.com/blog/162427</link>
        <guid>http://kukuqiu.javaeye.com/blog/162427</guid>
      </item>
      <item>
        <title>spring2.0+hibernate3.1+struts1.2 ssh开发的简单的应用1</title>
        <author>kukuqiu001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kukuqiu.javaeye.com">kukuqiu001</a>&nbsp;
          链接：<a href="http://kukuqiu.javaeye.com/blog/162287" style="color:red;">http://kukuqiu.javaeye.com/blog/162287</a>&nbsp;
          发表时间: 2008年02月14日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          这个简单的应用是入门级别的 ，方便大家入门<br />1,类似与springside(<a href="http://www.springside.org.cn/" target="_blank">http://www.springside.org.cn/</a>)中的例子helloworld具有的功能，<br />2,没有了springside中的将网页中的表单输出xls中的功能，<br />3,将那个helloworld例子中的分页功能简单化了 <br />4,增加了添加用户或修改用户时的，javaMail通知的功能，<br />5,还有原来的对数据的增删改查<br /><br />tomcat6.0作为服务器，mysql作为数据库<br /><br />包结构：<br />com.hello.model 存放应用的pojo类<br />com.hello.dao,com.hello.dao.impl 数据层，使用hibernate封装<br />com.hello.service,com.hello.service.impl 业务逻辑层，将页面表现同数据分离<br />com.hello.web  存放分页的类和资源文件<br />com.hello.web.action 表现层，存放struts的action文件<br />基本配置：<br />数据库文件，数据库中的数据自己添加<br />helloworld.sql<br /><pre name="code" class="sql">
create database helloworld;
use helloworld;
    create table `helloworld`.`user`(
        `id` int unsigned not null auto_increment,
       `name` varchar(45) default '' not null,
       `email` varchar(45),
       `descn` varchar(45),
        primary key (`id`)
    );
</pre><br /><br />web.xml<br />注意过滤器的字符设置<br /><pre name="code" class="xml">
&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;web-app xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	&lt;!-- 对表单传递的数据强制转换 -->
	&lt;filter>
		&lt;filter-name>encodingFilter&lt;/filter-name>
		&lt;filter-class>
			org.springframework.web.filter.CharacterEncodingFilter
		&lt;/filter-class>
		&lt;!-- 设置的是gbk，因为我的mysql数据库的字符设置是gbk，
		最好同你的数据库的字符设置相同，否则容易乱码-->
		&lt;init-param>
			&lt;param-name>encoding&lt;/param-name>
			&lt;param-value>gbk&lt;/param-value>
		&lt;/init-param>
		&lt;init-param>
			&lt;param-name>forceEncoding&lt;/param-name>
			&lt;param-value>true&lt;/param-value>
		&lt;/init-param>
	&lt;/filter>
	&lt;filter-mapping>
		&lt;filter-name>encodingFilter&lt;/filter-name>
		&lt;url-pattern>/*&lt;/url-pattern>
	&lt;/filter-mapping>
	&lt;!-- 配置spring文件 -->
	&lt;context-param>
		&lt;param-name>contextConfigLocation&lt;/param-name>
		&lt;param-value>/WEB-INF/applicationContext.xml&lt;/param-value>
	&lt;/context-param>

	&lt;listener>
		&lt;listener-class>
			org.springframework.web.context.ContextLoaderListener
		&lt;/listener-class>
	&lt;/listener>
	&lt;!-- 配置struts文件 -->
	&lt;servlet>
		&lt;servlet-name>action&lt;/servlet-name>
		&lt;servlet-class>
			org.apache.struts.action.ActionServlet
		&lt;/servlet-class>
		&lt;init-param>
			&lt;param-name>config&lt;/param-name>
			&lt;param-value>/WEB-INF/struts-config.xml&lt;/param-value>
		&lt;/init-param>
		&lt;load-on-startup>1&lt;/load-on-startup>
	&lt;/servlet>
	&lt;servlet-mapping>
		&lt;servlet-name>action&lt;/servlet-name>
		&lt;url-pattern>*.do&lt;/url-pattern>
	&lt;/servlet-mapping>

	&lt;welcome-file-list>
		&lt;welcome-file>index.jsp&lt;/welcome-file>
	&lt;/welcome-file-list>
&lt;/web-app>
</pre><br />applicationContext.xml<br /><pre name="code" class="xml">
&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
		http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx-2.0.xsd
       http://www.springframework.org/schema/aop
       http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">


	&lt;bean id="dataSource"
		class="org.springframework.jdbc.datasource.DriverManagerDataSource">
		&lt;property name="driverClassName"
			value="com.mysql.jdbc.Driver">
		&lt;/property>
		&lt;property name="url"
			value="jdbc:mysql://localhost:3306/helloworld">
		&lt;/property>
		&lt;property name="username" value="root">&lt;/property>
		&lt;property name="password" value="123456">&lt;/property>
	&lt;/bean>
	&lt;bean id="sessionFactory"
		class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		&lt;property name="dataSource">
			&lt;ref bean="dataSource" />
		&lt;/property>
		&lt;property name="hibernateProperties">
			&lt;props>
				&lt;prop key="hibernate.dialect">
					org.hibernate.dialect.MySQLDialect
				&lt;/prop>
			&lt;/props>
		&lt;/property>
		&lt;property name="mappingResources">
			&lt;list>
				&lt;value>com/hello/model/User.hbm.xml&lt;/value>
			&lt;/list>
		&lt;/property>
	&lt;/bean>

	&lt;bean id="mailSender"
		class="org.springframework.mail.javamail.JavaMailSenderImpl">
		&lt;property name="host" value="smtp.163.com" />
		&lt;property name="port" value="25" />
		&lt;property name="username" value="你的用户名" />
		&lt;property name="password" value="你的密码" />
		&lt;property name="javaMailProperties">
			&lt;props>
				&lt;prop key="mail.smtp.auth">true&lt;/prop>
				&lt;prop key="mail.smtp.timeout">25000&lt;/prop>
			&lt;/props>
		&lt;/property>
	&lt;/bean>
	&lt;!-- 配置事务管理 -->
	&lt;bean id="transactionManager"
		class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		&lt;property name="sessionFactory" ref="sessionFactory">&lt;/property>
	&lt;/bean>

	&lt;bean id="userDAO" class="com.hello.dao.impl.UserDAOImpl">
		&lt;property name="sessionFactory" ref="sessionFactory">&lt;/property>
	&lt;/bean>
	
	&lt;bean id="mailAdvice" class="com.hello.service.impl.SendMail">
		&lt;property name="mailSender" ref="mailSender">&lt;/property>
	&lt;/bean>
	&lt;!-- aop代理对象包含advisor和advice的拦截链，advice表示对方法的增强（切面）
		而pointcut表示一个切入点 -->
	&lt;tx:advice id="txAdvice" transaction-manager="transactionManager">
		&lt;tx:attributes>
			&lt;tx:method name="List" read-only="true" />
			&lt;tx:method name="*" />
		&lt;/tx:attributes>
	&lt;/tx:advice>
	
	&lt;!-- advisor 必须的有一个advice增强+一个切入点，才能实现增强方法的功能-->
	&lt;aop:config>
		&lt;!-- 增强事务功能 -->
		&lt;aop:advisor
			pointcut="execution(* com.hello.service.UserService.*(..))"
			advice-ref="txAdvice" />
		&lt;!--添加或修改用户时发送email -->
		&lt;aop:advisor
			pointcut="execution(* com.hello.service.UserService.save(*..User))"
			advice-ref="mailAdvice" />
	&lt;/aop:config>

	&lt;bean id="userService"
		class="com.hello.service.impl.UserServiceImpl">
		&lt;property name="userDAO" ref="userDAO">&lt;/property>
	&lt;/bean>
&lt;/beans>
</pre><br />struts-config.xml<br /><pre name="code" class="xml">
&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

&lt;struts-config>
	&lt;form-beans>
		&lt;form-bean name="userForm"
			type="org.apache.struts.validator.LazyValidatorForm" />
	&lt;/form-beans>

	&lt;global-exceptions />
	&lt;global-forwards />
	&lt;action-mappings>
		&lt;action attribute="userForm" input="/index.jsp" name="userForm"
			validate="false" path="/user" parameter="method" scope="request">
			&lt;forward name="list" path="/pages/list.jsp" />
			&lt;forward name="edit" path="/pages/edit.jsp" />
		&lt;/action>
	&lt;/action-mappings>
	&lt;!-- 由spring代理页面的跳转 -->
	&lt;controller>
		&lt;set-property property="processorClass"
			value="org.springframework.web.struts.DelegatingRequestProcessor" />
	&lt;/controller>
	&lt;message-resources
		parameter="com.hello.web.struts.ApplicationResources" />

	&lt;!-- spring 代理action的插件 -->
	&lt;plug-in
		className="org.springframework.web.struts.ContextLoaderPlugIn">
		&lt;set-property property="contextConfigLocation"
			value="/WEB-INF/action-servlet.xml" />
	&lt;/plug-in>

	&lt;plug-in className="org.apache.struts.validator.ValidatorPlugIn">
		&lt;set-property property="pathnames"
			value="/WEB-INF/validator-rules.xml,
                             /WEB-INF/validation.xml" />
	&lt;/plug-in>

&lt;/struts-config>
</pre><br />action-servlet.xml<br /><pre name="code" class="java">
&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
	&lt;bean name="/user" class="com.hello.web.action.UserAction">
		&lt;property name="userService" ref="userService">&lt;/property>
	&lt;/bean>
&lt;/beans>
</pre><br />源代码文件：<br />前面没有添加jta.jar,出现java.lang.NoClassDefFoundError: javax/transaction/TransactionManager。现已改正，在tomcat5.5上还暂时未通过<br />http://cid-741baba43d6d4c42.skydrive.live.com/self.aspx/Public/helloworld2.7z
          <br/>
          <span style="color:red;">
            <a href="http://kukuqiu.javaeye.com/blog/162287#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Thu, 14 Feb 2008 17:37:14 +0800</pubDate>
        <link>http://kukuqiu.javaeye.com/blog/162287</link>
        <guid>http://kukuqiu.javaeye.com/blog/162287</guid>
      </item>
      <item>
        <title>使用springMail发送带附件的email</title>
        <author>kukuqiu001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kukuqiu.javaeye.com">kukuqiu001</a>&nbsp;
          链接：<a href="http://kukuqiu.javaeye.com/blog/161771" style="color:red;">http://kukuqiu.javaeye.com/blog/161771</a>&nbsp;
          发表时间: 2008年02月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          使用spring Mail 发送带email的邮件，大大的减小了使用java email发送邮件的麻烦，<br />spring提供了一个MimeMessageHelper的助手类来完成发送附件的功能<br /><p>&nbsp;</p><pre name="code" class="java">package mail;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ApplicationContext context = new ClassPathXmlApplicationContext(&quot;config.xml&quot;);
		JavaMailSender mailSender= (JavaMailSender) context.getBean(&quot;mailSender&quot;);
		MimeMessage mime = mailSender.createMimeMessage();
		MimeMessageHelper helper;
		try {
			helper = new MimeMessageHelper(mime,true,&quot;utf-8&quot;);
			helper.setFrom(&quot;abcd@163.com&quot;);
			helper.setTo(&quot;abcd@gmail.com&quot;);
			helper.setSubject(&quot; 测试spring Mail的附件功能&quot;);
			//需要将附件显示在html中
			//在标签中用cid:xx 标记，使用helper.addInline()方法添加
			helper.setText(&quot;&lt;html&gt;&lt;body&gt;javaeye是个好网站：&lt;br&gt;&quot;+
					&quot;&lt;a href='http://www.javaeye.com'&gt;&quot; +
					&quot;&lt;img src='cid:logo'&gt;&lt;/a&gt;&lt;/body&gt;&lt;/html&gt;&quot;,true);
			helper.addInline(&quot;logo&quot;, new ClassPathResource(&quot;logo.gif&quot;));
			helper.addAttachment(&quot;javaeye.gif&quot;, new ClassPathResource(&quot;javaeye.gif&quot;));
		} catch (MessagingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	
		mailSender.send(mime);
	}

}
</pre><p>对应的config.xml ，同发送普通邮件的一样</p><p>&nbsp;</p>
          <br/>
          <span style="color:red;">
            <a href="http://kukuqiu.javaeye.com/blog/161771#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 09 Feb 2008 20:31:41 +0800</pubDate>
        <link>http://kukuqiu.javaeye.com/blog/161771</link>
        <guid>http://kukuqiu.javaeye.com/blog/161771</guid>
      </item>
      <item>
        <title>使用springMail发送普通邮件</title>
        <author>kukuqiu001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kukuqiu.javaeye.com">kukuqiu001</a>&nbsp;
          链接：<a href="http://kukuqiu.javaeye.com/blog/161762" style="color:red;">http://kukuqiu.javaeye.com/blog/161762</a>&nbsp;
          发表时间: 2008年02月09日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          需要的spring的jar包有：spring.jar,mail.jar,commons-logging.jar,activation.jar<br /><pre name="code" class="java">package mail;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;

public class Main {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ApplicationContext context = new ClassPathXmlApplicationContext("config.xml");
		JavaMailSender mailSender= (JavaMailSender) context.getBean("mailSender");
		SimpleMailMessage mail = new SimpleMailMessage();
		mail.setFrom("abcd@163.com");
		mail.setTo("abcd@gmail.com");
		mail.setSubject(" 测试spring Mail");
		mail.setText("hello,java");
		mailSender.send(mail);
	}

}</pre> <br />config.xml配置文件：<br /><pre name="code" class="xml">&lt;?xml version="1.0" encoding="UTF-8"?>
&lt;beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd"
>
	  &lt;bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        &lt;property name="host" value="smtp.163.com" />
        &lt;property name="port" value="25" />
        &lt;property name="username" value="abcd@163.com" />
        &lt;property name="password" value="你的密码" />
        &lt;property name="javaMailProperties">
         	&lt;props>
         		&lt;prop key="mail.smtp.auth">true&lt;/prop>
         	&lt;/props>
        &lt;/property>
    &lt;/bean>
&lt;/beans></pre>
          <br/>
          <span style="color:red;">
            <a href="http://kukuqiu.javaeye.com/blog/161762#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 09 Feb 2008 17:22:24 +0800</pubDate>
        <link>http://kukuqiu.javaeye.com/blog/161762</link>
        <guid>http://kukuqiu.javaeye.com/blog/161762</guid>
      </item>
      <item>
        <title>log4j的简单配置</title>
        <author>kukuqiu001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kukuqiu.javaeye.com">kukuqiu001</a>&nbsp;
          链接：<a href="http://kukuqiu.javaeye.com/blog/153390" style="color:red;">http://kukuqiu.javaeye.com/blog/153390</a>&nbsp;
          发表时间: 2008年01月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          log4j.properities的配置：<br />#设置根记录器的日志级别未INFO，A1，A2；<br />#A1是输出到控制台，A2是输出到文件<br />log4j.rootLogger=INFO,A1,A2<br />#设置A1是控制台的appender组件<br />log4j.appender.A1=org.apache.log4j.ConsoleAppender<br />#设置A1的输出格式<br />log4j.appender.A1=org.appache.log4j.PatterLayout<br />log4j.appender.A1.ConversionPattern=%d{yyyy-mm-dd HH:mm:ss,SSS} [%c] [%p] %m%n<br /><br />#设置A2是控制台的appender组件<br />log4j.appender.A2=org.apache.log4j.RollingFileAppender<br />#设置文件的输出位置<br />log4j.appender.A2.File=d:/computer.txt<br />#设置文件的大小<br />log4j.appender.A2.MaxFileSize=10M<br />#设置文件如超过大小的备份<br />log4j.appender.A2.MaxBackupIndex=10<br />#设置A2的输出格式<br />log4j.appender.A2=org.appache.log4j.PatterLayout<br />log4j.appender.A2.ConversionPattern=%d{yyyy-mm-dd HH:mm:ss,SSS} [%c] [%p] %m%n
          <br/>
          <span style="color:red;">
            <a href="http://kukuqiu.javaeye.com/blog/153390#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 05 Jan 2008 20:54:06 +0800</pubDate>
        <link>http://kukuqiu.javaeye.com/blog/153390</link>
        <guid>http://kukuqiu.javaeye.com/blog/153390</guid>
      </item>
      <item>
        <title>错误积累2</title>
        <author>kukuqiu001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kukuqiu.javaeye.com">kukuqiu001</a>&nbsp;
          链接：<a href="http://kukuqiu.javaeye.com/blog/153386" style="color:red;">http://kukuqiu.javaeye.com/blog/153386</a>&nbsp;
          发表时间: 2008年01月05日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1.忘记了写包名，只写了类名<br />org.hibernate.MappingException: Association references unmapped class: Address<br />2.<br />getter和setter的名字写错了！！！<br />Initial SessionFactory creation failed.org.hibernate.PropertyNotFoundException<br />3<br />spring中bean的ref的的位置错了<br />Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'user' defined in file [/home/song/programer/eclipse/workspace/spring2/src/com/song/applicationContext.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'myhome' of bean class [com.song.User]: Bean property 'myhome' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?<br />4<br />使用myeclipse6,datasource数据源出问题<br />org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool<br />Caused by:<br />java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool<br />at java.lang.Class.getDeclaredConstructors0(Native Method)<br />at java.lang.Class.privateGetDeclaredConstructors(Class.java:2328)<br />at java.lang.Class.getConstructor0(Class.java:2640)<br />at java.lang.Class.getDeclaredConstructor(Class.java:1953)<br />……<br /><br />从日志信息看问题已经很明显了，是applicationContext.xml的dataSource问题。<br />解决方法：<br />方法1 将<br />改为之后问题得到解决。（org.springframework.jdbc.datasource.DriverManagerDataSource 不可以使用连接池。）<br />方法2 org.apache.commons.dbcp.BasicDataSource作为注入的DataSource源，为了使用 DBCP的功能，必须要将commons-dbcp.jar加入CLASSPATH中，另外还需要commons-pool.jar和commons- collections.jar，这些都可以在Spring的lib目录下找到。<br />org.springframework.jdbc.datasource.DriverManagerDataSource 并没有提供连接池的功能，只能作作简单的单机连接测试。使用org.apache.commons.dbcp.BasicDataSource时缺少 commons-pool.jar所以会出现如题的问题。<br /><br />5<br />contentType="text/html; charset=gbk"<br />中写成了contextType=""，打错了字<br />.JasperException: /showTree1.jsp(1,1) PWC6039: Page directive has invalid attribute: contextType<br />6<br />在spring的运用，整合struts当中action-servlet.xml的bean不是id，而是name<br />小心，小心<br />bean name="/login"<br />7<br />contentType="text/html; charset=gbk"<br />中写成了contextType=""，打错了字<br />.JasperException: /showTree1.jsp(1,1) PWC6039: Page directive has invalid attribute: contextType<br />8<br />&lt;bean id="txProxyTemplate" abstract="true"<br />			class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"><br />		&lt;property name="transactionManager" ref="transactionManager">&lt;/property><br />		&lt;property name="transactionAttributes" ><br />			&lt;props><br />				&lt;prop key="save*">PROPAGATION_REQUIRED&lt;/prop><br />				&lt;prop key="remove*">PROPAGATION_REQUIRED&lt;/prop><br />				&lt;prop key="*">PROPAGATION_REQUIRED,readOnly&lt;/prop><br />			&lt;/props><br />		&lt;/property><br />&lt;/bean><br />transactionAttributes,忘写了's',查了很久的错误，no setter is found错误，以后要小心！！<br />9<br />org.hibernate.StaleStateException: Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1<br />主要是把user表设置成了native，而本身没有设置userid这个属性，改成assigned,由程序指定即可（小心检查myeclipse生成的pojo类及配置文件是否合理）<br />10<br />在applicationContext.xml,spring的配置文件中，代理的拦截器同facadeManager文件相冲突，发生error：<br />no setter property for"target"<br />原因是缺少spring-aop.jar包
          <br/>
          <span style="color:red;">
            <a href="http://kukuqiu.javaeye.com/blog/153386#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Sat, 05 Jan 2008 19:45:21 +0800</pubDate>
        <link>http://kukuqiu.javaeye.com/blog/153386</link>
        <guid>http://kukuqiu.javaeye.com/blog/153386</guid>
      </item>
      <item>
        <title>很早的笔记，有点杂乱</title>
        <author>kukuqiu001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kukuqiu.javaeye.com">kukuqiu001</a>&nbsp;
          链接：<a href="http://kukuqiu.javaeye.com/blog/141714" style="color:red;">http://kukuqiu.javaeye.com/blog/141714</a>&nbsp;
          发表时间: 2007年11月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1.<br />
java的设计模式<br />
我只是就我知道的来说<br />
DAO(data access object),实现一个对数据库订立操作的接口，订立一个操作的标准<br />
<br />
dao设计模式：<br />
实现3个类和一个接口，各完成不同的功能，已完成DAO设计模式：<br />
类1：Vo的对象必须同表的字段完全对应<br />
类2：对数据库建立操作的接口（增删改查）（注意面向对象的设计原则：面向接口编程）<br />
类3：对接口的实现类<br />
类4：数据库的连接类，统一管理数据库的连接，连接和关闭数据库<br />
<br />
mvc的设计模式：<br />
<br />
mdel  view controller,将对象，视图，控制分离，实现解耦合,将一个应用被分成三个层&mdash;&mdash;模型层、视图层、控制层。<br />
<a href="http://bp0.blogger.com/_YNd3ZHwfYj4/RzBoshIMX9I/AAAAAAAAAAU/du8UL9zCu4Y/s1600-h/mvc.gif" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"><img src="http://bp0.blogger.com/_YNd3ZHwfYj4/RzBoshIMX9I/AAAAAAAAAAU/du8UL9zCu4Y/s320/mvc.gif" border="0" id="BLOGGER_PHOTO_ID_5129715089591263186" alt="" style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" /></a><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
2.<br />
在简单的使用hibernate时出现的错误<br />
<composite-id name="id" class="com.songjie.hiberante.pojo.PersonId"><key-property name="name" type="java.lang.String"><column name="name" length="20"></column><key-property name="password" type="java.lang.String"><column name="password" length="20"></column>代表它们都是主键。<br />
xml的文件设置错误，有了太多的主键<br />
Error Creating SessionFactory %%%%<br />
org.hibernate.MappingException: component class not found: com.songjie.hiberante.pojo.PersonId<br />
at org.hibernate.mapping.Component.getComponentClass(Component.java:105)<br />
at org.hibernate.tuple.PojoComponentTuplizer.buildGetter(PojoComponentTuplizer.java:155)<br />
at org.hibernate.tuple.AbstractComponentTuplizer.<init>(AbstractComponentTuplizer.java:40)<br />
at org.hibernate.tuple.PojoComponentTuplizer.<init>(PojoComponentTuplizer.java:43)<br />
at org.hibernate.tuple.TuplizerLookup.create(TuplizerLookup.java:126)<br />
at org.hibernate.mapping.Component.getType(Component.java:160)<br />
at org.hibernate.mapping.SimpleValue.isValid(SimpleValue.java:253)<br />
at org.hibernate.mapping.RootClass.validate(RootClass.java:193)<br />
<br />
错误的原因是数据库没有设置主键，hibernate要通过主键来查找。hbm.xml与数据库table中的关系<br />
<br />
3.<br />
sql server2005 中设置为sa登录，不是windows的用户名登录<br />
1）用Windows身份验证登陆(这个应该是不会存在问题的, 在新安装好实例(SQL Server)的情况下, Windows身份验证是不可能被禁用的(安装过程中没有可以设置禁用Windows身份验证的地方)<br />
Manage Studio -- 菜单&quot;文件&quot;--&quot;连接对象资源管理器&quot;, 身份验证中选择&quot;Windows Authentication&quot;<br />
<br />
2） 连接成功后, 右键你的实例, 选择&quot;属性&quot;<br />
<br />
3） 在&quot;属性&quot;窗口中, 转到&quot;Security&quot;(安全性)项, 在&quot;服务器身份验证&quot;中设置为&quot;SQL Server和Windows身份验证模式&quot;, 确定, 根据提示, 你应该重新启动sql服务<br />
<br />
4） 重新启动sql服务后, 照用Windows身份验证连接, 然后执行下面的语句启用sa用户, 同时清除sa的密码(能成功登陆后再根据你的需要设置)<br />
<br />
EXEC sp_password null,null,'sa'<br />
<br />
ALTER LOGIN sa ENABLE<br />
<br />
null null 是你重新设置的用户登录密码<br />
5) 语句执行完成后, 再用sa连接你的实例, 应该就没有问题了.<br />
<br />
4.<br />
sql语言的左连接，右连接，完全连接<br />
sql输出可能是空值是，使用外连接<br />
--使用右连接会把空值过滤掉，right join是说从book表开始连接<br />
--而book表中的空值null，找不到匹配是就不在输出<br />
全连接(full join)会把左，右连接中为空的都连接起来<br />
<br />
左连接     Left   Join   就是左邊的內容可以為空了<br />
右连接     Rgight   Join   就是右邊的內容可以為空<br />
完全连接   Inner   Join     就是兩邊的都可以為空<br />
<br />
特别注意null<br />
数据库中的空值（null） 是说这个数据根本就不存在。<br />
<br />
5.<br />
hibernate中什么叫做对象的实体映射中的细粒度划分？<br />
是指在pojo类中进行的划分，使对象细化，展现更加清晰的系统逻辑，而不是对表的划分<br />
还有针对性能的粒度划分，针对业务逻辑，这个不是很了解，没使用过<br />
<br />
</init></init></key-property></key-property></composite-id><iostream><stdlib.h><composite-id name="id" class="com.songjie.hiberante.pojo.PersonId"><key-property name="name" type="java.lang.String"><key-property name="password" type="java.lang.String"><init><init><iostream><stdlib.h><stdlib.h><stdio.h>6.<br />
cvs进行同步操作时一定要先进行落实和更新，然后再命名版本</stdio.h></stdlib.h></stdlib.h></iostream></init></init></key-property></key-property></composite-id></stdlib.h></iostream>
          <br/>
          <span style="color:red;">
            <a href="http://kukuqiu.javaeye.com/blog/141714#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 19 Nov 2007 14:54:16 +0800</pubDate>
        <link>http://kukuqiu.javaeye.com/blog/141714</link>
        <guid>http://kukuqiu.javaeye.com/blog/141714</guid>
      </item>
      <item>
        <title>j2se的学习笔记</title>
        <author>kukuqiu001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kukuqiu.javaeye.com">kukuqiu001</a>&nbsp;
          链接：<a href="http://kukuqiu.javaeye.com/blog/141710" style="color:red;">http://kukuqiu.javaeye.com/blog/141710</a>&nbsp;
          发表时间: 2007年11月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1.<br />
***非常重要****<br />
java 的命名规范：<br />
包命名：全部小写 com.kukuqiu001.bean<br />
类命名：单词首字母大写 SimpleBean<br />
属性名称： 第一个单词小写,第二个大写 sayHello<br />
方法命名：同属性名称<br />
常量命名：全部单词都大写：final String DBDRIVER=&quot;mysql&quot;<br />
<br />
2.<br />
Arrays。Arrays隶属书The Collections Framework。这个类提供了数组的填充，查找，比较，排序等一系列的对数组的操作<br />
<br />
3.<br />
线程的实现：<br />
一种是实现Runnable接口，一种是继承Thread类；<br />
相比而言实现Runnable接口更具有灵活性，可以实现多个接口并能继承各种类，而继承Thread只能单继承。<br />
4.<br />
String str1=&quot;12345&quot;;<br />
System.out.println((int)str1.charAt(0));<br />
(int)强制转化后是ascII的值，而非想得到的1<br />
<br />
String str1=&quot;12345&quot;;<br />
System.out.println(str1.charAt(0));<br />
得到想要的1<br />
<br />
原因是： System.out.println()强制使用了toString()方法，转换为string类型，而使用（int）就不能调用toString()方法了
          <br/>
          <span style="color:red;">
            <a href="http://kukuqiu.javaeye.com/blog/141710#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 19 Nov 2007 14:52:31 +0800</pubDate>
        <link>http://kukuqiu.javaeye.com/blog/141710</link>
        <guid>http://kukuqiu.javaeye.com/blog/141710</guid>
      </item>
      <item>
        <title>java和javabean的学习笔记</title>
        <author>kukuqiu001</author>
        <description>
          <![CDATA[
          <br/>
          作者: <a href="http://kukuqiu.javaeye.com">kukuqiu001</a>&nbsp;
          链接：<a href="http://kukuqiu.javaeye.com/blog/141707" style="color:red;">http://kukuqiu.javaeye.com/blog/141707</a>&nbsp;
          发表时间: 2007年11月19日
          <br/><br/>
          声明：本文系JavaEye网站发布的原创博客文章，未经作者书面许可，严禁任何网站转载本文，否则必将追究法律责任！
          <br/><br/>
          1. request.setAttribute和requst.setParameter<br />
get/setParameter是在对页面表单中的元素进行操作，获取的是这个表单元素中的值，其类型是字符串<br />
get/setParameter是httpservletRequest接口的方法，该接口继承自httpservlet抽象类，主要应用于HTTP协议的请求和回应。<br />
servlet中使用getParameter取回表单输入用户名的值<br />
str=request.getParmeter(&quot;user&quot;);<br />
get/setAttribute是对你页面中自己定义的对象进行操作，获取的是一个Object对象，必须进行强制类型转换后才可以进行进一步的操作，attribute是属性的意思<br />
get/setAttribute是servletContext接口的实现方法，，使用该接口来表示web应用程序的上下文。<br />
2.关于servlet的转发<br />
httpServlet接口的sendRedirect()方法<br />
RequestDispatcher()接口的forword()方法的区别<br />
sendRedirect()是在客户端实现跳转，浏览器做了两次请求<br />
forword()是在服务器端实现跳转，浏览器做了一次请求，由servlet容器实现跳转到另一个servlet上<jsp:usebean scope="作用范围" class="包.类" id="对象"><jsp:setproperty name="id" property="*"><br />
<jsp:getproperty name="id" property="属性"><br />
3.<br />
javabean的要求：<br />
javabean都放在同一个包中<br />
jsp调用的是javabean中的无参构造方法<br />
javabean是封装的public class，其属性使用getter，setter方法实现<br />
4.<br />
javabean中属性的保存范围；<br />
page范围：只在当前页中使用，常使用在数据库的操作中，因为每次数据库操作，在每次使用完以后必须关闭。<br />
request范围：只使用在一次跳转中<br />
session范围： 保存在一次会话当中，只实例化一次，开发购物车时使用<br />
application：属性公有，在服务器中使用一次<br />
<br />
在其中page范围和session范围最重要<br />
<br />
jsp和javabean的笔记是比较多的，但在使用ubuntu时不小心误删除了</jsp:getproperty></jsp:setproperty></jsp:usebean>
          <br/>
          <span style="color:red;">
            <a href="http://kukuqiu.javaeye.com/blog/141707#comments" style="color:red;">本文的讨论也很精彩，浏览讨论>></a>
          </span>
          <br/><br/><br/>
          <span style="color:#E28822;">JavaEye推荐</span>
          <br/>
          <ul class='adverts'><li><a href='/adverts/41' target='_blank'><span style="color:red;font-weight:bold;">北京: 千橡集团暨校内网诚聘软件研发工程师</span></a></li><li><a href='/adverts/42' target='_blank'><span style="color:red;font-weight:bold;">搜狐网站诚聘Java、PHP和C++工程师</span></a></li></ul>
          <br/><br/><br/>
          ]]>
        </description>
        <pubDate>Mon, 19 Nov 2007 14:49:45 +0800</pubDate>
        <link>http://kukuqiu.javaeye.com/blog/141707</link>
        <guid>http://kukuqiu.javaeye.com/blog/141707</guid>
      </item>
  </channel>
</rss>