手把手教你在Eclipse中配置開發(fā)Struts
開發(fā)環(huán)境
JDK1_4_03
tomcat5.0.28
Eclipse3.1.2
MyEcilpse4.1
TomcatPlugin插件
更多Eclipse插件下載
需求
本文所要結(jié)合的Struts應(yīng)用實(shí)例為用戶登錄(logon),用戶登錄(logon)的需求為:
1 接收用戶名和密碼,跳轉(zhuǎn)到成功頁面,并提示“
2 如果用戶名為空就提交表單,則提示“請輸入用戶名!”。
3 如果密碼為空就提交表單,則提示“請輸入密碼!”。
4 如果輸入非法用戶名,則提示“請輸入正確的用戶名!”。
5 通過模型組件,保存登錄信息。
登錄應(yīng)用實(shí)例的框架介紹
用戶登錄(logon)應(yīng)用由以下模塊組成:
1 模型(M):模型為一個JAVABEAN組件-SaveLogon,包含username(用戶名)和userpassword(密碼)兩個屬性,提供讀取和設(shè)置屬性的方法get/set,以及保存登錄信息的方法saveToDb()。saveToDb的任務(wù)是把登錄信息保存到持久化存儲系統(tǒng)(例如數(shù)據(jù)庫)。
2 視圖(V):視圖包括兩個JSP文件,以及一個ActionForm Bean-logonForm。JSP文件分別為:logon.jsp、success.jsp。logon.jsp負(fù)責(zé)接受用戶輸入的用戶名和密碼以及顯示出錯信息,success.jsp負(fù)責(zé)顯示登錄成功信息。
3 控制器(C):控制器為Action類logonAction。對數(shù)據(jù)進(jìn)行業(yè)務(wù)邏輯驗(yàn)證、調(diào)用模型組件保存登錄信息、選擇視圖組件返回給用戶。
Struts的工作機(jī)制
用戶在視圖組件(logon.jsp)中輸入用戶名和密碼并提交HTML表單,Struts框架會先讀取WEB.XML中關(guān)于servlet的配置,然后自動將表單數(shù)據(jù)封裝到ActionForm Bean中,在本例中是logonForm。logonForm會對提交的數(shù)據(jù)進(jìn)行數(shù)據(jù)合法性驗(yàn)證(例如最短長度、是否包含非法字符等)。如果ActionForm Bean驗(yàn)證未通過,則logonForm返回ActionErrors對象,Struts框架會把ActionErrors對象保存在request范圍內(nèi),并把請求轉(zhuǎn)發(fā)到視圖組件,并在視圖組件中通過﹤?xml:namespace prefix = html />
部署Struts框架
Struts的工作機(jī)制大家都有了一定的了解了,現(xiàn)在介紹如何在Eclipse中部署Struts框架。
本文的環(huán)境前文已經(jīng)提到,Eclipse以及其插件MyEclipse和TomcatPlugin的安裝本文不介紹。
1 新建一個項(xiàng)目
1) 選擇Java >> Tomcat Project,下一步,如圖一
(圖一)
2)填寫項(xiàng)目名稱,如果不采用項(xiàng)目所在目錄的缺省值,請修改,點(diǎn)擊完成。如圖二
(圖二)
#p#
2 創(chuàng)建Struts框架
1) 右鍵選擇項(xiàng)目 >> 新建 >> 其他 >> MyEclipse >> Web-Struts >> Struts 1.2 >> Struts 1.2 Form,Action & JSP。如圖三。如果這一步出現(xiàn)錯誤,本文不做描述,請參考我的另一邊文章-MyEclipse中創(chuàng)建Struts出現(xiàn)錯誤的解決辦法。
(圖三)
2) 配置Struts ActionForm
因?yàn)楸疚牡腟truts應(yīng)用實(shí)例為用戶登錄,所以Use case選用logon。Superclass選擇如圖所示,其他默認(rèn)。如圖四
(圖四)
接下來填寫Optional Details,輸入Form表單項(xiàng),本例為用戶名(username)和密碼(userpassword)。點(diǎn)擊Add,輸入請參考圖五、圖六。
(圖五)
(圖六)
輸后完畢,Optional Details的Form Properties中會顯示。如圖七
(圖七)
Methods選項(xiàng)卡的設(shè)置我們采用默認(rèn)設(shè)置,不去修改。
點(diǎn)擊JSP選項(xiàng)卡,將“Create JSP form”選項(xiàng)的勾選中,采用默認(rèn)設(shè)置“/form/logon.jsp”。如圖八
(圖八)
#p#
3) 配置Struts Action
以上步驟完成了對Form的配置,下面配置Action。
在圖八中點(diǎn)擊下一步,采用默認(rèn)即可。如圖九
(圖九)
Parameter和Methods選項(xiàng)也采用默認(rèn)。
點(diǎn)擊Forwards選項(xiàng)卡,點(diǎn)擊Add,配置成功頁面信息。本文選取根目錄的success.jsp作為成功頁面,Name為logon_sc。如圖十
(圖十)
輸后完畢,Optional Details的Forwards中會顯示。如圖十一
(圖十一)
點(diǎn)擊完成。
Struts已經(jīng)配置完畢??纯碋clipse中,項(xiàng)目中多了一些東東,例如struts相關(guān)的jar,以及struts-config.xml和tld文件。struts-config.xml的代碼如下:
#p#
代碼清單一(struts-config.xml)
創(chuàng)建消息資源文件
視圖組件將使用標(biāo)簽來輸出文本內(nèi)容,這些內(nèi)容來自于Resource Bundle。Resource Bundle對應(yīng)消息資源文件。
代碼清單二(ApplicationResources.properties)
# 這里是注釋 logon.username.error = 請輸入用戶名! logon.userpassword.error = 請輸入密碼! logon.badusername.error = 用戶名不能為admin! logon.baduserpassword.error = 密碼不能為123456! logon.success = 歡迎您登錄! |
為了實(shí)現(xiàn)國際化,消息資源文件中的漢字采用的是UTF-8編碼。查看如何實(shí)現(xiàn)漢字轉(zhuǎn)化為UTF-8。
創(chuàng)建JSP文件
logon.jsp(所在路徑為/form/)接收用戶輸入的用戶名和密碼,并顯示表單驗(yàn)證失敗的錯誤信息。success.jsp顯示登錄成功的信息。
JSP文件全部使用客戶化標(biāo)簽,無JAVA代碼,輸入的文本內(nèi)容完全由標(biāo)簽提供。
代碼清單三(logon.jsp)
﹤%@ page contentType="text/html;charset=UTF-8" language="java"%> ﹤%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%> ﹤%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%>
﹤html> ﹤head> ﹤!--title使用客戶化標(biāo)簽,文本內(nèi)容對應(yīng)的是消息資源文件中l(wèi)ogon.page.title的值--> ﹤title>﹤bean:message key="logon.page.title"/>﹤/title> ﹤/head> ﹤body> ﹤html:form action="/logon" method="POST"> 用戶名:﹤html:text property="username"/>﹤html:errors property="username"/>﹤br/> 密 碼:﹤html:password property="userpassword"/>﹤html:errors property="userpassword"/>﹤br/> ﹤html:submit value="登錄"/>﹤html:reset value="取消"/> ﹤/html:form> ﹤/body> ﹤/html> |
代碼清單四(success.jsp)
﹤%@ page language="java" pageEncoding="UTF-8"%> ﹤%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%> ﹤%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%> ﹤html:html lang="true"> ﹤head> ﹤html:base /> ﹤title>success.jsp﹤/title> ﹤/head>
﹤body> ﹤logic:present name="savelogon" scope="request"> ﹤bean:write name="savelogon" property="username"/> ﹤bean:message key="logon.success"/> ﹤/logic:present> ﹤/body> ﹤/html:html> |
創(chuàng)建ActionForm Bean組件logonFrom
用戶提交HTML表單后,Struts框架會自動把表單數(shù)據(jù)封裝到ActionForm Bean(本例是logonForm)中。ActionForm Bean的屬性必須與HTML表單的字段一一對應(yīng)。ActionForm Bean會對表單數(shù)據(jù)進(jìn)行驗(yàn)證,并提供將HTML表單的字段值重置為默認(rèn)值的方法(等同于HTML中Form表單的Reset)。
代碼清單五(logonFrom.java)
package com.mystruts.struts.form; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.ActionErrors; /** // --------------------------------------------------------- Instance Variables /** userpassword property */ /** username property */ // --------------------------------------------------------- Methods /**
//如果用戶名驗(yàn)證失敗,將ActionMessage對象保存到ActionErrors對象errors中。logon.username.error對應(yīng)消息資源文件中的logon.username.error的值。
//返回ActionErrors對象errors,Struts框架會把errors保存在request范圍內(nèi),并將請求轉(zhuǎn)發(fā)到視圖組件logon.jsp中,通過 /** // TODO Auto-generated method stub /** /** /** /** } |
創(chuàng)建控制器Action組件logonAction
logonAction對表單數(shù)據(jù)進(jìn)行業(yè)務(wù)邏輯驗(yàn)證。
代碼清單六(logonAction.java)
package com.mystruts.struts.action; import javax.servlet.http.HttpServletRequest; import org.apache.struts.action.Action; import com.mystruts.struts.SaveLogon; /** // --------------------------------------------------------- Instance Variables // --------------------------------------------------------- Methods /** //獲得表單數(shù)據(jù)中的username //獲得表單數(shù)據(jù)中的userpassword //定義非法用戶名 //定義非法密碼
if(badusername.equals(username)){ //如果用戶名驗(yàn)證失敗,將ActionMessage對象保存到ActionMessages對象errors中。logon.badusername.error對應(yīng)消息資源文件中的logon.badusername.error的值。 //保存ActionMessages對象errors到request范圍。 //返回ActionForward對象,Struts框架會把請求轉(zhuǎn)發(fā)到視圖組件logon.jsp中,通過 if(userpassword.equals(baduserpassword)){
//清除request范圍內(nèi)的ActionForm Bean,因?yàn)楹竺娴恼埱笠呀?jīng)不需要了
} |
創(chuàng)建模型組件SaveLogon
本模型提供get/set方法,以及saveToDb方法。在例子中并未實(shí)現(xiàn)saveToDb方法。
代碼清單七(SaveLogon.java)
package com.mystruts.struts; /** private String username = null; public void setUsername(String username){ public String getUsername(){ public void setUserpassword(String userpassword){ public String getUserpassword(){ public void saveToDb(){ }
|
#p#
運(yùn)行
如果用戶名和密碼為空,運(yùn)行結(jié)果如圖十二、圖十三、圖十四所示。
(圖十二)
如果用戶名為admin,運(yùn)行結(jié)果如圖十三
(圖十三)
如果通過驗(yàn)證,運(yùn)行結(jié)果如圖十四
(圖十四)
小結(jié)
1 為了降低偶合度,應(yīng)該建立一個存放常量的JAVA文件。例如logonAction.java中的String badusername = "admin",或者request.setAttribute("savelogon",sl)的第一個參數(shù)。
2 要實(shí)現(xiàn)Struts的國際化,支持多國語言,編碼方式一定要為UTF-8。
3 在配置Action時,見圖九,如果選取redirect,則在struts-config.xml中的action元素會多一個屬性,redirect="true"。運(yùn)行的結(jié)果是success.jsp中無法獲得request范圍內(nèi)的savelogon對象。
您正在閱讀的是:手把手教你在Eclipse中配置開發(fā)Struts
【編輯推薦】