hays

          海納百川
          posts - 25, comments - 48, trackbacks - 0, articles - 0
            BlogJava :: 首頁 ::  :: 聯(lián)系 :: 聚合  :: 管理

          作者:baggio785

          來源:http://blog.csdn.net/baggio785

          原文地址:http://blog.csdn.net/baggio785/archive/2006/03/10/620579.aspx(轉(zhuǎn)載請(qǐng)注明出處)

          日期:2006-3-9

          關(guān)鍵詞:Eclipse,MyEclipse,Struts,Java

          創(chuàng)建消息資源文件

          視圖組件將使用標(biāo)簽來輸出文本內(nèi)容,這些內(nèi)容來自于Resource Bundle。Resource Bundle對(duì)應(yīng)消息資源文件。

          代碼清單二(ApplicationResources.properties)

          # 這里是注釋
          logon.page.title = 我的第一个Struts

          logon.username.error = 请输入用户名!

          logon.userpassword.error = 请输入密码!

          logon.badusername.error = 用户名不能为admin!

          logon.baduserpassword.error = 密码不能为123456!

          logon.success = 欢迎您登录!

          為了實(shí)現(xiàn)國(guó)際化,消息資源文件中的漢字采用的是UTF-8編碼。查看如何實(shí)現(xiàn)漢字轉(zhuǎn)化為UTF-8

           

          創(chuàng)建JSP文件

          logon.jsp(所在路徑為/form/)接收用戶輸入的用戶名和密碼,并顯示表單驗(yàn)證失敗的錯(cuò)誤信息。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-bean.tld" prefix="bean"%>

          <%@ 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)容對(duì)應(yīng)的是消息資源文件中l(wèi)ogon.page.title的值-->

          <title><bean:message key="logon.page.title"/></title>

          </head>

          <body>

          <html:form action="/logon" method="POST">

          &#x7528;&#x6237;&#x540D;&#xFF1A;<html:text property="username"/><html:errors property="username"/><br/>

          &#x5BC6;&#x3000;&#x7801;&#xFF1A;<html:password property="userpassword"/><html:errors property="userpassword"/><br/>

          <html:submit value="&#x767B;&#x5F55;"/><html:reset value="&#x53D6;&#x6D88;"/>

          </html:form>

          </body>

          </html> 

          代碼清單四(success.jsp)

          <%@ page language="java" pageEncoding="UTF-8"%>
          <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>

          <%@ 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框架會(huì)自動(dòng)把表單數(shù)據(jù)封裝到ActionForm Bean(本例是logonForm)中。ActionForm Bean的屬性必須與HTML表單的字段一一對(duì)應(yīng)。ActionForm Bean會(huì)對(duì)表單數(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;
          import org.apache.struts.action.ActionForm;
          import org.apache.struts.action.ActionMapping;
          import org.apache.struts.action.ActionMessage;

          /**
          * MyEclipse Struts
          * Creation date: 02-27-2006
          *
          * XDoclet definition:
          * @struts.form name="logonForm"
          */
          public class LogonForm extends ActionForm {

          // --------------------------------------------------------- Instance Variables

          /** userpassword property */
          private String userpassword;

          /** username property */
          private String username;

          // --------------------------------------------------------- Methods

          /**
          * Method validate
          * @param mapping
          * @param request
          * @return ActionErrors
          */
          //用于表單驗(yàn)證的validate方法
          public ActionErrors validate(
          ActionMapping mapping,
          HttpServletRequest request) {


          //聲明一個(gè)ActionErrors對(duì)象
          ActionErrors errors = new ActionErrors();

          //如果用戶名驗(yàn)證失敗,將ActionMessage對(duì)象保存到ActionErrors對(duì)象errors中。logon.username.error對(duì)應(yīng)消息資源文件中的logon.username.error的值。
          if(username==null || username.length()<3){
          errors.add("username", new ActionMessage("logon.username.error"));
          }


          //如果密碼驗(yàn)證失敗,將ActionMessage對(duì)象保存到ActionErrors對(duì)象errors中。logon.userpassword.error對(duì)應(yīng)消息資源文件中的logon.userpassword.error的值。
          if(userpassword==null || userpassword.length()<3){
          errors.add("userpassword", new ActionMessage("logon.userpassword.error"));
          }
          // TODO Auto-generated method stub

          //返回ActionErrors對(duì)象errors,Struts框架會(huì)把errors保存在request范圍內(nèi),并將請(qǐng)求轉(zhuǎn)發(fā)到視圖組件logon.jsp中,通過<html:errors/>來顯示錯(cuò)誤信息
          return errors;
          }

          /**
          * Method reset
          * @param mapping
          * @param request
          */
          public void reset(ActionMapping mapping, HttpServletRequest request) {

          // TODO Auto-generated method stub
          this.username = null;
          this.userpassword = null;
          }

          /**
          * Returns the userpassword.
          * @return String
          */
          public String getUserpassword() {
          return userpassword;
          }

          /**
          * Set the userpassword.
          * @param userpassword The userpassword to set
          */
          public void setUserpassword(String userpassword) {
          this.userpassword = userpassword;
          }

          /**
          * Returns the username.
          * @return String
          */
          public String getUsername() {
          return username;
          }

          /**
          * Set the username.
          * @param username The username to set
          */
          public void setUsername(String username) {
          this.username = username;
          }

          }

           

          創(chuàng)建控制器Action組件logonAction

          logonAction對(duì)表單數(shù)據(jù)進(jìn)行業(yè)務(wù)邏輯驗(yàn)證。

          代碼清單六(logonAction.java)

          package com.mystruts.struts.action;

          import javax.servlet.http.HttpServletRequest;
          import javax.servlet.http.HttpServletResponse;

          import org.apache.struts.action.Action;
          import org.apache.struts.action.ActionForm;
          import org.apache.struts.action.ActionForward;
          import org.apache.struts.action.ActionMapping;
          import org.apache.struts.action.ActionMessage;
          import org.apache.struts.action.ActionMessages;

          import com.mystruts.struts.SaveLogon;
          import com.mystruts.struts.form.LogonForm;

          /**
          * MyEclipse Struts
          * Creation date: 02-27-2006
          *
          * XDoclet definition:
          * @struts.action path="/logon" name="logonForm" input="/form/logon.jsp" scope="request" validate="true"
          * @struts.action-forward name="logon_sc" path="/success.jsp"
          */
          public class LogonAction extends Action {

          // --------------------------------------------------------- Instance Variables

          // --------------------------------------------------------- Methods

          /**
          * Method execute
          * @param mapping
          * @param form
          * @param request
          * @param response
          * @return ActionForward
          */
          //通過ActionForm Bean的驗(yàn)證后,Struts框架會(huì)自動(dòng)調(diào)用execute方法
          public ActionForward execute(
          ActionMapping mapping,
          ActionForm form,
          HttpServletRequest request,
          HttpServletResponse response) {
          // TODO Auto-generated method stub

          //獲得表單數(shù)據(jù)中的username
          String username = (String)((LogonForm)form).getUsername();

          //獲得表單數(shù)據(jù)中的userpassword
          String userpassword = (String)((LogonForm)form).getUserpassword();

          //定義非法用戶名
          String badusername = "admin";

          //定義非法密碼
          String baduserpassword = "123456";


          //聲明一個(gè)ActionMessages對(duì)象
          ActionMessages errors = new ActionMessages();

          if(badusername.equals(username)){

          //如果用戶名驗(yàn)證失敗,將ActionMessage對(duì)象保存到ActionMessages對(duì)象errors中。logon.badusername.error對(duì)應(yīng)消息資源文件中的logon.badusername.error的值。
          errors.add("username",new ActionMessage("logon.badusername.error",badusername));

          //保存ActionMessages對(duì)象errors到request范圍。
          saveErrors(request,errors);

          //返回ActionForward對(duì)象,Struts框架會(huì)把請(qǐng)求轉(zhuǎn)發(fā)到視圖組件logon.jsp中,通過<html:errors/>來顯示錯(cuò)誤信息。
          return(new ActionForward(mapping.getInput()));
          }

          if(userpassword.equals(baduserpassword)){
          errors.add("userpassword",new ActionMessage("logon.baduserpassword.error",baduserpassword));
          saveErrors(request,errors);
          return(new ActionForward(mapping.getInput()));
          }


          //定義模型組件SaveLogon
          SaveLogon sl = new SaveLogon();
          sl.setUsername(username);
          sl.setUserpassword(userpassword);
          sl.saveToDb();


          //控制器組件將SavaLogon對(duì)象保存到request范圍,savalogon對(duì)應(yīng)視圖組件success.jsp中<login:present>標(biāo)簽的name以及<bear:write>標(biāo)簽的name
          request.setAttribute("savelogon",sl);

          //清除request范圍內(nèi)的ActionForm Bean,因?yàn)楹竺娴恼?qǐng)求已經(jīng)不需要了
          request.removeAttribute(mapping.getAttribute());


          //控制器組件將信息轉(zhuǎn)交到視圖組件logon.jsp,logon_sc對(duì)應(yīng)struts-config.xml中的forward元素的name
          return(mapping.findForward("logon_sc"));
          }

          }

           

          創(chuàng)建模型組件SaveLogon

          本模型提供get/set方法,以及saveToDb方法。在例子中并未實(shí)現(xiàn)saveToDb方法。

          代碼清單七(SaveLogon.java)

          package com.mystruts.struts;

          /**
          * @author Administrator
          *
          */
          public class SaveLogon {

          private String username = null;
          private String userpassword = null;

          public void setUsername(String username){
          this.username = username;
          }

          public String getUsername(){
          return this.username;
          }

          public void setUserpassword(String userpassword){
          this.userpassword = userpassword;
          }

          public String getUserpassword(){
          return this.userpassword;
          }

          public void saveToDb(){

          }


          }

           

          運(yùn)行

          如果用戶名和密碼為空,運(yùn)行結(jié)果如圖十二、圖十三、圖十四所示。


          (圖十二)

          如果用戶名為admin,運(yùn)行結(jié)果如圖十三


          (圖十三)

          如果通過驗(yàn)證,運(yùn)行結(jié)果如圖十四


          (圖十四)

           

           

          小結(jié)

          1??? 為了降低偶合度,應(yīng)該建立一個(gè)存放常量的JAVA文件。例如logonAction.java中的String badusername = "admin",或者request.setAttribute("savelogon",sl)的第一個(gè)參數(shù)。

          2??? 要實(shí)現(xiàn)Struts的國(guó)際化,支持多國(guó)語言,編碼方式一定要為UTF-8。

          3??? 在配置Action時(shí),見圖九,如果選取redirect,則在struts-config.xml中的action元素會(huì)多一個(gè)屬性,redirect="true"。運(yùn)行的結(jié)果是success.jsp中無法獲得request范圍內(nèi)的savelogon對(duì)象。

          ?手把手教你在Eclipse中配置開發(fā)Struts(一)



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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 苍梧县| 宁晋县| 长春市| 大同县| 桂东县| 建水县| 开江县| 英德市| 那坡县| 桐柏县| 扶余县| 马龙县| 广丰县| 新闻| 咸丰县| 凌源市| 安康市| 泗水县| 昆明市| 庆元县| 三台县| 大庆市| 湄潭县| 清原| 尚志市| 平潭县| 苏州市| 兖州市| 云安县| 甘洛县| 宾阳县| 万源市| 三亚市| 屯昌县| 固始县| 吉林市| 财经| 百色市| 清水河县| 文安县| 双江|