亚洲男人天堂av,亚洲人成网站色7799,精品亚洲视频在线观看http://www.tkk7.com/jiabao/category/20481.html機會只會給垂青有準備的人,運氣不是每個人都有的 ...zh-cnSun, 01 Apr 2007 23:54:17 GMTSun, 01 Apr 2007 23:54:17 GMT60玩JPETSTORE的可以看看http://www.tkk7.com/jiabao/articles/107748.html金家寶金家寶Sun, 01 Apr 2007 05:50:00 GMThttp://www.tkk7.com/jiabao/articles/107748.htmlhttp://www.tkk7.com/jiabao/comments/107748.htmlhttp://www.tkk7.com/jiabao/articles/107748.html#Feedback0http://www.tkk7.com/jiabao/comments/commentRss/107748.htmlhttp://www.tkk7.com/jiabao/services/trackbacks/107748.html閱讀全文

金家寶 2007-04-01 13:50 發表評論
]]>
實戰MVC模式http://www.tkk7.com/jiabao/articles/102714.html金家寶金家寶Thu, 08 Mar 2007 17:40:00 GMThttp://www.tkk7.com/jiabao/articles/102714.htmlhttp://www.tkk7.com/jiabao/comments/102714.htmlhttp://www.tkk7.com/jiabao/articles/102714.html#Feedback0http://www.tkk7.com/jiabao/comments/commentRss/102714.htmlhttp://www.tkk7.com/jiabao/services/trackbacks/102714.html1.MVC
2.Observer接口
3.模型Model
4.視圖View
5.控制器Controller
6.運行程序??


--------------------------------------------------------------------------------


MVC

“模型-視圖-控制器(Model-View-Controller,MVC)結構是為那些需要為同樣的數據提供多個視圖的應用程序而設計的,它很好的實現了數據層與表示層的分離。例如下圖中的例子:

我們看到,圖中的幾組數據以不同的形式(View)表現出來,一個是表格樣式,一個是圖形樣式。

MVC把這種應用程序分為三種對象類型:
模型:維護數據并提供數據訪問方法。
視圖:給制模型的部分數據或所有數據的可視圖。
控制器:處理事件.
以下是典型的MVC通信方式,


事件由控制器來處理,控制器接收用戶事件,并根據事件的類型來改變模型。
視圖事先會在模型中登記,當模型數據發生改變時,馬上通知已向此模型登記的每個視圖。
視圖從模取得最新的數據并刷新自己.
要實現MVC,最重要的一個環節是使用Design??Pattern中的Observer模式。Observer模式允許某個對象在所觀察的對象發生修改時通知多個觀察者(Observer).

下面我們就以實例來講解如何用Obserer模式實現MVC的程序結構。在我的例子中,我要實現一個學生年齡顯示的例子。分別用清單和圖形的方式顯示每個學生的年齡。當年齡改變時,自動更新顯示。

Observer接口

為了實現觀察的對象發生修改時通知多個觀察者,通常要在被觀察者與觀察者之間有一個小的接口,如下:
/*??file:??Observer.java??*/
public??interface??Observer
{
????????public??void??dataUpdate(Model??model);
}
這個接口中有一個dataUpdate(Model??model)方法,只要實現了這個接口對象,就成了一個觀察者。

模型Model

再來建立一個數據模型。在我的例子中,先建立了一個數據對象:
/*??file:??Data.java??*/
public??class??Data
{
????????public??int??value;  //??學生年齡值
????????public??String??name; //??學生名
}
現在來建立一個Model:
/*??file:??Model.java??*/
import??java.util.*;
public??class??Model
{
????????ArrayList??data??=??new??ArrayList();
????????ArrayList??observer??=??new??ArrayList();
????????public??Model()
????????{????????super();
????????}
????????public??Model(int[]??value,??String[]??name)
????????{
????????????????for??(??int??i??=??0;??i<??value.length;??i++??
????????????????{
????????????????????????addData(value,name);
????????????????}
????????}
????????public??Model(Data[]??data)
????????{
????????????????for??(??int??i??=??0;??i<??data.length;??i++??
????????????????{
????????????????????????addData(data);
????????????????}
????????}
????????public??void??addData(int??value,??String??name)
????????{
????????????????Data??data??=??new??Data();
????????????????data.value??=??value;
????????????????data.name??=??name;
????????????????this.data.add(data);
????????}
????????public??void??addData(Data??data)
????????{
????????????????this.data.add(data);
????????}
????????public??Data??getData(int??idx)
????????{
????????????????return??(Data)(data.get(idx));
????????}

????????public??int??size()
????????{
????????????????return??data.size();
????????}
  //??用來向模型中登記觀察者.
????????public??void??registerObserver(Observer??o)
????????{
????????????????observer.add(o);
????????}
????????public??void??removeObserver(Observer??o)
????????{
????????????????observer.remove(o);
????????}
????????//??當數據改變時,由Controller調用此方法,通知各個Observer,刷新視圖.
????????public??void??changeModel(Model??model)
????????{
????????????????data.clear();
????????????????for??(int??i=0;??i
????????????????{
????????????????????????this.addData(model.getData(i));
????????????????}
????????????????dataUpdate();
????????}
????????private??void??dataUpdate()
????????{
????????????????for??(Iterator??i??=??observer.iterator();??i.hasNext();??
????????????????{
????????????????????????Observer??o??=??(Observer)(i.next());
????????????????????????o.dataUpdate(this);
????????????????}
????????}
}
這個模型提供各種數據訪問的方法。并提供一個changeModel(Model??model)方法供Controller訪問。還提供一個registerObserver(Observer??o)方法,用來向Model中登記觀察者Observer。

視圖View

我們要實現一個清單顯示樣式的視圖View1和一個圖形方式顯示的視圖View2,并讓它們實現Observer接口,以便當Model數據改變時,自動刷新自己.
/*??file:??View1.java??*/
import??javax.swing.*;
import??java.awt.*;
import??javax.swing.border.*;
public??class??View1??extends??JPanel??implements??Observer
{
????????Model??model;

????????public??View1()
????????{
????????}
????????public??View1(Model??model)
????????{
????????????????try
????????????????{
????????????????????????this.model??=??model;
????????????????????????jbInit();
????????????????}
????????????????catch(Exception??e)
????????????????{
????????????????????????e.printStackTrace();
????????????????}
????????}
????????private??void??jbInit()??throws??Exception
????????{
????????????????this.setBackground(Color.white);
????????????????this.setBorder(new??TitledBorder(BorderFactory.createLineBorder(Color.black,1),"View1");
????????}

????????public??void??paintComponent(Graphics??g)
????????{
????????????????super.paintComponent(g);
????????????????if??(??model??==??null????return;
????????????????int??x??=??20,y??=??50;
????????????????int??h??=??g.getFontMetrics().getHeight();
????????????????for??(??int??i=0;??i<??model.size();??i++??
????????????????{
????????????????????????Data??data??=??model.getData(i);
????????????????????????g.drawString(data.name,x,y);
????????????????????????y+=h;
????????????????????????g.drawString(String.valueOf(data.value),x,y);
????????????????????????y+=h;
????????????????}
????????}
????????//??當模型數據發生改變時,會自動調用此方法來刷新圖形
????????public??void??dataUpdate(Model??model)
????????{
????????????????/**@todo:??Implement??this??Observer??method*/
????????????????this.model??=??model;
????????????????repaint();
????????}
}
/*??file:??View2.java??*/
import??javax.swing.*;
import??java.awt.*;
import??javax.swing.border.*;
public??class??View2??extends??JPanel??implements??Observer
{
????????Model??model;

????????public??View2()
????????{
????????}
????????public??View2(Model??model)
????????{
????????????????try
????????????????{
????????????????????????this.model??=??model;
????????????????????????jbInit();
????????????????}
????????????????catch(Exception??e)
????????????????{
????????????????????????e.printStackTrace();
????????????????}
????????}
????????private??void??jbInit()??throws??Exception
????????{
????????????????this.setBackground(Color.white);
????????????????this.setBorder(new??TitledBorder(BorderFactory.createLineBorder(Color.black,1),"View1");
????????}

????????public??void??paintComponent(Graphics??g)
????????{
????????????????super.paintComponent(g);
????????????????if??(??model??==??null????return;
????????????????int??x??=??20,y??=??50;
????????????????int??h??=??g.getFontMetrics().getHeight();
????????????????int??width??=??this.getWidth();
????????????????int??height??=??this.getHeight();
????????????????int??sy??=??height??/??model.size();
????????????????int??sx??=??width/??2;
????????????????for??(??int??i=0;??i<??model.size();??i++??
????????????????{
????????????????????????Data??data??=??model.getData(i);
????????????????????????int??value??=??data.value;
????????????????????????int??dx??=??3;
????????????????????????int??r??=??3;
????????????????????????Color??c??=??new??Color((int)(255*Math.random()),(int)(255*Math.random()),(int)(255*Math.random()));
????????????????????????int??cx??=??sx;
????????????????????????int??cy??=??y+i??*??sy;
????????????????????????for??(??int??j=0;j
????????????????????????{
????????????????????????????????g.setColor(c);
????????????????????????????????g.drawOval(cx,cy,r,r);
????????????????????????????????r+=dx;
????????????????????????}
????????????????????????g.drawString(data.name,25,cy);
????????????????}
????????}
????????//??當模型數據發生改變時,會自動調用此方法來刷新圖形
????????public??void??dataUpdate(Model??model)
????????{
????????????????/**@todo:??Implement??this??Observer??method*/
????????????????this.model??=??model;
????????????????repaint();
????????}
}

控制器Controller

好了,MVC中的Model,Observer都建立好了,我們最后來做一個Controller:
import??java.awt.*;
import??javax.swing.*;
import??javax.swing.border.*;
import??java.awt.event.*;
public??class??Controller??extends??JFrame
{
????????Model??model??=????new??Model();
????????View1??view1??=??new??View1(model);
????????View2??view2??=??new??View2(model);
????????JScrollPane??jScrollPane1??=??new??JScrollPane();
????????JButton??jButton1??=??new??JButton();
????????JTextField??jTextField1??=??new??JTextField();
????????JTextField??jTextField2??=??new??JTextField();
????????JLabel??jLabel1??=??new??JLabel();
????????JLabel??jLabel2??=??new??JLabel();
????????JLabel??jLabel3??=??new??JLabel();
????????public??Controller()
????????{
????????????????try
????????????????{
????????????????????????jbInit();
????????????????}
????????????????catch(Exception??e)
????????????????{
????????????????????????e.printStackTrace();
????????????????}

????????}
????????private??void??jbInit()??throws??Exception
????????{
????????????????Data[]??data??=??new??Data[2];
????????????????data[0]??=??new??Data();
????????????????data[1]??=??new??Data();
????????????????data[0].name??=??"Ted";
????????????????data[0].value??=??20;
????????????????data[1].name??=??"Joy";
????????????????data[1].value??=??14;
????????????????model.addData(data[0]);
????????????????model.addData(data[1]);
????????????????//??注意下面兩行:向模型中登記它的觀察者View1和View2.
????????????????model.registerObserver(view1);
????????????????model.registerObserver(view2);

????????????????this.getContentPane().setLayout(null);
????????????????jScrollPane1.setBounds(new??Rectangle(0,??0,??3,??3));
????????????????jButton1.setBounds(new??Rectangle(309,??259,??101,??27));
????????????????jButton1.setText("Update";
????????????????jButton1.addActionListener(new??java.awt.event.ActionListener()
????????????????{
????????????????????????public??void??actionPerformed(ActionEvent??e)
????????????????????????{
????????????????????????????????jButton1_actionPerformed(e);
????????????????????????}
????????????????});
????????????????jTextField1.setText("20";
????????????????jTextField1.setBounds(new??Rectangle(80,??254,??52,??30));
????????????????jTextField2.setText("14";
????????????????jTextField2.setBounds(new??Rectangle(178,??255,??50,??31));
????????????????jLabel1.setText("Age:";
????????????????jLabel1.setBounds(new??Rectangle(41,??226,??47,??23));
????????????????jLabel2.setText("Ted";
????????????????jLabel2.setBounds(new??Rectangle(42,??252,??35,??33));
????????????????jLabel3.setText("Joy";
????????????????jLabel3.setBounds(new??Rectangle(144,??255,??31,??31));
????????????????view1.setBounds(new??Rectangle(7,??5,??225,??20);
????????????????view2.setBounds(new??Rectangle(234,??4,??219,??209));
????????????????this.getContentPane().add(jScrollPane1,??null);
????????????????this.getContentPane().add(jTextField2,??null);
????????????????this.getContentPane().add(jTextField1,??null);
????????????????this.getContentPane().add(jLabel2,??null);
????????????????this.getContentPane().add(jLabel3,??null);
????????????????this.getContentPane().add(jLabel1,??null);
????????????????this.getContentPane().add(jButton1,??null);
????????????????this.getContentPane().add(view1,??null);
????????????????this.getContentPane().add(view2,??null);
????????}
????????//??按下Update按鈕,通知Model數據發生改變.
????????void??jButton1_actionPerformed(ActionEvent??e)
????????{
????????????????Data[]??data??=??new??Data[2];
????????????????data[0]??=??new??Data();
????????????????data[1]??=??new??Data();
????????????????data[0].name??=??jLabel1.getText();
????????????????data[0].value??=??Integer.parseInt(jTextField1.getText());
????????????????data[1].name??=??jLabel2.getText();
????????????????data[1].value??=??Integer.parseInt(jTextField2.getText());
????????????????Model??m??=??new??Model(data);
????????????????this.model.changeModel(m);
????????}
????????public??static??void??main(String[]??args)
????????{
????????????????Controller??c??=??new??Controller();
????????????????c.setSize(475,310);
????????????????c.setVisible(true);
????????}
}

運行程序

各位可以將這些代碼各自存為相應的源文件,執行以下命令編譯
javac??Controller.java
運行
java??Controller.class
就可以看到程序執行的效果,



你可以試著改變兩個學生的年齡,按一下Update按鈕,相應的視圖就更新了。怎么樣,體驗到了MVC結構給程序帶來的方便性了吧?;


金家寶 2007-03-09 01:40 發表評論
]]>
spring hibernate struts整合開發實例http://www.tkk7.com/jiabao/articles/102712.html金家寶金家寶Thu, 08 Mar 2007 17:35:00 GMThttp://www.tkk7.com/jiabao/articles/102712.htmlhttp://www.tkk7.com/jiabao/comments/102712.htmlhttp://www.tkk7.com/jiabao/articles/102712.html#Feedback0http://www.tkk7.com/jiabao/comments/commentRss/102712.htmlhttp://www.tkk7.com/jiabao/services/trackbacks/102712.html一,數據表(因為是一個小例子,所以只有一個表,畢竟這不是一個講怎么配置hibernate級聯的例子。)
CREATE TABLE `members` (
`id` int(7) NOT NULL auto_increment,
`name` varchar(20) NOT NULL default '',
`password` varchar(20) default NULL,
`sex` varchar(10) default NULL,
`mail` varchar(50) default NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`)
) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
二,hibernate持久化類及映射文件、數據庫操作封裝DAO
package com.yang.product.booksonline.dao;

/**
* Members
*/

public class Members implements java.io.Serializable {


? // Fields ?

? private Integer id;
? private String name;
? private String password;
? private String sex;
? private String mail;


? // Constructors

? /** default constructor */
? public Members() {
? }

? ? ?/** minimal constructor */
? public Members(String name) {
? ? this.name = name;
? }
?
? /** full constructor */
? public Members(String name, String password, String sex, String mail) {
? ? this.name = name;
? ? this.password = password;
? ? this.sex = sex;
? ? this.mail = mail;
? }

?
? // Property accessors

? public Integer getId() {
? ? return this.id;
? }
?
? public void setId(Integer id) {
? ? this.id = id;
? }

? public String getName() {
? ? return this.name;
? }
?
? public void setName(String name) {
? ? this.name = name;
? }

? public String getPassword() {
? ? return this.password;
? }
?
? public void setPassword(String password) {
? ? this.password = password;
? }

? public String getSex() {
? ? return this.sex;
? }
?
? public void setSex(String sex) {
? ? this.sex = sex;
? }

? public String getMail() {
? ? return this.mail;
? }
?
? public void setMail(String mail) {
? ? this.mail = mail;
? }
}

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
? <class name="com.yang.product.booksonline.dao.Members" table="members" catalog="books">
? ? <id name="id" type="integer">
? ? ? ? <column name="id" />
? ? ? ? <generator class="native" />
? ? </id>
? ? <property name="name" type="string">
? ? ? ? <column name="name" length="20" not-null="true" unique="true" />
? ? </property>
? ? <property name="password" type="string">
? ? ? ? <column name="password" length="20" />
? ? </property>
? ? <property name="sex" type="string">
? ? ? ? <column name="sex" length="10" />
? ? </property>
? ? <property name="mail" type="string">
? ? ? ? <column name="mail" length="50" />
? ? </property>
? </class>
</hibernate-mapping>

package com.yang.product.booksonline.dao;

import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.hibernate.LockMode;
import org.hibernate.criterion.Example;
import org.springframework.context.ApplicationContext;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

/**
* Data access object (DAO) for domain model class Members.
* @see com.yang.product.booksonline.dao.Members
* @author lanxincao
*/
public class MembersDAO extends HibernateDaoSupport {

? private static final Log log = LogFactory.getLog(MembersDAO.class);

? ? ?protected void initDao() {
? ? ? ? ? ?//do nothing
? ? ?}
?
? public void save(Members transientInstance) {
? ? log.debug("saving Members instance");
? ? try {
? ? ? ? getHibernateTemplate().saveOrUpdate(transientInstance);
? ? ? ? log.debug("save successful");
? ? } catch (RuntimeException re) {
? ? ? ? log.error("save failed", re);
? ? ? ? throw re;
? ? }
? }
?
? ? ?public void delete(Members persistentInstance) {
? ? log.debug("deleting Members instance");
? ? try {
? ? ? ? getHibernateTemplate().delete(persistentInstance);
? ? ? ? log.debug("delete successful");
? ? } catch (RuntimeException re) {
? ? ? ? log.error("delete failed", re);
? ? ? ? throw re;
? ? }
? }
?
? public Members findById( java.lang.Integer id) {
? ? log.debug("getting Members instance with id: " + id);
? ? try {
? ? ? ? Members instance = (Members) getHibernateTemplate()
? ? ? ? ? ? .get("com.yang.product.booksonline.dao.Members", id);
? ? ? ? return instance;
? ? } catch (RuntimeException re) {
? ? ? ? log.error("get failed", re);
? ? ? ? throw re;
? ? }
? }
?
?
? public List findByExample(Members instance) {
? ? log.debug("finding Members instance by example");
? ? try {
? ? ? ? List results = getSession()
? ? ? ? ? ? .createCriteria("com.yang.product.booksonline.dao.Members")
? ? ? ? ? ? .add(Example.create(instance))
? ? ? ? .list();
? ? ? ? log.debug("find by example successful, result size: " + results.size());
? ? ? ? return results;
? ? } catch (RuntimeException re) {
? ? ? ? log.error("find by example failed", re);
? ? ? ? throw re;
? ? }
? } ?
?
? public Members merge(Members detachedInstance) {
? ? log.debug("merging Members instance");
? ? try {
? ? ? ? Members result = (Members) getHibernateTemplate()
? ? ? ? ? ? .merge(detachedInstance);
? ? ? ? log.debug("merge successful");
? ? ? ? return result;
? ? } catch (RuntimeException re) {
? ? ? ? log.error("merge failed", re);
? ? ? ? throw re;
? ? }
? }

? public void attachDirty(Members instance) {
? ? log.debug("attaching dirty Members instance");
? ? try {
? ? ? ? getHibernateTemplate().saveOrUpdate(instance);
? ? ? ? log.debug("attach successful");
? ? } catch (RuntimeException re) {
? ? ? ? log.error("attach failed", re);
? ? ? ? throw re;
? ? }
? }
?
? public void attachClean(Members instance) {
? ? log.debug("attaching clean Members instance");
? ? try {
? ? ? ? getHibernateTemplate().lock(instance, LockMode.NONE);
? ? ? ? log.debug("attach successful");
? ? } catch (RuntimeException re) {
? ? ? ? log.error("attach failed", re);
? ? ? ? throw re;
? ? }
? }
?
? public List findByMembersName(String name){
? ? ? ?log.debug("finding by members' name.");
? ? ? ?try {
? ? ? ? ? ? ?return getHibernateTemplate().find("from Members as members where members.name = ?"
? ? ? ? ? ? ? ? ? ? ? ? ?,new String[]{name});
? ? ? ?} catch (RuntimeException re) {
? ? ? ? ? ? ?log.error("finding by members' name failed",re);
? ? ? ? ? ? ?throw re;
? ? ? ?}
? }

? ? ?public static MembersDAO getFromApplicationContext(ApplicationContext ctx) {
? ? ? ?return (MembersDAO) ctx.getBean("MembersDAO");
? ? ?}
}

三,spring配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>


? ? ?<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
? ? ? ? ? ?<property name="driverClassName">
? ? ? ? ? ? ? ? ?<value>com.mysql.jdbc.Driver</value>
? ? ? ? ? ?</property>
? ? ? ? ? ?<property name="url">
? ? ? ? ? ? ? ? ?<value>jdbc:mysql://localhost:3306/books</value>
? ? ? ? ? ?</property>
? ? ? ? ? ?<property name="username">
? ? ? ? ? ? ? ? ?<value>root</value>
? ? ? ? ? ?</property>
? ? ? ? ? ?<property name="password">
? ? ? ? ? ? ? ? ?<value>snrdcqmq</value>
? ? ? ? ? ?</property>
? ? ?</bean>
? ? ?<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
? ? ? ? ? ?<property name="dataSource">
? ? ? ? ? ? ? ? ?<ref bean="dataSource" />
? ? ? ? ? ?</property>
? ? ? ? ? ?<property name="hibernateProperties">
? ? ? ? ? ? ? ? ?<props>
? ? ? ? ? ? ? ? ? ? ? ?<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
? ? ? ? ? ? ? ? ?</props>
? ? ? ? ? ?</property>
? ? ? ? ? ?<property name="mappingResources">
? ? ? ? ? ? ? ? ?<list>
? ? ? ? ? ? ? ? ? ? ? ?<value>com/yang/product/booksonline/dao/Members.hbm.xml</value>
? ? ? ? ? ? ? ? ?</list>
? ? ? ? ? ?</property>
? ? ?</bean>
? ? ?<bean id="MembersDAO" class="com.yang.product.booksonline.dao.MembersDAO">
? ? ? ? ? ?<property name="sessionFactory">
? ? ? ? ? ? ? ? ?<ref bean="sessionFactory" />
? ? ? ? ? ?</property>
? ? ?</bean>
? ? ?
? ? ?<bean name="/members" class="com.yang.product.booksonline.action.MembersAction">
? ? ? ? ? ?<property name="membersDAO">
? ? ? ? ? ? ? ? ?<ref bean="MembersDAO"/>
? ? ? ? ? ?</property>
? ? ?</bean>
</beans>
四,struts配置及action類
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">

<struts-config>
<data-sources />
<form-beans >
? <form-bean name="membersForm" type="org.apache.struts.validator.DynaValidatorForm">
? ? <form-property name="sex" type="java.lang.String" />
? ? <form-property name="password" type="java.lang.String" />
? ? <form-property name="mail" type="java.lang.String" />
? ? <form-property name="name" type="java.lang.String" />
? </form-bean>

</form-beans>

<global-exceptions />
<global-forwards />
<action-mappings >
? <action
? ? attribute="membersForm"
? ? name="membersForm"
? ? parameter="action"
? ? path="/members"
? ? scope="request"
? ? type="org.springframework.web.struts.DelegatingActionProxy" >
? ? <forward name="loginSuccess" path="/index.jsp" />
? ? <forward name="registerSuccess" path="/index.jsp" />
? ? <forward name="logoutSuccess" path="/index.jsp" />
? </action>


</action-mappings>

<message-resources parameter="com.yang.product.booksonline.ApplicationResources" />
<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
? <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validation.xml" />
? <set-property property="stopOnFirstError" value="true" />
</plug-in>
<plug-in className="org.springframework.web.struts.ContextLoaderPlugIn">
? <set-property property="contextConfigLocation" value="/WEB-INF/springContext.xml" />
</plug-in>

</struts-config>

package com.yang.product.booksonline.action;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.DynaActionForm;
import org.apache.struts.actions.DispatchAction;

import com.yang.product.booksonline.dao.Members;
import com.yang.product.booksonline.dao.MembersDAO;

/**
* XDoclet definition:
* @struts.action path="/members" name="membersForm" parameter="action" scope="request" validate="true"
*/
public class MembersAction extends DispatchAction {
? ? ?private MembersDAO membersDAO;

? ? ?public MembersDAO getMembersDAO() {
? ? ? ? ? ?return membersDAO;
? ? ?}

? ? ?public void setMembersDAO(MembersDAO membersDAO) {
? ? ? ? ? ?this.membersDAO = membersDAO;
? ? ?}
? ? ?
? ? ?public ActionForward login (ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) {
// ? ? ? ? ? ?String url = request.getParameter("url");
? ? ? ? ? ?String name = (String)((DynaActionForm)form).get("name");
? ? ? ? ? ?String password = (String)((DynaActionForm)form).get("password");
? ? ? ? ? ?List members = membersDAO.findByMembersName(name);
? ? ? ? ? ?if (members != null && members.size() >0) {
? ? ? ? ? ? ? ? ?Members member = (Members)members.get(0);
? ? ? ? ? ? ? ? ?if (password.equals(member.getPassword())) {
? ? ? ? ? ? ? ? ? ? ? ?request.getSession().setAttribute("member",name);
? ? ? ? ? ? ? ? ? ? ? ?//return new ActionForward(url);
? ? ? ? ? ? ? ? ? ? ? ?return mapping.findForward("loginSuccess");
? ? ? ? ? ? ? ? ?} else {
? ? ? ? ? ? ? ? ? ? ? ?return null;
? ? ? ? ? ? ? ? ?}
? ? ? ? ? ?} else {
? ? ? ? ? ? ? ? ?return null;
? ? ? ? ? ?}
? ? ?}

? ? ?public ActionForward logout (ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) {
? ? ? ? ? ?request.getSession().removeAttribute("member");
? ? ? ? ? ?return mapping.findForward("logoutSuccess");
? ? ?}

? ? ?public ActionForward register (ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) {
? ? ? ? ? ?String name = (String)((DynaActionForm)form).get("name");
? ? ? ? ? ?String password = (String)((DynaActionForm)form).get("password");
? ? ? ? ? ?String sex = (String)((DynaActionForm)form).get("sex");
? ? ? ? ? ?String mail = (String)((DynaActionForm)form).get("mail");
? ? ? ? ? ?List members = membersDAO.findByMembersName(name);
? ? ? ? ? ?if (members != null && members.size() >0) {
? ? ? ? ? ? ? ? ?return null;
? ? ? ? ? ?} else {
? ? ? ? ? ? ? ? ?Members member = new Members();
? ? ? ? ? ? ? ? ?member.setName(name);
? ? ? ? ? ? ? ? ?member.setPassword(password);
? ? ? ? ? ? ? ? ?member.setSex(sex);
? ? ? ? ? ? ? ? ?member.setMail(mail);
? ? ? ? ? ? ? ? ?membersDAO.save(member);
? ? ? ? ? ? ? ? ?return mapping.findForward("registerSuccess");
? ? ? ? ? ?}
? ? ?}
}

注意到,這里使用了dispatchaction。
五,三個jsp部分內容
index.jsp
<body>
<logic:notPresent name="member" scope="session">
? ? ?Welcome,you have not <html:link href="login.jsp">login</html:link>. <br>
</logic:notPresent>
<logic:present name="member" scope="session">
? ? ?Welcome,<bean:write name="member" scope="session"/>.<html:link href="members.do?action=logout">Logout</html:link>
</logic:present>
</body>
login.jsp
<body>
? If you haven't registered the system,please <html:link href="register.jsp">register</html:link>
? <html:form action="/members.do?action=login" method="post" focus="name">
? ? <table border="0">
? ? <tr>
? ? ? <td><bean:message key="members.form.name.label"/>:</td>
? ? ? <td><html:text property="name" /></td>
? ? </tr>
? ? <tr>
? ? ? <td><bean:message key="members.form.password.label"/>:</td>
? ? ? <td><html:password property="password" /></td>
? ? </tr>
? ? <tr>
? ? ? <td colspan="2" align="center"><html:submit><bean:message key="members.form.login.label"/></html:submit></td>
? ? </tr>
? ? </table>
? </html:form>
</body>
register.jsp
<body>
? Welcome to register the books online. <br>
? <html:form action="/members.do?action=register" method="POST">
? <bean:message key="members.form.name.label"/>:<html:text property="name"/><br>
? <bean:message key="members.form.password.label"/>:<html:password property="password"/><br>
? <bean:message key="members.form.sex.label"/>:
? <html:select property="sex">
? ? ? ?<html:option key="members.form.sex.male" value="male" />
? ? ? ?<html:option key="members.form.sex.female" value="female" />
? </html:select><br>
? <bean:message key="members.form.mail.label"/>:<html:text property="mail"/><br>
? <html:submit><bean:message key="members.form.register.label"/></html:submit>
? </html:form>
</body>

注意:在開發過程中,本想加上輸入驗證的,因為前面己經有了這方面的例子,為了不重復,這里就有意去掉了這部分,但要運行這個例子,還是你自己加上validation.xml、validator-rules.xml兩個文件,不然會出錯。

金家寶 2007-03-09 01:35 發表評論
]]>
主站蜘蛛池模板: 美女视频黄频a免费大全视频| 国产精品极品美女自在线观看免费| 一级毛片免费播放视频| 最近中文字幕免费2019| 日本一线a视频免费观看| 亚洲精品无码成人片久久| tom影院亚洲国产一区二区| 亚洲第一视频在线观看免费| 亚洲成人免费电影| 亚洲日韩国产成网在线观看| 亚洲国产精品久久久久秋霞影院| 污视频网站在线观看免费| 亚洲美女视频免费| 亚洲永久无码3D动漫一区| 亚洲AV男人的天堂在线观看| 十八禁视频在线观看免费无码无遮挡骂过 | 久久久久亚洲av无码专区蜜芽| 亚洲色大成网站www永久网站| 青青操视频在线免费观看| 免费看香港一级毛片| 婷婷精品国产亚洲AV麻豆不片| 国产区图片区小说区亚洲区| 久久午夜夜伦鲁鲁片免费无码影视 | 亚洲aⅴ天堂av天堂无码麻豆 | 亚欧免费无码aⅴ在线观看| 国产特级淫片免费看| 亚洲欧洲日产专区| 中文在线观看国语高清免费| 免费观看理论片毛片| 亚洲一卡2卡三卡4卡有限公司| 永久免费无码日韩视频| 成年私人影院免费视频网站| 亚洲卡一卡2卡三卡4卡无卡三| 一本久久免费视频| 免费无码又爽又刺激高潮| 亚洲福利视频网址| 成全视频免费观看在线看| 亚洲?V乱码久久精品蜜桃| 亚洲日韩精品无码专区加勒比| 最近免费2019中文字幕大全| 亚洲精品国产精品乱码不99|