﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-金家寶-文章分类-J2EE技术实例</title><link>http://www.blogjava.net/jiabao/category/20481.html</link><description>机会只会给垂青有准备的人，运气不是每个人都有的 ...</description><language>zh-cn</language><lastBuildDate>Sun, 01 Apr 2007 23:54:17 GMT</lastBuildDate><pubDate>Sun, 01 Apr 2007 23:54:17 GMT</pubDate><ttl>60</ttl><item><title>玩JPETSTORE的可以看看</title><link>http://www.blogjava.net/jiabao/articles/107748.html</link><dc:creator>金家寶</dc:creator><author>金家寶</author><pubDate>Sun, 01 Apr 2007 05:50:00 GMT</pubDate><guid>http://www.blogjava.net/jiabao/articles/107748.html</guid><wfw:comment>http://www.blogjava.net/jiabao/comments/107748.html</wfw:comment><comments>http://www.blogjava.net/jiabao/articles/107748.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jiabao/comments/commentRss/107748.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jiabao/services/trackbacks/107748.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: March 02, 2007										根据petclinic项目手把手教你剖析SpringFramework源代码-日志篇[转]																		关键词:Spring,log4j在petclinic项目中，在web.xml有几个条目和log4j有关，它们是: 																		继续阅读 "根据petclinic项目手...&nbsp;&nbsp;<a href='http://www.blogjava.net/jiabao/articles/107748.html'>阅读全文</a><img src ="http://www.blogjava.net/jiabao/aggbug/107748.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jiabao/" target="_blank">金家寶</a> 2007-04-01 13:50 <a href="http://www.blogjava.net/jiabao/articles/107748.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>实战MVC模式</title><link>http://www.blogjava.net/jiabao/articles/102714.html</link><dc:creator>金家寶</dc:creator><author>金家寶</author><pubDate>Thu, 08 Mar 2007 17:40:00 GMT</pubDate><guid>http://www.blogjava.net/jiabao/articles/102714.html</guid><wfw:comment>http://www.blogjava.net/jiabao/comments/102714.html</wfw:comment><comments>http://www.blogjava.net/jiabao/articles/102714.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jiabao/comments/commentRss/102714.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jiabao/services/trackbacks/102714.html</trackback:ping><description><![CDATA[ 内容: <br />1.MVC <br />2.Observer接口 <br />3.模型Model <br />4.视图View <br />5.控制器Controller <br />6.运行程序   <br /><br /><br />-------------------------------------------------------------------------------- <br /><br /><br />MVC <br /><br />“模型－视图－控制器(Model-View-Controller,MVC)结构是为那些需要为同样的数据提供多个视图的应用程序而设计的，它很好的实现了数据层与表示层的分离。例如下图中的例子： <br /><img onclick="if(this.width&gt;=700) window.open('http://www.cs.nyu.edu/courses/spring99/V22.0480-001/lectures/images/l14_im2.JPG');" src="http://www.cs.nyu.edu/courses/spring99/V22.0480-001/lectures/images/l14_im2.JPG" onload="if(this.width &gt; 700)this.width = 700;if(this.height &gt; 700) this.height = 700;" border="0" /><br />我们看到，图中的几组数据以不同的形式(View)表现出来，一个是表格样式，一个是图形样式。 <br /><br />MVC把这种应用程序分为三种对象类型: <br />模型：维护数据并提供数据访问方法。 <br />视图：给制模型的部分数据或所有数据的可视图。 <br />控制器：处理事件. <br />以下是典型的MVC通信方式, <br /><img onclick="if(this.width&gt;=700) window.open('http://www.javable.com/columns/serv_side/workshop/11/1.gif');" src="http://www.javable.com/columns/serv_side/workshop/11/1.gif" onload="if(this.width &gt; 700)this.width = 700;if(this.height &gt; 700) this.height = 700;" border="0" /><br /><br />事件由控制器来处理，控制器接收用户事件，并根据事件的类型来改变模型。 <br />视图事先会在模型中登记，当模型数据发生改变时，马上通知已向此模型登记的每个视图。 <br />视图从模取得最新的数据并刷新自己. <br />要实现MVC，最重要的一个环节是使用Design  Pattern中的Observer模式。Observer模式允许某个对象在所观察的对象发生修改时通知多个观察者(Observer). <br /><br />下面我们就以实例来讲解如何用Obserer模式实现MVC的程序结构。在我的例子中，我要实现一个学生年龄显示的例子。分别用清单和图形的方式显示每个学生的年龄。当年龄改变时，自动更新显示。 <br /><br />Observer接口 <br /><br />为了实现观察的对象发生修改时通知多个观察者，通常要在被观察者与观察者之间有一个小的接口，如下: <br />/*  file:  Observer.java  */ <br />public  interface  Observer <br />{ <br />        public  void  dataUpdate(Model  model); <br />} <br />这个接口中有一个dataUpdate(Model  model)方法，只要实现了这个接口对象，就成了一个观察者。 <br /><br />模型Model <br /><br />再来建立一个数据模型。在我的例子中，先建立了一个数据对象: <br />/*  file:  Data.java  */ <br />public  class  Data <br />{ <br />        public  int  value;　　//  学生年龄值 <br />        public  String  name;　//  学生名 <br />} <br />现在来建立一个Model: <br />/*  file:  Model.java  */ <br />import  java.util.*; <br />public  class  Model <br />{ <br />        ArrayList  data  =  new  ArrayList(); <br />        ArrayList  observer  =  new  ArrayList(); <br />        public  Model() <br />        {        super(); <br />        } <br />        public  Model(int[]  value,  String[]  name) <br />        { <br />                for  (  int  i  =  0;  i&lt;  value.length;  i++   <br />                { <br />                        addData(value<i>,name<i>); <br />                } <br />        } <br />        public  Model(Data[]  data) <br />        { <br />                for  (  int  i  =  0;  i&lt;  data.length;  i++   <br />                { <br />                        addData(data<i>); <br />                } <br />        } <br />        public  void  addData(int  value,  String  name) <br />        { <br />                Data  data  =  new  Data(); <br />                data.value  =  value; <br />                data.name  =  name; <br />                this.data.add(data); <br />        } <br />        public  void  addData(Data  data) <br />        { <br />                this.data.add(data); <br />        } <br />        public  Data  getData(int  idx) <br />        { <br />                return  (Data)(data.get(idx)); <br />        } <br /><br />        public  int  size() <br />        { <br />                return  data.size(); <br />        } <br />　　//  用来向模型中登记观察者. <br />        public  void  registerObserver(Observer  o) <br />        { <br />                observer.add(o); <br />        } <br />        public  void  removeObserver(Observer  o) <br />        { <br />                observer.remove(o); <br />        } <br />        //  当数据改变时，由Controller调用此方法，通知各个Observer,刷新视图. <br />        public  void  changeModel(Model  model) <br />        { <br />                data.clear(); <br />                for  (int  i=0;  i<model.size();&nbsp;&nbsp;i++&nbsp;&nbsp;><br />                { <br />                        this.addData(model.getData(i)); <br />                } <br />                dataUpdate(); <br />        } <br />        private  void  dataUpdate() <br />        { <br />                for  (Iterator  i  =  observer.iterator();  i.hasNext();   <br />                { <br />                        Observer  o  =  (Observer)(i.next()); <br />                        o.dataUpdate(this); <br />                } <br />        } <br />} <br />这个模型提供各种数据访问的方法。并提供一个changeModel(Model  model)方法供Controller访问。还提供一个registerObserver(Observer  o)方法，用来向Model中登记观察者Observer。 <br /><br />视图View <br /><br />我们要实现一个清单显示样式的视图View1和一个图形方式显示的视图View2,并让它们实现Observer接口，以便当Model数据改变时，自动刷新自己. <br />/*  file:  View1.java  */ <br />import  javax.swing.*; <br />import  java.awt.*; <br />import  javax.swing.border.*; <br />public  class  View1  extends  JPanel  implements  Observer <br />{ <br />        Model  model; <br /><br />        public  View1() <br />        { <br />        } <br />        public  View1(Model  model) <br />        { <br />                try <br />                { <br />                        this.model  =  model; <br />                        jbInit(); <br />                } <br />                catch(Exception  e) <br />                { <br />                        e.printStackTrace(); <br />                } <br />        } <br />        private  void  jbInit()  throws  Exception <br />        { <br />                this.setBackground(Color.white); <br />                this.setBorder(new  TitledBorder(BorderFactory.createLineBorder(Color.black,1),"View1"); <br />        } <br /><br />        public  void  paintComponent(Graphics  g) <br />        { <br />                super.paintComponent(g); <br />                if  (  model  ==  null    return; <br />                int  x  =  20,y  =  50; <br />                int  h  =  g.getFontMetrics().getHeight(); <br />                for  (  int  i=0;  i&lt;  model.size();  i++   <br />                { <br />                        Data  data  =  model.getData(i); <br />                        g.drawString(data.name,x,y); <br />                        y+=h; <br />                        g.drawString(String.valueOf(data.value),x,y); <br />                        y+=h; <br />                } <br />        } <br />        //  当模型数据发生改变时，会自动调用此方法来刷新图形 <br />        public  void  dataUpdate(Model  model) <br />        { <br />                /**@todo:  Implement  this  Observer  method*/ <br />                this.model  =  model; <br />                repaint(); <br />        } <br />} <br />/*  file:  View2.java  */ <br />import  javax.swing.*; <br />import  java.awt.*; <br />import  javax.swing.border.*; <br />public  class  View2  extends  JPanel  implements  Observer <br />{ <br />        Model  model; <br /><br />        public  View2() <br />        { <br />        } <br />        public  View2(Model  model) <br />        { <br />                try <br />                { <br />                        this.model  =  model; <br />                        jbInit(); <br />                } <br />                catch(Exception  e) <br />                { <br />                        e.printStackTrace(); <br />                } <br />        } <br />        private  void  jbInit()  throws  Exception <br />        { <br />                this.setBackground(Color.white); <br />                this.setBorder(new  TitledBorder(BorderFactory.createLineBorder(Color.black,1),"View1"); <br />        } <br /><br />        public  void  paintComponent(Graphics  g) <br />        { <br />                super.paintComponent(g); <br />                if  (  model  ==  null    return; <br />                int  x  =  20,y  =  50; <br />                int  h  =  g.getFontMetrics().getHeight(); <br />                int  width  =  this.getWidth(); <br />                int  height  =  this.getHeight(); <br />                int  sy  =  height  /  model.size(); <br />                int  sx  =  width/  2; <br />                for  (  int  i=0;  i&lt;  model.size();  i++   <br />                { <br />                        Data  data  =  model.getData(i); <br />                        int  value  =  data.value; <br />                        int  dx  =  3; <br />                        int  r  =  3; <br />                        Color  c  =  new  Color((int)(255*Math.random()),(int)(255*Math.random()),(int)(255*Math.random())); <br />                        int  cx  =  sx; <br />                        int  cy  =  y+i  *  sy; <br />                        for  (  int  j=0;j<value;&nbsp;&nbsp;j++&nbsp;&nbsp;><br />                        { <br />                                g.setColor(c); <br />                                g.drawOval(cx,cy,r,r); <br />                                r+=dx; <br />                        } <br />                        g.drawString(data.name,25,cy); <br />                } <br />        } <br />        //  当模型数据发生改变时，会自动调用此方法来刷新图形 <br />        public  void  dataUpdate(Model  model) <br />        { <br />                /**@todo:  Implement  this  Observer  method*/ <br />                this.model  =  model; <br />                repaint(); <br />        } <br />} <br /><br />控制器Controller <br /><br />好了，MVC中的Model,Observer都建立好了，我们最后来做一个Controller: <br />import  java.awt.*; <br />import  javax.swing.*; <br />import  javax.swing.border.*; <br />import  java.awt.event.*; <br />public  class  Controller  extends  JFrame <br />{ <br />        Model  model  =    new  Model(); <br />        View1  view1  =  new  View1(model); <br />        View2  view2  =  new  View2(model); <br />        JScrollPane  jScrollPane1  =  new  JScrollPane(); <br />        JButton  jButton1  =  new  JButton(); <br />        JTextField  jTextField1  =  new  JTextField(); <br />        JTextField  jTextField2  =  new  JTextField(); <br />        JLabel  jLabel1  =  new  JLabel(); <br />        JLabel  jLabel2  =  new  JLabel(); <br />        JLabel  jLabel3  =  new  JLabel(); <br />        public  Controller() <br />        { <br />                try <br />                { <br />                        jbInit(); <br />                } <br />                catch(Exception  e) <br />                { <br />                        e.printStackTrace(); <br />                } <br /><br />        } <br />        private  void  jbInit()  throws  Exception <br />        { <br />                Data[]  data  =  new  Data[2]; <br />                data[0]  =  new  Data(); <br />                data[1]  =  new  Data(); <br />                data[0].name  =  "Ted"; <br />                data[0].value  =  20; <br />                data[1].name  =  "Joy"; <br />                data[1].value  =  14; <br />                model.addData(data[0]); <br />                model.addData(data[1]); <br />                //  注意下面两行：向模型中登记它的观察者View1和View2. <br />                model.registerObserver(view1); <br />                model.registerObserver(view2); <br /><br />                this.getContentPane().setLayout(null); <br />                jScrollPane1.setBounds(new  Rectangle(0,  0,  3,  3)); <br />                jButton1.setBounds(new  Rectangle(309,  259,  101,  27)); <br />                jButton1.setText("Update"; <br />                jButton1.addActionListener(new  java.awt.event.ActionListener() <br />                { <br />                        public  void  actionPerformed(ActionEvent  e) <br />                        { <br />                                jButton1_actionPerformed(e); <br />                        } <br />                }); <br />                jTextField1.setText("20"; <br />                jTextField1.setBounds(new  Rectangle(80,  254,  52,  30)); <br />                jTextField2.setText("14"; <br />                jTextField2.setBounds(new  Rectangle(178,  255,  50,  31)); <br />                jLabel1.setText("Age:"; <br />                jLabel1.setBounds(new  Rectangle(41,  226,  47,  23)); <br />                jLabel2.setText("Ted"; <br />                jLabel2.setBounds(new  Rectangle(42,  252,  35,  33)); <br />                jLabel3.setText("Joy"; <br />                jLabel3.setBounds(new  Rectangle(144,  255,  31,  31)); <br />                view1.setBounds(new  Rectangle(7,  5,  225,  20); <br />                view2.setBounds(new  Rectangle(234,  4,  219,  209)); <br />                this.getContentPane().add(jScrollPane1,  null); <br />                this.getContentPane().add(jTextField2,  null); <br />                this.getContentPane().add(jTextField1,  null); <br />                this.getContentPane().add(jLabel2,  null); <br />                this.getContentPane().add(jLabel3,  null); <br />                this.getContentPane().add(jLabel1,  null); <br />                this.getContentPane().add(jButton1,  null); <br />                this.getContentPane().add(view1,  null); <br />                this.getContentPane().add(view2,  null); <br />        } <br />        //  按下Update按钮，通知Model数据发生改变. <br />        void  jButton1_actionPerformed(ActionEvent  e) <br />        { <br />                Data[]  data  =  new  Data[2]; <br />                data[0]  =  new  Data(); <br />                data[1]  =  new  Data(); <br />                data[0].name  =  jLabel1.getText(); <br />                data[0].value  =  Integer.parseInt(jTextField1.getText()); <br />                data[1].name  =  jLabel2.getText(); <br />                data[1].value  =  Integer.parseInt(jTextField2.getText()); <br />                Model  m  =  new  Model(data); <br />                this.model.changeModel(m); <br />        } <br />        public  static  void  main(String[]  args) <br />        { <br />                Controller  c  =  new  Controller(); <br />                c.setSize(475,310); <br />                c.setVisible(true); <br />        } <br />} <br /><br />运行程序 <br /><br />各位可以将这些代码各自存为相应的源文件，执行以下命令编译 <br />javac  Controller.java <br />运行 <br />java  Controller.class <br />就可以看到程序执行的效果， <br /><br /><br /><br />你可以试着改变两个学生的年龄，按一下Update按钮，相应的视图就更新了。怎么样，体验到了MVC结构给程序带来的方便性了吧?; </value;&nbsp;&nbsp;j++&nbsp;&nbsp;></model.size();&nbsp;&nbsp;i++&nbsp;&nbsp;></i></i></i><img src ="http://www.blogjava.net/jiabao/aggbug/102714.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jiabao/" target="_blank">金家寶</a> 2007-03-09 01:40 <a href="http://www.blogjava.net/jiabao/articles/102714.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>spring hibernate struts整合开发实例</title><link>http://www.blogjava.net/jiabao/articles/102712.html</link><dc:creator>金家寶</dc:creator><author>金家寶</author><pubDate>Thu, 08 Mar 2007 17:35:00 GMT</pubDate><guid>http://www.blogjava.net/jiabao/articles/102712.html</guid><wfw:comment>http://www.blogjava.net/jiabao/comments/102712.html</wfw:comment><comments>http://www.blogjava.net/jiabao/articles/102712.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jiabao/comments/commentRss/102712.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jiabao/services/trackbacks/102712.html</trackback:ping><description><![CDATA[
		<span class="content">一，数据表（因为是一个小例子，所以只有一个表，毕竟这不是一个讲怎么配置hibernate级联的例子。）<br />CREATE TABLE `members` (<br />`id` int(7) NOT NULL auto_increment,<br />`name` varchar(20) NOT NULL default '',<br />`password` varchar(20) default NULL,<br />`sex` varchar(10) default NULL,<br />`mail` varchar(50) default NULL,<br />PRIMARY KEY (`id`),<br />UNIQUE KEY `name` (`name`)<br />) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8<br />二，hibernate持久化类及映射文件、数据库操作封装DAO<br />package com.yang.product.booksonline.dao;<br /><br />/**<br />* Members <br />*/<br /><br />public class Members implements java.io.Serializable {<br /><br /><br />  // Fields   <br /><br />  private Integer id;<br />  private String name;<br />  private String password;<br />  private String sex;<br />  private String mail;<br /><br /><br />  // Constructors<br /><br />  /** default constructor */<br />  public Members() {<br />  }<br /><br />     /** minimal constructor */<br />  public Members(String name) {<br />    this.name = name;<br />  }<br />  <br />  /** full constructor */<br />  public Members(String name, String password, String sex, String mail) {<br />    this.name = name;<br />    this.password = password;<br />    this.sex = sex;<br />    this.mail = mail;<br />  }<br /><br />  <br />  // Property accessors<br /><br />  public Integer getId() {<br />    return this.id;<br />  }<br />  <br />  public void setId(Integer id) {<br />    this.id = id;<br />  }<br /><br />  public String getName() {<br />    return this.name;<br />  }<br />  <br />  public void setName(String name) {<br />    this.name = name;<br />  }<br /><br />  public String getPassword() {<br />    return this.password;<br />  }<br />  <br />  public void setPassword(String password) {<br />    this.password = password;<br />  }<br /><br />  public String getSex() {<br />    return this.sex;<br />  }<br />  <br />  public void setSex(String sex) {<br />    this.sex = sex;<br />  }<br /><br />  public String getMail() {<br />    return this.mail;<br />  }<br />  <br />  public void setMail(String mail) {<br />    this.mail = mail;<br />  }<br />}<br /><br />&lt;?xml version="1.0"?&gt;<br />&lt;!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"<br />"<a href="http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" target="_blank"><font color="#000000">http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd</font></a>"&gt;<br />&lt;hibernate-mapping&gt;<br />  &lt;class name="com.yang.product.booksonline.dao.Members" table="members" catalog="books"&gt;<br />    &lt;id name="id" type="integer"&gt;<br />        &lt;column name="id" /&gt;<br />        &lt;generator class="native" /&gt;<br />    &lt;/id&gt;<br />    &lt;property name="name" type="string"&gt;<br />        &lt;column name="name" length="20" not-null="true" unique="true" /&gt;<br />    &lt;/property&gt;<br />    &lt;property name="password" type="string"&gt;<br />        &lt;column name="password" length="20" /&gt;<br />    &lt;/property&gt;<br />    &lt;property name="sex" type="string"&gt;<br />        &lt;column name="sex" length="10" /&gt;<br />    &lt;/property&gt;<br />    &lt;property name="mail" type="string"&gt;<br />        &lt;column name="mail" length="50" /&gt;<br />    &lt;/property&gt;<br />  &lt;/class&gt;<br />&lt;/hibernate-mapping&gt;<br /><br />package com.yang.product.booksonline.dao;<br /><br />import java.util.List;<br />import org.apache.commons.logging.Log;<br />import org.apache.commons.logging.LogFactory;<br />import org.hibernate.LockMode;<br />import org.hibernate.criterion.Example;<br />import org.springframework.context.ApplicationContext;<br />import org.springframework.orm.hibernate3.support.HibernateDaoSupport;<br /><br />/**<br />* Data access object (DAO) for domain model class Members.<br />* @see com.yang.product.booksonline.dao.Members<br />* @author lanxincao<br />*/<br />public class MembersDAO extends HibernateDaoSupport {<br /><br />  private static final Log log = LogFactory.getLog(MembersDAO.class);<br /><br />     protected void initDao() {<br />           //do nothing<br />     }<br />  <br />  public void save(Members transientInstance) {<br />    log.debug("saving Members instance");<br />    try {<br />        getHibernateTemplate().saveOrUpdate(transientInstance);<br />        log.debug("save successful");<br />    } catch (RuntimeException re) {<br />        log.error("save failed", re);<br />        throw re;<br />    }<br />  }<br />  <br />     public void delete(Members persistentInstance) {<br />    log.debug("deleting Members instance");<br />    try {<br />        getHibernateTemplate().delete(persistentInstance);<br />        log.debug("delete successful");<br />    } catch (RuntimeException re) {<br />        log.error("delete failed", re);<br />        throw re;<br />    }<br />  }<br />  <br />  public Members findById( java.lang.Integer id) {<br />    log.debug("getting Members instance with id: " + id);<br />    try {<br />        Members instance = (Members) getHibernateTemplate()<br />            .get("com.yang.product.booksonline.dao.Members", id);<br />        return instance;<br />    } catch (RuntimeException re) {<br />        log.error("get failed", re);<br />        throw re;<br />    }<br />  }<br />  <br />  <br />  public List findByExample(Members instance) {<br />    log.debug("finding Members instance by example");<br />    try {<br />        List results = getSession()<br />            .createCriteria("com.yang.product.booksonline.dao.Members")<br />            .add(Example.create(instance))<br />        .list();<br />        log.debug("find by example successful, result size: " + results.size());<br />        return results;<br />    } catch (RuntimeException re) {<br />        log.error("find by example failed", re);<br />        throw re;<br />    }<br />  }   <br />  <br />  public Members merge(Members detachedInstance) {<br />    log.debug("merging Members instance");<br />    try {<br />        Members result = (Members) getHibernateTemplate()<br />            .merge(detachedInstance);<br />        log.debug("merge successful");<br />        return result;<br />    } catch (RuntimeException re) {<br />        log.error("merge failed", re);<br />        throw re;<br />    }<br />  }<br /><br />  public void attachDirty(Members instance) {<br />    log.debug("attaching dirty Members instance");<br />    try {<br />        getHibernateTemplate().saveOrUpdate(instance);<br />        log.debug("attach successful");<br />    } catch (RuntimeException re) {<br />        log.error("attach failed", re);<br />        throw re;<br />    }<br />  }<br />  <br />  public void attachClean(Members instance) {<br />    log.debug("attaching clean Members instance");<br />    try {<br />        getHibernateTemplate().lock(instance, LockMode.NONE);<br />        log.debug("attach successful");<br />    } catch (RuntimeException re) {<br />        log.error("attach failed", re);<br />        throw re;<br />    }<br />  }<br />  <br />  public List findByMembersName(String name){<br />       log.debug("finding by members' name.");<br />       try {<br />             return getHibernateTemplate().find("from Members as members where members.name = ?"<br />                         ,new String[]{name});<br />       } catch (RuntimeException re) {<br />             log.error("finding by members' name failed",re);<br />             throw re;<br />       }<br />  }<br /><br />     public static MembersDAO getFromApplicationContext(ApplicationContext ctx) {<br />       return (MembersDAO) ctx.getBean("MembersDAO");<br />     }<br />}<br /><br />三，spring配置<br />&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "<a href="http://www.springframework.org/dtd/spring-beans.dtd" target="_blank"><font color="#000000">http://www.springframework.org/dtd/spring-beans.dtd</font></a>"&gt;<br /><br />&lt;beans&gt;<br /><br /><br />     &lt;bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"&gt;<br />           &lt;property name="driverClassName"&gt;<br />                 &lt;value&gt;com.mysql.jdbc.Driver&lt;/value&gt;<br />           &lt;/property&gt;<br />           &lt;property name="url"&gt;<br />                 &lt;value&gt;jdbc:mysql://localhost:3306/books&lt;/value&gt;<br />           &lt;/property&gt;<br />           &lt;property name="username"&gt;<br />                 &lt;value&gt;root&lt;/value&gt;<br />           &lt;/property&gt;<br />           &lt;property name="password"&gt;<br />                 &lt;value&gt;snrdcqmq&lt;/value&gt;<br />           &lt;/property&gt;<br />     &lt;/bean&gt;<br />     &lt;bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"&gt;<br />           &lt;property name="dataSource"&gt;<br />                 &lt;ref bean="dataSource" /&gt;<br />           &lt;/property&gt;<br />           &lt;property name="hibernateProperties"&gt;<br />                 &lt;props&gt;<br />                       &lt;prop key="hibernate.dialect"&gt;org.hibernate.dialect.MySQLDialect&lt;/prop&gt;<br />                 &lt;/props&gt;<br />           &lt;/property&gt;<br />           &lt;property name="mappingResources"&gt;<br />                 &lt;list&gt;<br />                       &lt;value&gt;com/yang/product/booksonline/dao/Members.hbm.xml&lt;/value&gt;<br />                 &lt;/list&gt;<br />           &lt;/property&gt;<br />     &lt;/bean&gt;<br />     &lt;bean id="MembersDAO" class="com.yang.product.booksonline.dao.MembersDAO"&gt;<br />           &lt;property name="sessionFactory"&gt;<br />                 &lt;ref bean="sessionFactory" /&gt;<br />           &lt;/property&gt;<br />     &lt;/bean&gt;<br />     <br />     &lt;bean name="/members" class="com.yang.product.booksonline.action.MembersAction"&gt;<br />           &lt;property name="membersDAO"&gt;<br />                 &lt;ref bean="MembersDAO"/&gt;<br />           &lt;/property&gt;<br />     &lt;/bean&gt;<br />&lt;/beans&gt;<br />四，struts配置及action类<br />&lt;?xml version="1.0" encoding="UTF-8"?&gt;<br />&lt;!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "<a href="http://struts.apache.org/dtds/struts-config_1_2.dtd" target="_blank"><font color="#000000">http://struts.apache.org/dtds/struts-config_1_2.dtd</font></a>"&gt;<br /><br />&lt;struts-config&gt;<br />&lt;data-sources /&gt;<br />&lt;form-beans &gt;<br />  &lt;form-bean name="membersForm" type="org.apache.struts.validator.DynaValidatorForm"&gt;<br />    &lt;form-property name="sex" type="java.lang.String" /&gt;<br />    &lt;form-property name="password" type="java.lang.String" /&gt;<br />    &lt;form-property name="mail" type="java.lang.String" /&gt;<br />    &lt;form-property name="name" type="java.lang.String" /&gt;<br />  &lt;/form-bean&gt;<br /><br />&lt;/form-beans&gt;<br /><br />&lt;global-exceptions /&gt;<br />&lt;global-forwards /&gt;<br />&lt;action-mappings &gt;<br />  &lt;action<br />    attribute="membersForm"<br />    name="membersForm"<br />    parameter="action"<br />    path="/members"<br />    scope="request"<br />    type="org.springframework.web.struts.DelegatingActionProxy" &gt;<br />    &lt;forward name="loginSuccess" path="/index.jsp" /&gt;<br />    &lt;forward name="registerSuccess" path="/index.jsp" /&gt;<br />    &lt;forward name="logoutSuccess" path="/index.jsp" /&gt;<br />  &lt;/action&gt;<br /><br /><br />&lt;/action-mappings&gt;<br /><br />&lt;message-resources parameter="com.yang.product.booksonline.ApplicationResources" /&gt;<br />&lt;plug-in className="org.apache.struts.validator.ValidatorPlugIn"&gt;<br />  &lt;set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" /&gt;<br />  &lt;set-property property="stopOnFirstError" value="true" /&gt;<br />&lt;/plug-in&gt;<br />&lt;plug-in className="org.springframework.web.struts.ContextLoaderPlugIn"&gt;<br />  &lt;set-property property="contextConfigLocation" value="/WEB-INF/springContext.xml" /&gt;<br />&lt;/plug-in&gt;<br /><br />&lt;/struts-config&gt;<br /><br />package com.yang.product.booksonline.action;<br /><br />import java.util.List;<br /><br />import javax.servlet.http.HttpServletRequest;<br />import javax.servlet.http.HttpServletResponse;<br /><br />import org.apache.struts.action.ActionForm;<br />import org.apache.struts.action.ActionForward;<br />import org.apache.struts.action.ActionMapping;<br />import org.apache.struts.action.DynaActionForm;<br />import org.apache.struts.actions.DispatchAction;<br /><br />import com.yang.product.booksonline.dao.Members;<br />import com.yang.product.booksonline.dao.MembersDAO;<br /><br />/** <br />* XDoclet definition:<br />* @struts.action path="/members" name="membersForm" parameter="action" scope="request" validate="true"<br />*/<br />public class MembersAction extends DispatchAction {<br />     private MembersDAO membersDAO;<br /><br />     public MembersDAO getMembersDAO() {<br />           return membersDAO;<br />     }<br /><br />     public void setMembersDAO(MembersDAO membersDAO) {<br />           this.membersDAO = membersDAO;<br />     }<br />     <br />     public ActionForward login (ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) {<br />//            String url = request.getParameter("url");<br />           String name = (String)((DynaActionForm)form).get("name");<br />           String password = (String)((DynaActionForm)form).get("password");<br />           List members = membersDAO.findByMembersName(name);<br />           if (members != null &amp;&amp; members.size() &gt;0) {<br />                 Members member = (Members)members.get(0);<br />                 if (password.equals(member.getPassword())) {<br />                       request.getSession().setAttribute("member",name);<br />                       //return new ActionForward(url);<br />                       return mapping.findForward("loginSuccess");<br />                 } else {<br />                       return null;<br />                 }<br />           } else {<br />                 return null;<br />           }<br />     }<br /><br />     public ActionForward logout (ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) {<br />           request.getSession().removeAttribute("member");<br />           return mapping.findForward("logoutSuccess");<br />     }<br /><br />     public ActionForward register (ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) {<br />           String name = (String)((DynaActionForm)form).get("name");<br />           String password = (String)((DynaActionForm)form).get("password");<br />           String sex = (String)((DynaActionForm)form).get("sex");<br />           String mail = (String)((DynaActionForm)form).get("mail");<br />           List members = membersDAO.findByMembersName(name);<br />           if (members != null &amp;&amp; members.size() &gt;0) {<br />                 return null;<br />           } else {<br />                 Members member = new Members();<br />                 member.setName(name);<br />                 member.setPassword(password);<br />                 member.setSex(sex);<br />                 member.setMail(mail);<br />                 membersDAO.save(member);<br />                 return mapping.findForward("registerSuccess");<br />           }<br />     }<br />}<br /><br />注意到，这里使用了dispatchaction。<br />五，三个jsp部分内容<br />index.jsp<br />&lt;body&gt;<br />&lt;logic:notPresent name="member" scope="session"&gt;<br />     Welcome,you have not &lt;html:link href="login.jsp"&gt;login&lt;/html:link&gt;. &lt;br&gt;<br />&lt;/logic:notPresent&gt;<br />&lt;logic:present name="member" scope="session"&gt;<br />     Welcome,&lt;bean:write name="member" scope="session"/&gt;.&lt;html:link href="members.do?action=logout"&gt;Logout&lt;/html:link&gt;<br />&lt;/logic:present&gt;<br />&lt;/body&gt;<br />login.jsp<br />&lt;body&gt;<br />  If you haven't registered the system,please &lt;html:link href="register.jsp"&gt;register&lt;/html:link&gt;<br />  &lt;html:form action="/members.do?action=login" method="post" focus="name"&gt;<br />    &lt;table border="0"&gt;<br />    &lt;tr&gt;<br />      &lt;td&gt;&lt;bean:message key="members.form.name.label"/&gt;:&lt;/td&gt;<br />      &lt;td&gt;&lt;html:text property="name" /&gt;&lt;/td&gt;<br />    &lt;/tr&gt;<br />    &lt;tr&gt;<br />      &lt;td&gt;&lt;bean:message key="members.form.password.label"/&gt;:&lt;/td&gt;<br />      &lt;td&gt;&lt;html:password property="password" /&gt;&lt;/td&gt;<br />    &lt;/tr&gt;<br />    &lt;tr&gt;<br />      &lt;td colspan="2" align="center"&gt;&lt;html:submit&gt;&lt;bean:message key="members.form.login.label"/&gt;&lt;/html:submit&gt;&lt;/td&gt;<br />    &lt;/tr&gt;<br />    &lt;/table&gt;<br />  &lt;/html:form&gt;<br />&lt;/body&gt;<br />register.jsp<br />&lt;body&gt;<br />  Welcome to register the books online. &lt;br&gt;<br />  &lt;html:form action="/members.do?action=register" method="POST"&gt;<br />  &lt;bean:message key="members.form.name.label"/&gt;:&lt;html:text property="name"/&gt;&lt;br&gt;<br />  &lt;bean:message key="members.form.password.label"/&gt;:&lt;html:password property="password"/&gt;&lt;br&gt;<br />  &lt;bean:message key="members.form.sex.label"/&gt;:<br />  &lt;html:select property="sex"&gt;<br />       &lt;html:option key="members.form.sex.male" value="male" /&gt;<br />       &lt;html:option key="members.form.sex.female" value="female" /&gt;<br />  &lt;/html:select&gt;&lt;br&gt;<br />  &lt;bean:message key="members.form.mail.label"/&gt;:&lt;html:text property="mail"/&gt;&lt;br&gt;<br />  &lt;html:submit&gt;&lt;bean:message key="members.form.register.label"/&gt;&lt;/html:submit&gt;<br />  &lt;/html:form&gt;<br />&lt;/body&gt;<br /><br />注意：在开发过程中，本想加上输入验证的，因为前面己经有了这方面的例子，为了不重复，这里就有意去掉了这部分，但要运行这个例子，还是你自己加上validation.xml、validator-rules.xml两个文件，不然会出错。</span>
<img src ="http://www.blogjava.net/jiabao/aggbug/102712.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jiabao/" target="_blank">金家寶</a> 2007-03-09 01:35 <a href="http://www.blogjava.net/jiabao/articles/102712.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>