hays

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

          eclipse 中配置strcucts(2)

          Posted on 2006-11-17 18:22 hays(海納百川) 閱讀(249) 評論(0)  編輯  收藏

          作者: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.page.title = 我的第一个Struts

          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-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使用客戶化標簽,文本內容對應的是消息資源文件中logon.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>

           

          創建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;
          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
          */
          //用于表單驗證的validate方法
          public ActionErrors validate(
          ActionMapping mapping,
          HttpServletRequest request) {


          //聲明一個ActionErrors對象
          ActionErrors errors = new ActionErrors();

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


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

          //返回ActionErrors對象errors,Struts框架會把errors保存在request范圍內,并將請求轉發到視圖組件logon.jsp中,通過<html:errors/>來顯示錯誤信息
          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;
          }

          }

           

          創建控制器Action組件logonAction

          logonAction對表單數據進行業務邏輯驗證。

          代碼清單六(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的驗證后,Struts框架會自動調用execute方法
          public ActionForward execute(
          ActionMapping mapping,
          ActionForm form,
          HttpServletRequest request,
          HttpServletResponse response) {
          // TODO Auto-generated method stub

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

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

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

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


          //聲明一個ActionMessages對象
          ActionMessages errors = new ActionMessages();

          if(badusername.equals(username)){

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

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

          //返回ActionForward對象,Struts框架會把請求轉發到視圖組件logon.jsp中,通過<html:errors/>來顯示錯誤信息。
          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對象保存到request范圍,savalogon對應視圖組件success.jsp中<login:present>標簽的name以及<bear:write>標簽的name
          request.setAttribute("savelogon",sl);

          //清除request范圍內的ActionForm Bean,因為后面的請求已經不需要了
          request.removeAttribute(mapping.getAttribute());


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

          }

           

          創建模型組件SaveLogon

          本模型提供get/set方法,以及saveToDb方法。在例子中并未實現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(){

          }


          }

           

          運行

          如果用戶名和密碼為空,運行結果如圖十二、圖十三、圖十四所示。


          (圖十二)

          如果用戶名為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對象。

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



          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 龙泉市| 青浦区| 临沧市| 乃东县| 扶沟县| 兰西县| 咸阳市| 灵丘县| 孙吴县| 海门市| 临城县| 团风县| 灌阳县| 松阳县| 拜城县| 岐山县| 五常市| 伊宁市| 黄梅县| 彰化市| 都江堰市| 兰溪市| 改则县| 巴林左旗| 杂多县| 泗洪县| 华容县| 福海县| 临城县| 仙居县| 莒南县| 海丰县| 德令哈市| 镇沅| 如皋市| 黎城县| 新闻| 加查县| 万载县| 宿迁市| 介休市|