第二步:
上一篇博文我們已經(jīng)把POJO類建立好了,現(xiàn)在我們可以發(fā)揮我們一貫的懶人作風(fēng),呵呵,繼續(xù)用IDE生成我們的DAO類(實(shí)際開發(fā)中不推薦這樣做,當(dāng)然我們生成之后還是要修改的)
好了,為了節(jié)約空間,這里就不貼代碼了,現(xiàn)在的程序架構(gòu)如下:
好了,現(xiàn)在基本準(zhǔn)備工作已經(jīng)完畢,因?yàn)槲覀兪褂肊XT作為視圖層,現(xiàn)在我們可以開始設(shè)計(jì)視圖層了。
EXT的基本知識(shí)我這里也不再復(fù)述了,直接貼代碼吧,我們首先需要一個(gè)實(shí)現(xiàn)一個(gè)登錄窗體,頁面代碼如下:
login.jsp:(我們現(xiàn)在把這個(gè)頁面放到/WEB-INF/views/目錄下面,這里用到的資源文件我會(huì)在下面提供下載,randomImgCode.do 是一個(gè)生成驗(yàn)證碼的action,我會(huì)直接在下面的源碼中提供,具體實(shí)現(xiàn)大家可以看看我的源碼。)
<%@ page language="java" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>簡易便簽系統(tǒng) - 用戶登錄</title><link rel="stylesheet" href="css/skin.css" type="text/css" /><script type="text/javascript" src="js/prototype.js"></script></head><body><!--loading加載 --><div id="loadingTab"><div class="loading-indicator"><img src="js/ext/resources/images/default/shared/large-loading.gif"width="32" height="32"style="margin-right: 8px; float: left; vertical-align: top;" />簡易便簽系統(tǒng)-<span id="loading-yfo"><a href="mailto:huangking124@163.com"target="_blank">開發(fā):黃磊</a> </span><br /><span id="loading-msg">加載樣式表和圖片...</span></div></div><link rel="stylesheet" type="text/css"href="js/ext/resources/css/ext-all.css" /><link rel="stylesheet" type="text/css"href="js/ext/resources/css/xtheme-gray.css" /><script type="text/javascript">$('loading-msg').innerHTML = '正在加載JSUI組建...';</script><!--加載EXT核心文件--><script type="text/javascript" src="js/ext/adapter/ext/ext-base.js"></script><script type="text/javascript" src="js/ext/ext-all.js"></script><script type="text/javascript" src="js/ext/locale/ext-lang-zh_CN.js"charset="utf-8"></script><script type="text/javascript">$('loading-msg').innerHTML = '正在初始化...';</script><!--加載自定義組件--><script type="text/javascript" src="js/Login.js"></script><script type="text/javascript">$('loading-msg').innerHTML = '初始化完畢!!';Ext.get('loadingTab').fadeOut({remove: true});//讓加載標(biāo)簽消失</script><div class="x-hide-display" id="imagecode"><img src="randomImgCode.do" title="看不清楚,刷新驗(yàn)證碼" id="checkimg"onclick="javascript:this.src='randomImgCode.do?t='+Math.random();"style="border-width: 0px; cursor: hand;" /></div></body></html>
login.js:(這里面的幾個(gè)提交地址是暫時(shí)寫上的,以后會(huì)用到)
/*** 登錄界面* 作者:黃磊*/Ext.namespace('MyNote');Ext.QuickTips.init();Ext.BLANK_IMAGE_URL = "js/ext/resources/images/default/s.gif";MyNote.Login = function() {this.init();};Ext.extend(MyNote.Login, Ext.util.Observable, {init : function() {var loginwindow = new Ext.Window({ //登錄窗體iconCls : 'key',title : '用戶登錄',height : 220,width : 290,closable : false,resizable : false,border : false,modal : true,items : [new Ext.FormPanel({id : 'loginform',bodyStyle : 'padding-top:6px',labelWidth : 55,frame : true,labelAlign : 'right',items : [new Ext.form.FieldSet({autoHeight : true,autoWidth : true,bodyStyle : 'padding:5px',title : '用戶登錄',style : 'margin:5px',items : [new Ext.form.TextField({allowBlank : false,itemCls : 'user',blankText : '賬號(hào)不能為空',name : 'username',fieldLabel : '賬 號(hào)'}), new Ext.form.TextField({allowBlank : false,itemCls : 'key',blankText : '密碼不能為空',inputType : 'password',name : 'userpwd',fieldLabel : '密 碼'}), new Ext.Panel({layout : 'column',items : [new Ext.Panel({bodyStyle : 'align:left;',width : 130,layout : 'form',items : [new Ext.form.TextField({allowBlank : false,itemCls : 'key2',blankText : '驗(yàn)證碼不能為空',width : 60,name : 'checkcode',fieldLabel : '驗(yàn)證碼'})]}), new Ext.Panel({bodyStyle : 'align:right;',contentEl : 'imagecode'})]})]})],buttons : [new Ext.Button({text : '登 錄 系 統(tǒng)',type : 'submit',listeners : {click : function() {var login = Ext.getCmp('loginform');if (login.form.isValid()) {login.form.submit({waitMsg : '正在登錄......',url : 'main.do?cmd=login',success : function(form, action) {form.reset();functions.waitBar('請(qǐng)稍后','正在加載系統(tǒng)...');window.location.href = 'page.do?cmd=main';},failure : function(form, action) {form.reset();Ext.MessageBox.show({title : '錯(cuò) 誤',msg : action.result.msg,buttons : Ext.Msg.OK,icon : Ext.MessageBox.ERROR});Ext.getDom("checkimg").src = "randomImgCode.do?t="+ Math.random();}});} else {Ext.MessageBox.show({title : '警 告',msg : '您的輸入有問題,請(qǐng)檢查后提交!',buttons : Ext.Msg.OK,icon : Ext.MessageBox.WARNING});}}}}), new Ext.Button({text : '重 置 輸 入',type : 'reset',listeners : {click : function() {Ext.getCmp("loginform").form.reset();}}})]})]});loginwindow.show();}});Ext.onReady(function() {login = new MyNote.Login();});
好了,JSP文件里面的EXT路徑大家可以修改成你們自己的,剛才我們是把login.jsp文件放在了/WEB-INF/views/目錄下面,那我們?cè)撛趺慈ピL問呢?
現(xiàn)在我們就開始切入下一步。
第三步:
首先我們?cè)诎黮onlysky.iteye.com.mynote下建立一個(gè)類BaseAction,用于客戶端請(qǐng)求處理的基類
大家可能要問,問什么要建立一個(gè)這樣的ACTION呢?其實(shí)大家有沒有想過,當(dāng)我對(duì)客戶端的一些公共的處理方法,比如獲取會(huì)話中的用戶信息,判斷用戶是否登錄等等的在所有ACTION都要做的事情都放到這個(gè)基類來實(shí)現(xiàn),然后其他ACTION都繼承此類,那么不是可以減少很多的代碼嗎?而且做了SSH整合之后,STRUTS1的ACTION也實(shí)現(xiàn)了非單例運(yùn)行模式(基于線程安全),這樣做就會(huì)有很多的好處了,在這個(gè)教程后面我們可以明顯的感受到,當(dāng)然這只是我個(gè)人的一個(gè)想法,大家如果有更好的意見或者建議歡迎拍磚。
/*** 客戶端處理基類** @author 黃磊**/public class BaseAction extends DispatchActionSupport {}
那么下面我們需要做的就是如何才能訪問到我們剛才寫的登錄界面,我個(gè)人的想法是單獨(dú)寫一個(gè)ACTION來用作頁面的跳轉(zhuǎn)
那么,我們就在包lonlysky.iteye.com.mynote.action下建立一個(gè),PageAction,我們需要的是繼承自我們剛才寫好的BaseAction
/*** 本ACTION用于頁面跳轉(zhuǎn)** @author 黃磊**/public class PageAction extends BaseAction {// 跳轉(zhuǎn)用戶登錄界面public ActionForward login(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response) throws Exception {return mapping.findForward("login");}}
既然寫了Action,那么我們現(xiàn)在要做的就是配置struts-config.xml文件,我們需要在全局跳轉(zhuǎn)處加入我們的login.jsp頁面,然后配置我們的PageAction
<global-forwards> <!-- 登錄跳轉(zhuǎn) --> <forward name="login" path="/WEB-INF/view/login.jsp" /> </global-forwards> <action-mappings> <action path="/randomImgCode" type="lonlysky.iteye.com.mynote.action.RandomImgCodeAction" /> <!-- 頁面跳轉(zhuǎn)Action --> <action path="/page" type="lonlysky.iteye.com.mynote.action.PageAction" parameter="cmd" /> </action-mappings>
好了,現(xiàn)在我們可以運(yùn)行調(diào)試我們的項(xiàng)目并預(yù)覽效果了
啟動(dòng)服務(wù)器后我們可以嘗試訪問
http://localhost:8080/mynotepro/page.do?cmd=login
如果一切正常我們就可以看到如下效果
(未完待續(xù))
本小結(jié)項(xiàng)目源碼下載(因?yàn)榭臻g限制,所以我刪除了所有的JAR架包)
聯(lián)系客服