程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java的Struts框架中上岸功效的完成和表單處置器的應用

Java的Struts框架中上岸功效的完成和表單處置器的應用

編輯:關於JAVA

Java的Struts框架中上岸功效的完成和表單處置器的應用。本站提示廣大學習愛好者:(Java的Struts框架中上岸功效的完成和表單處置器的應用)文章只能為提供參考,不一定能成為您想要的結果。以下是Java的Struts框架中上岸功效的完成和表單處置器的應用正文


完成Struts登錄
1、jar包拷貝
起首是樹立java web項目,以後翻開我們我們下載好strtus框架,Struts-1.2.9-bin文件夾和struts-1.2.9.src源文件文件夾。在bin文件夾中的lib文件中拷貝struts的jar包,拷貝到我們本身項目struts_login –>lib文件夾下。

2、web.xml文件設置裝備擺設
找到Struts-1.2.9-bin中Struts-1.2.9-bin-->webapps下的struts實例struts-blank中的struts-1.2.9-bin\webapps\struts-blank\WEB-INF下的web.xml文件,復制設置裝備擺設對ActionServlet的設置裝備擺設,粘貼到我們的項目struts_login的WEB-INF下的web.xml中,代碼以下所示。重要是對struts自帶的ActionServlet停止設置裝備擺設。

<servlet> 
  <servlet-name>action</servlet-name> 
  <servlet-class>org.apache.struts.action.ActionServlet</servlet-class> 
  <init-param> 
   <param-name>config</param-name> 
   <param-value>/WEB-INF/struts-config.xml</param-value> 
  </init-param> 
  <init-param> 
   <param-name>debug</param-name> 
   <param-value>2</param-value> 
  </init-param> 
  <init-param> 
   <param-name>detail</param-name> 
   <param-value>2</param-value> 
  </init-param> 
  <load-on-startup>2</load-on-startup> 
 </servlet> 
  
  
 <!--Standard Action Servlet Mapping --> 
 <servlet-mapping> 
  <servlet-name>action</servlet-name> 
  <url-pattern>*.do</url-pattern> 
 </servlet-mapping> 

3、在項目中樹立本身的ActionForm
在項目中樹立本身的ActionForm,繼續struts框架中曾經寫好的ActionForm,在ActionForm設置用到的數據,而且要和我們界面上設置的稱號分歧。由於我們在提交表單的時刻,一切的要求都邑放到ActionForm中。樹立登錄的ActionForm,LoginActionForm.java代碼以下所示。

package com.bjpowernode.struts; 
import org.apache.struts.action.ActionForm; 
  
/** 
 * 登錄ActionForm,擔任表單搜集數據. 
 * 表單的屬性必需和ActionForm中的get和set的屬性分歧. 
 * @author summer 
 * 
 */ 
public classLoginActionForm extends ActionForm { 
  
  //用戶名。 
  private Stringusername; 
  //暗碼。 
  private String password; 
   
  //設置暗碼。 
  public voidsetPassword(Stringpassword) { 
    this.password = password; 
  } 
  //獲得用戶名。 
  public StringgetUsername() { 
    return username; 
  } 
  //設置用戶名。 
  public voidsetUsername(Stringusername) { 
    this.username = username; 
  } 
  //獲得暗碼。 
  public StringgetPassword() { 
   
    return password; 
  } 
   
} 

4、樹立本身的Action
樹立本身的Action,同時繼續struts框架中的org.apache.struts.action.Action,重載父類的execute辦法。在這裡完成掏出表單中的數據。經由過程CalActionFormcalForm= (CalActionForm)(CalActionForm)form;(struts框架中曾經幫我們封裝好了,我們去應用便可以了)來獲得表單中的值。經由斷定後,停止響應的操作,跳轉到響應的頁面。Action的功效是擔任拿到表雙數據和挪用營業邏輯落後行頁面跳轉。樹立上岸的Action類,LoginAction.java類,挪用營業邏輯類UserManager的login辦法。代碼以下所示。

packagecom.bjpowernode.struts; 
  
importjavax.servlet.http.HttpServletRequest; 
importjavax.servlet.http.HttpServletResponse; 
  
importorg.apache.struts.action.Action; 
importorg.apache.struts.action.ActionForm; 
importorg.apache.struts.action.ActionForward; 
importorg.apache.struts.action.ActionMapping; 
  
/** 
 *登錄Action 
 *擔任獲得表雙數據,挪用營業邏輯,前往轉向信息. 
 * 
 * @author summer 
 * 
 */ 
public classLoginAction extendsAction { 
  
   @Override 
   public ActionForward execute(ActionMappingmapping,ActionForm form, 
          HttpServletRequest request, HttpServletResponseresponse) 
          throws Exception { 
  
  
       LoginActionForm laf = (LoginActionForm)form; 
       Stringusername = laf.getUsername(); 
       Stringpassword = laf.getPassword(); 
        
       UserManager userManager = newUserManager(); 
       //傳遞用戶名和暗碼 
       try 
       { 
          userManager.login(username, password); 
          request.setAttribute("username", username); 
          return mapping.findForward("success"); 
       }catch(UserNotFoundException e) 
       { 
          e.printStackTrace(); 
          request.setAttribute("msg","用戶不克不及找到,用戶稱號=[" +username +"+]"); 
       }catch(PasswordErrorException e) 
       { 
          e.printStackTrace(); 
          request.setAttribute("msg","暗碼毛病"); 
       } 
        
       return mapping.findForward("error"); 
   } 
  
} 

5、  樹立struts-config.xml
作為Struts框架的焦點描寫,struts-config.xml可以說“一切盡在控制”。它不只描寫了MVC模子,界說一切視圖層和掌握層之間的接口(ActionForm),與掌握層和模子層的接口(Action)停止聯合,並且可以界說一些附加組件,如國際化信息資本排至文件,標簽庫信息等。
依然是站在偉人的肩膀上,將我們下載的struts  bin文件夾中的struts-config.xml文件復制到我們的項目標WEB-INF中,刪除struts-config.xml中的正文部門。把Action和ActionForm設置裝備擺設起來。ActionForm放到<form-beans></form-beans>中,Action設置裝備擺設放到<action-mappings></action-mappings>中,struts-config.xml設置裝備擺設代碼以下所示。

 <?xml version="1.0" encoding="ISO-8859-1" ?> 
  
<!DOCTYPE struts-config PUBLIC 
     "-//Apache Software Foundation//DTD Struts Configuration1.2//EN" 
     "http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd"> 
  
  
<struts-config> 
  <form-beans> 
    <form-bean name="loginForm" type="com.bjpowernode.struts.LoginActionForm"/> 
  </form-beans> 
   
  <action-mappings> 
    <action path="/login" 
       type="com.bjpowernode.struts.LoginAction" 
       name="loginForm" 
       scope="request" 
       > 
       <forward name="success" path="/login_success.jsp"/> 
       <forward name="error" path="/login_error.jsp"/> 
    </action> 
  </action-mappings>  
</struts-config> 

個中form-beans元素中可以界說0個或1個以上的form-bean元素,每一個form-bean被以為是一個ActionForm對象,name屬性表現form-bean元素的稱號,type屬性指定其類名和途徑。
Action-mappings元素用來包括零到多個action,其子元素action擔任詳細映照的具體信息。在action-mapping元素中可以界說0個或1個以上的action元素。每一個action元素接收path屬性界說的要求,並映照到type屬性所界說的詳細action對象。在映照進程中,將name屬性界說的actionform一並傳曩昔,它有以下屬性:
Parameter,scope兩個屬性指定了傳送方法和規模,scope經常使用的值有兩個“session”和“request”。
Validate屬性指定了能否須要actionform的驗證。
Forward元素,將要求success轉發到”/login_success.jsp”頁面。
6、營業邏輯類UserManager和自界說異常類
代碼以下所示:

packagecom.bjpowernode.struts; 
  
publicclassUserManager { 
    
   publicvoid login(Stringusername,Stringpassword) 
   { 
       if(!"admin".equals(username)) 
       { 
          thrownewUserNotFoundException(); 
       } 
        
        
       if(!"admin".equals(password)) 
       { 
          thrownewPasswordErrorException(); 
       } 
   } 
  
} 

自界說異常類UserNotFoundException和PasswordErrorException代碼以下所示。

packagecom.bjpowernode.struts; 
  
public class UserNotFoundExceptionextends RuntimeException { 
  
   public UserNotFoundException() { 
   } 
  
   public UserNotFoundException(Stringmessage) { 
       super(message); 
   } 
  
   public UserNotFoundException(Throwable cause) { 
       super(cause); 
   } 
  
   public UserNotFoundException(Stringmessage,Throwable cause) { 
       super(message, cause); 
   } 
  
} 
  
packagecom.bjpowernode.struts; 
  
public class PasswordErrorExceptionextends RuntimeException { 
  
   public PasswordErrorException() { 
   } 
  
   public PasswordErrorException(Stringmessage) { 
       super(message); 
   } 
  
   public PasswordErrorException(Throwable cause) { 
       super(cause); 
   } 
  
   public PasswordErrorException(Stringmessage,Throwable cause) { 
       super(message, cause); 
   } 
  
} 

7、視圖jsp頁面挪用。
登錄界面login.jsp,毛病顯示界面login_error.jsp,登錄勝利界面login_success.jsp。代碼以下所示。

<%@pagelanguage="java" contentType="text/html; charset=GB18030" 
  pageEncoding="GB18030"%> 
<!DOCTYPEhtml PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=GB18030"> 
<title>Inserttitle here</title> 
</head> 
<body> 
<form action="login.do" method="post"> 
  用戶:<inputtypeinputtype="text" name="username"><Br> 
  暗碼:<inputtypeinputtype="password" name="password"></br> 
  <input type="submit" value="登錄"> 
</form> 
</body> 
</html> 

Login_success.jsp.

<%@page language="java"contentType="text/html;charset=GB18030" 
  pageEncoding="GB18030"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=GB18030"> 
<title>Insert title here</title> 
</head> 
<body> 
 ${username},登錄勝利! 
</body> 
</html> 

Login_error.jsp界面。

<%@page language="java" contentType="text/html; charset=GB18030" 
  pageEncoding="GB18030"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=GB18030"> 
<title>Insert title here</title> 
</head> 
<body> 
 <%-- 
 <%=request.getAttribute("msg") %> 
 --%> 
  
 ${msg } 
</body> 
</html> 

就如許我們完成了應用struts框架完成用戶登錄。就如許從初步進修到簡略運用,跟著運用的次數增多,我們會對struts懂得愈來愈深入,而且感觸感染struts框架給我們帶來的便捷。


表單處置器ActionForm(靜態靜態)
下面講授了struts設置裝備擺設,完成了應用struts框架停止登錄的示例。一些名詞曾經在腦海中飄揚了。
ActionServlet:struts的掌握器,擔任截取URL或分發。供給Model(模子層)和View(視圖層)應用,是以可將它看做是模子和視圖之間的中介。
ActionForm:用於封裝用戶的要求參數,而要求參數是經由過程JSP頁面的表單域傳遞過去的。
Action:用戶要求和和營業邏輯的橋梁,每一個Action作為營業邏輯的署理,可以挪用營業邏輯。
一些成績是有需要再次提起的。
應用根本的MVC和應用struts框架差別,應用struts利益在哪裡?
我們曉得我們不實用框架的時刻,在MVC中典范的掌握器是servlet,servlet可以獲得參數和邏輯模子的挪用和轉向功效。而struts對它做了封裝,為何要停止封裝?當我們要求到一個servlet,我們在這個servlet中獲得參數、挪用營業邏輯、轉向,我們在servlet中寫逝世了轉向頁面,當我們想要換一個轉向頁面的時刻就須要修改代碼了,修改代碼後還要從新停止編譯。
並且從表單中傳遞過去的數據滿是字符串情勢,我們還須要依據現實的需求把字符串轉換為我們須要的類型,假如許多處所須要轉換,而且每次應用每次都要停止轉換,有無一種機制,把表單中的字符串拿過去主動轉換為響應的類型呢?不須要我們再停止手動轉換呢?
基於上述的未便,轉向不靈巧,表單中的字符串每次都要停止轉換等一系列的緣由,struts把這些做了封裝。提掏出反復的操作,轉向信息放到了設置裝備擺設文件中,如許加倍靈巧了。
在上述成績中,論述了struts對表單的封裝,在web運用法式開辟進程中,開辟人員須要年夜量的時光來處置表單成績,有的時刻是經由過程表單提交一些新的成績,有的是經由過程表單修正數據,一切這些表單在處的處置在傳統web開辟中長短常龐雜的。本篇重點說說struts中的表單處置器ActionForm。
ActionForm
成績的提出
在傳統的web運用法式開辟中,復雜的表單處置給開辟任務人員帶來了偉大的艱苦,在傳統的開辟說話中,沒有組建可以主動搜集用戶輸出的表單內容,開辟人員不能不在法式中手動提取表單的值。例如在表單中有如許的一個文本輸出域:<inputtype=”text” name=”password”> 要在法式中獲得這個文本輸出域的值,只能用如許的辦法:request.getParameter(“password”);如許的處置辦法在表單比擬小的時刻是可使用的,然則當表單輸出項較多的時刻就不能不年夜量反復相似下面的處置。
成績的處理
在Struts中就是應用ActionForm來處理這個成績,關於每個用戶的表單,須要供給一個ActionForm,這個ActionForm主動把客戶提交的表單保留在這個ActionForm中,然後把這個ActionForm傳遞給Action,從而在Action中可以經由過程這個ActionForm掏出用戶信息,然後依據這些信息完成對應的營業邏輯處置。
例如在Struts頂用struts的html標簽表述成下述情勢:

<html:text property=”password”/>

在這類情形下表單提交後,struts框架會主動把表單中的這個輸出項賦值到ActionForm中的password屬性中,從而把表單中的內容保留在ActionForm中,全部進程由struts主動完成,不須要開辟人員干預。我們在創立ActionForm時要遵守以下標准:
(1)每一個ActionForm都要繼續org.apache.struts.action.ActionForm類,並且須要為每個表單供給一個ActionForm。
(2)ActionForm中每一個屬性要與表單中的輸出項逐個對應。
(3)AcitonForm每一個屬性都要供給的getter辦法和setter辦法。Struts框架就是經由過程這些辦法來保留表單的值,然後在Action中經由過程這些辦法獲得表單的值。
(4)假如表單須要驗證,就須要在ActionForm中供給validate辦法,這個辦法中供給對表單的詳細驗證邏輯。這個辦法不只完成了數據驗證同時完成了數據緩沖的感化,在validate辦法中驗證用戶提交表單的有用性,當表單驗證掉敗時會主動前往用戶輸出頁面,這時候候用戶輸出的值都保留在ActionForm中,前往頁面時struts框架會掏出AcitonForm中的數據並輸入到對應的用戶輸出項中,包管了用戶開端輸出的表單信息。

成績的提出
以上所說的是靜態ActionForm,當我們為每一個表單都創立一個AcitonForm的時刻,會招致ActionForm數目過量。每一個ActionForm過強的聚合性也會使代碼難以保護和重用。怎樣樣不消去創立過量的ActionForm?並且當提交表單的屬性名字雷同時,不消再反復創立AcitonForm(例如登錄和注冊)?
成績的處理
Struts中可使用靜態ActionForm來處理上述成績。靜態ActionForm不須要創立本身的ActionForm,須要在創立本身Action的時刻直接把execute辦法中傳遞過去的form對象轉化為DynaActionForm。
我們須要更改struts-config.xml中form-beans設置裝備擺設:

<form-beans> 
      <form-bean name="dynaForm" type="org.apache.struts.action.DynaActionForm"> 
         <form-property name="username" type="java.lang.String" /> 
         <form-property name="age" type="java.lang.Integer"/> 
      </form-bean> 
  </form-beans> 

Action中應用get辦法獲得表單中的值。

/** 
 * 測試靜態ActionForm. 
 * @author summer 
 * 
 */ 
public classDynaActionFormTestAction extends Action { 
  
  @Override 
  publicActionForward execute(ActionMapping mapping, ActionForm form, 
         HttpServletRequestrequest, HttpServletResponse response) 
         throwsException { 
      
      DynaActionFormdaf = (DynaActionForm)form; 
      
      //掏出map中key值為name,value為類名. 
      Stringusername = (String)daf.get("username"); 
      Integerage = (Integer)daf.get("age"); 
      
      System.out.println("username"+username); 
      System.out.println("username"+age); 
      
      returnmapping.findForward("success"); 
  } 
  
} 

靜態ActionForm方法,應用get/set辦法,而靜態ActionForm方法,應用map的getkey方法,個中key就是標簽name的值。
應用靜態ActionForm長處:若更改表單和ActionForm時不須要從新編譯,而靜態的須要更改靜態的ActionForm.java文件,必需從新編譯。缺陷:靜態前往的是對應的值,靜態ActionForm前往的是對象,我們還要把這個對象停止強迫轉換。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved