作者:baggio785
來源:http://blog.csdn.net/baggio785
原文地址:http://blog.csdn.net/baggio785/archive/2006/03/10/620579.aspx(轉載請注明出處)
日期:2006-3-9
關鍵詞:Eclipse,MyEclipse,Struts,Java
創建消息資源文件
視圖組件將使用標簽來輸出文本內容,這些內容來自于Resource Bundle。Resource Bundle對應消息資源文件。
代碼清單二(ApplicationResources.properties)
# 這里是注釋 logon.username.error = 请输入用户名! logon.userpassword.error = 请输入密码! logon.badusername.error = 用户名不能为admin! logon.baduserpassword.error = 密码不能为123456! logon.success = 欢迎您登录! |
為了實現國際化,消息資源文件中的漢字采用的是UTF-8編碼。查看如何實現漢字轉化為UTF-8。
創建JSP文件
logon.jsp(所在路徑為/form/)接收用戶輸入的用戶名和密碼,并顯示表單驗證失敗的錯誤信息。success.jsp顯示登錄成功的信息。
JSP文件全部使用客戶化標簽,無JAVA代碼,輸入的文本內容完全由標簽提供。
代碼清單三(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使用客戶化標簽,文本內容對應的是消息資源文件中logon.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> |
創建ActionForm Bean組件logonFrom
用戶提交HTML表單后,Struts框架會自動把表單數據封裝到ActionForm Bean(本例是logonForm)中。ActionForm Bean的屬性必須與HTML表單的字段一一對應。ActionForm Bean會對表單數據進行驗證,并提供將HTML表單的字段值重置為默認值的方法(等同于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 /**
//如果用戶名驗證失敗,將ActionMessage對象保存到ActionErrors對象errors中。logon.username.error對應消息資源文件中的logon.username.error的值。
//返回ActionErrors對象errors,Struts框架會把errors保存在request范圍內,并將請求轉發到視圖組件logon.jsp中,通過<html:errors/>來顯示錯誤信息 /** // TODO Auto-generated method stub /** /** /** /** } |
創建控制器Action組件logonAction
logonAction對表單數據進行業務邏輯驗證。
代碼清單六(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 /** //獲得表單數據中的username //獲得表單數據中的userpassword //定義非法用戶名 //定義非法密碼
if(badusername.equals(username)){ //如果用戶名驗證失敗,將ActionMessage對象保存到ActionMessages對象errors中。logon.badusername.error對應消息資源文件中的logon.badusername.error的值。 //保存ActionMessages對象errors到request范圍。 //返回ActionForward對象,Struts框架會把請求轉發到視圖組件logon.jsp中,通過<html:errors/>來顯示錯誤信息。 if(userpassword.equals(baduserpassword)){
//清除request范圍內的ActionForm Bean,因為后面的請求已經不需要了
} |
創建模型組件SaveLogon
本模型提供get/set方法,以及saveToDb方法。在例子中并未實現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(){ }
|
運行
如果用戶名和密碼為空,運行結果如圖十二、圖十三、圖十四所示。
(圖十二)
如果用戶名為admin,運行結果如圖十三
(圖十三)
如果通過驗證,運行結果如圖十四
(圖十四)
小結
1??? 為了降低偶合度,應該建立一個存放常量的JAVA文件。例如logonAction.java中的String badusername = "admin",或者request.setAttribute("savelogon",sl)的第一個參數。
2??? 要實現Struts的國際化,支持多國語言,編碼方式一定要為UTF-8。
3??? 在配置Action時,見圖九,如果選取redirect,則在struts-config.xml中的action元素會多一個屬性,redirect="true"。運行的結果是success.jsp中無法獲得request范圍內的savelogon對象。