亚洲男人天堂av,亚洲人成网站色7799,精品亚洲视频在线观看 http://www.tkk7.com/jiabao/category/20481.html機會只會給垂青有準備的人,運氣不是每個人都有的 ... zh-cn Sun, 01 Apr 2007 23:54:17 GMT Sun, 01 Apr 2007 23:54:17 GMT 60 玩JPETSTORE的可以看看 http://www.tkk7.com/jiabao/articles/107748.html金家寶 金家寶 Sun, 01 Apr 2007 05:50:00 GMT http://www.tkk7.com/jiabao/articles/107748.html http://www.tkk7.com/jiabao/comments/107748.html http://www.tkk7.com/jiabao/articles/107748.html#Feedback 0 http://www.tkk7.com/jiabao/comments/commentRss/107748.html http://www.tkk7.com/jiabao/services/trackbacks/107748.html 閱讀全文 ]]> 實戰MVC模式 http://www.tkk7.com/jiabao/articles/102714.html金家寶 金家寶 Thu, 08 Mar 2007 17:40:00 GMT http://www.tkk7.com/jiabao/articles/102714.html http://www.tkk7.com/jiabao/comments/102714.html http://www.tkk7.com/jiabao/articles/102714.html#Feedback 0 http://www.tkk7.com/jiabao/comments/commentRss/102714.html http://www.tkk7.com/jiabao/services/trackbacks/102714.html 1.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結構給程序帶來的方便性了吧?; ]]> spring hibernate struts整合開發實例 http://www.tkk7.com/jiabao/articles/102712.html金家寶 金家寶 Thu, 08 Mar 2007 17:35:00 GMT http://www.tkk7.com/jiabao/articles/102712.html http://www.tkk7.com/jiabao/comments/102712.html http://www.tkk7.com/jiabao/articles/102712.html#Feedback 0 http://www.tkk7.com/jiabao/comments/commentRss/102712.html http://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兩個文件,不然會出錯。
]]>
主站蜘蛛池模板:
美女视频黄频a免费大全视频 |
国产精品极品美女自在线观看免费 |
一级毛片免费播放视频 |
最近中文字幕免费2019 |
日本一线a视频免费观看 |
亚洲精品无码成人片久久 |
tom影院亚洲国产一区二区 |
亚洲第一视频在线观看免费 |
亚洲成人免费电影 |
亚洲日韩国产成网在线观看 |
亚洲国产精品久久久久秋霞影院 |
污视频网站在线观看免费 |
亚洲美女视频免费 |
亚洲永久无码3D动漫一区 |
亚洲AV男人的天堂在线观看 |
十八禁视频在线观看免费无码无遮挡骂过
|
久久久久亚洲av无码专区蜜芽 |
亚洲色大成网站www永久网站 |
青青操视频在线免费观看 |
免费看香港一级毛片 |
婷婷精品国产亚洲AV麻豆不片 |
国产区图片区小说区亚洲区 |
久久午夜夜伦鲁鲁片免费无码影视
|
亚洲aⅴ天堂av天堂无码麻豆
|
亚欧免费无码aⅴ在线观看 |
国产特级淫片免费看 |
亚洲欧洲日产专区 |
中文在线观看国语高清免费 |
免费观看理论片毛片 |
亚洲一卡2卡三卡4卡有限公司 |
永久免费无码日韩视频 |
成年私人影院免费视频网站 |
亚洲卡一卡2卡三卡4卡无卡三 |
一本久久免费视频 |
免费无码又爽又刺激高潮 |
亚洲福利视频网址 |
成全视频免费观看在线看 |
亚洲?V乱码久久精品蜜桃 |
亚洲日韩精品无码专区加勒比 |
最近免费2019中文字幕大全 |
亚洲精品国产精品乱码不99 |