posts - 14, comments - 22, trackbacks - 0, articles - 4
            BlogJava :: 首頁 ::  :: 聯(lián)系 :: 聚合  :: 管理
          看到題目,您一定覺得很土,Struts早已風(fēng)靡,而關(guān)于Stuts的文章也早已遍地都是,如果你覺得土那你就別看了,我只是把我這段時(shí)間學(xué)到的一些比較膚淺知識(shí)在這里記錄一下,如果您真在這些連載文章中獲得了您想要的知識(shí),那么我就會(huì)很欣慰了。
          ??????? 這不快畢業(yè)了嗎?我選的題目就和Struts有關(guān),做一個(gè)關(guān)于學(xué)校的畢業(yè)設(shè)計(jì)選題系統(tǒng),就是B/S結(jié)構(gòu),訪問數(shù)據(jù)庫的一些俗套的東西,為了鞏固我這段時(shí)間學(xué)習(xí)Struts,我把這個(gè)系統(tǒng)竟往難里做,這樣對(duì)我這個(gè)動(dòng)手能力差的人,實(shí)際工作經(jīng)驗(yàn)少的人來說,會(huì)有點(diǎn)幫助吧?
          ????????當(dāng)初就是這樣想的,所以就開始了我的Struts之旅。
          ??????? 那我就從我的第一頁講起吧,當(dāng)然第一頁一般都是登陸,至于怎么配置Struts,您還是參考一些別人的文章吧,我覺得寫這些就夠土的了,寫怎么配置,怎么實(shí)現(xiàn)就更土!

          ????????<%@ page contentType="text/html; charset=gb2312"%>
          ????????<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>
          ?????? <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>
          ?????? <html:javascript dynamicJavascript="true" staticJavascript="true" formName="LoginForm"/>這句是生成驗(yàn)證登陸表單所需要的js代碼
          ?????? <html:form action="/ajax.do?method=login" onsubmit="return validateLoginForm(this)">
          ????????????用戶名:<html:text property="user" size="16" maxlength="16"/>
          ????????????密碼:??? <html:password property="password" size="16" maxlength="16"/>
          ???????????????????????????<html:submit styleClass="loginbutton" property="submit" value="登陸"/>
          ???????????????????????????<html:button property="reg" styleClass="loginbutton"?
          ????????????????????????????????????onclick="window.location='ajax.do?method=register'" value="注冊(cè)"/>
          ???????????????????????????<html:errors property="user"/><html:errors property="password"/>
          ???????</html:form>

          ?????? 把控制格式的HTML刪除掉,應(yīng)該剩下這些就是主干了,對(duì)于這個(gè)畢業(yè)設(shè)計(jì)選題系統(tǒng),有三種角色,管理員(Admin),教師(Teacher),學(xué)生(Student)而我把他們的登陸都做到了一起,在后臺(tái)這三種角色也是都放在了一個(gè)表中,對(duì)于他們這三種對(duì)象,都是繼承于Person的類,所以在登陸時(shí)可以忽視他們的具體角色,用多態(tài)來實(shí)現(xiàn)登陸。
          ????????

          ????action="/ajax.do?method=login" :將一些關(guān)于登陸啊,注冊(cè)的一些亂七八糟的操作我都放到了一個(gè)DispatchAction,之后可以用method的不同來分別調(diào)用不同的功能。
          ???onsubmit="return validateLoginForm(this)":這個(gè)是用來實(shí)現(xiàn)Struts自帶的validate驗(yàn)證
          ???<html:errors property="user"/><html:errors property="password"/> :是用來顯示在登陸時(shí)的錯(cuò)誤信息

          ??? 在這里需要的Struts相關(guān)配置會(huì)有如下的幾個(gè)方面:
          ??????首先是要對(duì)配置文件進(jìn)行配置我們登陸時(shí)需要的FormBean和Action
          ???????(1)struts-config.xml:
          ????????????<form-bean name="LoginForm" type="com.boya.subject.view.LoginForm" />
          ??????????? <action path="/ajax" type="com.boya.subject.controller.InterDispatchAction" name="LoginForm" scope="request" validate="true" input="/index.jsp" parameter="method">
          ??????????????????<forward name="fail" path="/index.jsp" />?? 對(duì)于登陸失敗,我們準(zhǔn)備返回到這里
          ???????????</action>
          ???? (2)validation.xml:
          ????????????<constant>
          ??????????????????<constant-name>user</constant-name>
          ??????????????????<constant-value>^[0-9a-zA-Z]*$</constant-value>
          ???????????????這里是常量配置,因?yàn)槲覀冞€會(huì)需要到用戶名的驗(yàn)證,所以把他設(shè)置為了常量
          ???????????</constant>
          ????????? 下面是對(duì)這個(gè)bean的具體嚴(yán)整手段了,按字段field分別來寫他們所依賴depaends的檢驗(yàn)手段,常用的有必須填required,正則表達(dá)式驗(yàn)證mask,最大maxlength和最小minlength
          ????????????<form name="LoginForm">
          ??????????????<field property="user"對(duì)應(yīng)LoginForm里的一個(gè)屬性? depends="required,mask,minlength,maxlength">
          ???????????????????<msg name="mask" key="input.user.mask" />從application.properties里讀取input.user.mask???????????
          ??????????????????? <arg0 key="input.user" resource="true" />從application.properties里讀取input.user
          ?????????????????? <arg1 name="minlength" key="${var:minlength}" resource="false" />
          ?????????????????? <arg1 name="maxlength" key="${var:maxlength}" resource="false" />
          ????????????????? 以上三部分構(gòu)成了js的一條錯(cuò)誤提示,以下是具體的嚴(yán)整規(guī)則了
          ??????????????? <var>
          ????????????????????<var-name>mask</var-name>
          ????????????????????<var-value>${user}</var-value>
          ????????????????</var>
          ????????????????<var>
          ????????????????????<var-name>minlength</var-name>
          ????????????????????<var-value>1</var-value>
          ????????????????</var>
          ????????????????<var>
          ????????????????????<var-name>maxlength</var-name>
          ????????????????????<var-value>16</var-value>
          ????????????????</var>
          ?????????</field>

          ???<field property="password"
          ????depends="required,mask,minlength,maxlength">
          ????<arg0 key="input.password" resource="true" />
          ????<arg1 name="minlength" key="${var:minlength}"
          ?????resource="false" />
          ????<arg1 name="maxlength" key="${var:maxlength}"
          ?????resource="false" />
          ????<var>
          ?????<var-name>mask</var-name>
          ?????<var-value>${password}</var-value>
          ????</var>
          ????<var>
          ?????<var-name>minlength</var-name>
          ?????<var-value>1</var-value>
          ????</var>
          ????<var>
          ?????<var-name>maxlength</var-name>
          ?????<var-value>16</var-value>
          ????</var>
          ???</field>

          ??</form>
          ?對(duì)于我們需要的FormBean是這樣寫的:
          package com.boya.subject.view;

          import javax.servlet.http.HttpServletRequest;
          import org.apache.struts.action.*;

          public class LoginForm extends ActionForm
          {
          ??? private static final long serialVersionUID = 1L;
          ??? private String user = null;
          ??? private String password = null;

          ??? public String getPassword()
          ??? {
          ??????? return password;
          ??? }

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

          ??? public String getUser()
          ??? {
          ??????? return user;
          ??? }

          ??? public void setUser( String user )
          ??? {
          ??????? this.user = user;
          ??? }
          ???
          ??? public void reset(ActionMapping mapping,HttpServletRequest request)
          ??? {
          ??????? this.password = null;這里很重要,當(dāng)用戶輸入有錯(cuò)時(shí),需要返回登陸界面給用戶,為了用戶填寫方便我們可以設(shè)置返回給用戶的哪部分信息設(shè)置為空
          ??? }
          }

          我用來實(shí)現(xiàn)登陸的DispatchAction代碼如下:
          ??????public ActionForward login( ActionMapping mapping, ActionForm form,
          ??????????? HttpServletRequest req, HttpServletResponse res ) throws Exception
          ??? {
          ?????????Service service = getService();調(diào)用業(yè)務(wù)邏輯
          ??????? LoginForm loginForm = (LoginForm) form;獲取formbean
          ??????? String user = loginForm.getUser();提取用戶名
          ??????? Person person = service.getUser( user );從業(yè)務(wù)邏輯中查找用戶
          ??????? ActionMessages messages = new ActionMessages();
          ??????? ActionMessage am;
          ??????? if ( person == null )如果用戶不存在,我們就返回
          ??????? {
          ??????????? am = new ActionMessage( "index.jsp.fail.user", user );參數(shù)的意義:第一個(gè)是主串,而后面的作為arg數(shù)組
          ??????????? messages.add( "user", am );把錯(cuò)誤信息放到errors 屬性為user那里去顯示
          ??????????? saveErrors( req, messages );
          ??????????? form.reset( mapping, req );如果出現(xiàn)錯(cuò)誤,調(diào)用formbean的重置功能
          ??????????? return mapping.findForward( ID.FAIL );
          ??????? }
          ??????? if ( !person.getPassword().equals( loginForm.getPassword() ) )如果密碼不一致
          ??????? {
          ??????????? am = new ActionMessage( "index.jsp.fail.password", user );
          ??????????? messages.add( "password", am );
          ??????????? saveErrors( req, messages );
          ??????????? form.reset( mapping, req );
          ??????????? return mapping.findForward( ID.FAIL );
          ??????? }
          ???????
          ????????setSessionObject( req, person.getType(), person );把用戶放到session里
          ??????? return new ActionForward( person.getType() + ".do", true );我在每個(gè)類型用戶的類中加入了一個(gè)getType來在這里調(diào)用,之后動(dòng)態(tài)的去對(duì)應(yīng)的admin.do,student.do,teacher.do的主頁面,并且這里實(shí)現(xiàn)的不是請(qǐng)求轉(zhuǎn)發(fā),而是請(qǐng)求從定向
          ???}


          評(píng)論

          # re: 體驗(yàn)Struts(1)---用戶登陸的實(shí)現(xiàn)   回復(fù)  更多評(píng)論   

          2006-05-25 01:22 by 黑蝙蝠
          大哥一口氣弄了4篇文章,呵呵,雖然我不懂,但是還是支持下!

          # re: 體驗(yàn)Struts(1)---用戶登陸的實(shí)現(xiàn)   回復(fù)  更多評(píng)論   

          2006-11-03 10:08 by haha[匿名]
          hao la ji

          # re: 體驗(yàn)Struts(1)---用戶登陸的實(shí)現(xiàn)   回復(fù)  更多評(píng)論   

          2006-11-23 12:55 by liu
          不錯(cuò)~~~
          另外:鄙視樓上!

          # re: 體驗(yàn)Struts(1)---用戶登陸的實(shí)現(xiàn)   回復(fù)  更多評(píng)論   

          2007-04-22 11:08 by 11
          我喜歡。我想請(qǐng)問一下。你的Person是從哪里寫的

          # re: 體驗(yàn)Struts(1)---用戶登陸的實(shí)現(xiàn)   回復(fù)  更多評(píng)論   

          2008-09-11 22:57 by Paul Chen
          加個(gè)Service Layer會(huì)更好些

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          有事在這里給我留言噢!
          主站蜘蛛池模板: 广丰县| 青田县| 永平县| 吉安县| 夏邑县| 巨鹿县| 宿迁市| 吴忠市| 文昌市| 三江| 霍林郭勒市| 红安县| 益阳市| 万宁市| 运城市| 朔州市| 博客| 台北县| 班玛县| 石门县| 琼中| 绥阳县| 桐城市| 黔西| 汤阴县| 呼伦贝尔市| 伊春市| 汽车| 饶平县| 五大连池市| 澜沧| 普陀区| 大冶市| 古蔺县| 盐山县| 万全县| 舒兰市| 乐亭县| 东乌珠穆沁旗| 大余县| 宁陵县|