亚洲一区二区电影,国产精品亚洲综合天堂夜夜,亚洲精品无码久久久久去q http://m.tkk7.com/microlab4321/category/24781.html適時總結是一種很好的彌補方法!zh-cnSat, 06 Oct 2007 00:39:14 GMTSat, 06 Oct 2007 00:39:14 GMT60Struts學習筆記(7)良好的大局觀:J2EE設計模式http://m.tkk7.com/microlab4321/articles/150350.html冬天出走的豬冬天出走的豬Thu, 04 Oct 2007 04:48:00 GMThttp://m.tkk7.com/microlab4321/articles/150350.htmlhttp://m.tkk7.com/microlab4321/comments/150350.htmlhttp://m.tkk7.com/microlab4321/articles/150350.html#Feedback0http://m.tkk7.com/microlab4321/comments/commentRss/150350.htmlhttp://m.tkk7.com/microlab4321/services/trackbacks/150350.html 

一.概述

   設計模式是對重復出現的問題的一種可以重用的解決方法,其本質其實是解偶.
  1.J2EE應用模型的分層 (1)服務器端業務邏輯
                                      (2)服務器端表示層
                                     (3)客戶端表示層
  2.J2EE的設計模式   (1)表示層體系結構模式
                                    (2)表示層高級體系結構模式
                                    (3)表示層伸縮性模式
                                    (4)業務層模式
                                    (5)數據傳遞模式
                                    (6)數據庫模式

二.詳解
  1.表示層體系結構模式
   1.1前端控制模式
    通過創建統一而且集中的組建來執行公共的任務,在J2EE的功能是截取所有的請求,并根據選擇利用這個前端控制器將請求轉發到一個頁面控制器,頁面控制器解析用戶的請求,選擇具體的業務邏輯,并根據結果轉到頁面視圖
   一個Servlet可以作為一個前端控制器,也可以作為一個頁面控制器,這個servlet調用請求所應該執行的業務邏輯,并根據業務邏輯的結果返回到具體的顯示頁面..

  1.1.1.Struts框架前端模式的實現
   Actionservlet是Struts框架的主要Servlet,所有請求都會通過它.在ActionServelt中,它會處理如下工作
  1)ActionServelt調用RequestProcessor的Process方法處理公共任務
  2)RequestProcessor得到請求對應的Action處理請求的具體工作
   在RequestProcessor的process方法中最后會調用ProcessActionPerform方法,這就是一個命名模式的實現,將具體請求的工作分配到Action

  1.2.1MVC模式
    這個模式是Struts框架所遵循的模式,利用Model2構架來解偶,它在J2EE的工能為根據視圖層,控制層和模型層3層的不同功能實現各層任務.
    (1) 視圖層提供顯示頁面的功能.
    (2)控制器層則接收用戶輸入,并轉到模型層來處理結果
    (3)模型層處理業務邏輯在選擇視圖層的顯示頁面來完成工作
    常見如下
   *Struts框架的實現
   *JeanBean或者EJB模型層,JSP或者HTML作為視圖層,Servelt作為控制器
 
1.2.2裝飾模式
    該模式或為客戶端提供一個透明的擴充某實例功能的方法.該方法的返回類型就是這個實例,在客戶端不斷調用這個方法的同時,該實例的內部表象已經隨著功能改變完全不同了.
    J2EE設計模式中的"裝飾模式"
   servelt本身就是支持裝飾器模式,它的表現是裝飾一個request請求,利用裝飾器類截獲所有發送給目標對象的請求,并執行需要的工作,完成工作之后再把請求轉發到下一個裝飾器,直到沒有了裝飾器,最后將請求發送到Servlet
   Servlet利用過濾器來攔截請求和響應.在請求到達Servelt前,為這個請求做一些額外處理.過濾器可以被看成一個程序,每個過濾器之間都能互相傳遞.
   過濾器Filter接口代碼:
 
public interface Filter
{
public abstract void init(FilterConfig filterconfig) throwsException
//do Filter方法的FilterChain參數就是為了實現裝飾器模式的必要條件
public abstrat void doFilter(ServletRequest serveltrequest,ServeltResponse servletsponse,FilterChain filterchain) throws IOException,servletExcetpion;
public abstract void destroy();
}
Filter()對象十分重用,doFilter()方法最后會調用FilterChain對象的doFilter()方法,FilterChain對象的doFilter()方法會激活下一個相關的過濾器

 一個過濾器
   這個過濾器SetCharacterEncodingFilter被用在當request請求到達Servelt前,為request的參數信息的字符編碼進行設定
   SetCharcterEncodingFilter.java(省略)

配置過濾器如下:
<filter>
<filter-name>Set character</filter-name>
<filter-class>XXX.XXX.SetcharacterEncodingFilter</filter-class>聲明過濾器的java實體名
<init-param>/*表明了過濾器要傳入的初始化方法*/
<param-name>encoding</param-name>
<param-value>UTF-8</param-valie>
</init-param>
</filter>

   1.3.1表示層高級體系結構模式
    1)復合視圖模式(合成模式):提供一個樹狀的對象結構,樹枝類與樹葉類都實現同一個接口,以便客戶端在調用任何對象時都只需要調用該樹狀結構的根接口就可以了
   2) 復合視圖在服務器端表示層使用,利用的合成模式的思想將視圖的布局從視圖中抽離出來,形成由一系列通用組件組成的模板
       把視圖("島航","頁眉","頁腳"和"主體")的集合,每個元素是一個結點,而每個元素也可以是一個容器,包含更多的子元素.
     模板可以被看成是接口,視圖則可被看成樹枝結點和樹葉結點

1.3.2視圖助手模式
    此模式避免視圖過于特殊化,功能是使一組視圖助手將模型數據轉換成一種中間數據模式.視圖或視圖助手能夠將中間數據模型轉換成一種合適表達給用戶的形式如"html""xml"
    (1)標簽的工作方式
      標簽庫用來幫助程序員通過簡單的代碼構造實現頁面邏輯.一個標簽應該繼承javax.servlet.jsp.tagext.tagsupport,并給出doStartTag和doEndTag兩個方法來實現
      doStartTag方法:在標簽開始時由Jsp容器調用,通常在這個方法中實現業務邏輯
      doEndTag方法:在標簽結束時由JSP容器調用,通常在這個方法控制輸出.
     (2)標簽的實現
       以下是Struts框架提供的ConditionalTagBas部分代碼
       ConditionalTagBas
          
 1public int doStartTag() throws JspException{
 2 //doStartTag()表示標簽開始
 3  if(condition())
 4    return(EVAL_BODY_INCLUDE);
 5 //EVAL_BODY_INCLUDE告訴JSP容器標簽正文的內容,并把這些內容送入輸出流
 6  else
 7     return(SKIP_BODY);
 8 //SKIP_BODY告訴JSP容器不要處理標簽正文的內容
 9 }

10public int doEndTag() throws JspException{
11//doEndTag() 表示標簽結束
12   return(EVAL_PAGE);
13//EVAL_PAGE標簽處理完畢
14}


1.3.3服務工作模式
     服務工作者模式將頁面流轉,前端控制模式,視圖助手模式合在一起使用,表示"請求--轉發--視圖"的整套流程,服務器工作者模式也是MVC模式的實現標準,Struts框架本身基于這個模式實現

1.4  表示層伸縮性模式
  1.4.1異步頁面模式
         當遠程數據發生變化時,將其緩存下來這個模式又被稱為"發布者--訂閱者--模型".功能是利用一個訂閱者角色在一定的時間間隔或數據發生變化時接收來自發布者角色的數據,訂閱者角色同時會利用模型層來更新數據庫,常見的應用為,當發布服務器要顯示最新信息的Html頁面時,會利用一個訂閱者角色我負責.
  
   1.4.2
      該模式可以緩存動態的頁面,盡可能減少重復生成的頁面,功能是利用一個緩存過濾器截獲請求.判斷該請求所返回的頁面是否有緩存,如果它在緩存中,則以緩存的頁面最高效地進行響應;如果沒有可緩存數據,則執行隨后的工作,緩存生成頁面的結果,緩存過濾器應該被擺放在"裝飾過濾器"和工作Servlet之前,該模式其實是裝飾器模式的一種變體,常見為對HTTPServletResponse對象進行裝飾來保存請求處理結果
    1.4.3
      資源池模式 JDBC連接池
    客戶



冬天出走的豬 2007-10-04 12:48 發表評論
]]>
Struts學習筆記(6)Validator框架http://m.tkk7.com/microlab4321/articles/149349.html冬天出走的豬冬天出走的豬Fri, 28 Sep 2007 13:13:00 GMThttp://m.tkk7.com/microlab4321/articles/149349.htmlhttp://m.tkk7.com/microlab4321/comments/149349.htmlhttp://m.tkk7.com/microlab4321/articles/149349.html#Feedback0http://m.tkk7.com/microlab4321/comments/commentRss/149349.htmlhttp://m.tkk7.com/microlab4321/services/trackbacks/149349.html  
2.Validator框架由Validator檢驗類,Validator配置文件,資源配置文件和JSP標簽庫組成..
 (1).Validator檢驗類
     該類是在進行檢驗類時所需要的一個java類.每一次檢驗的發生都會調用該檢驗類中的方法,該檢驗類的方法只針對一種檢驗規則,但是通過配置文件的聲明,可以使檢驗類規則產生合作.組合成更復雜的檢驗規則.

 (2).Validator配置文件
    Validator-rule.xml是檢驗規則配置文件,定義了應用程序中可以使用Validators檢驗規則.換句話就是將所有可用的檢驗規則聲明在Validator-rule.xml中等待被調用.
   Validator.xml是具體檢驗配置文件,將Validator-rules,xml中的檢驗和應用結合起來的配置文件.他的名稱并不一定是"validator.xml";可以自定義.甚至可以不用該文件而直接在Validator-rules.xml中指定具體檢驗.但為了降低偶合,還是應該分出該配置文件.
 (3).資源配置文件
   該文件就是報錯信息文件,是為了將檢驗的出錯信息顯示給客戶端而使用的.就Struts框架和Validator框架協同工作來看,可以認為它就是Struts的resource 綁定所指定的資源配置文件.
(4).JSP標簽
  JSP用于讀取資源配置文件中的報錯信息顯示出來.Strts框架中許多與資源配置文件相關的標簽都實現了這種工能,另外,<html:javascropt>標簽可以直接從validator框架中的validaotr-rulse.xml中得到javascrupt的檢驗結果.

(2)Validator-rule.xml文件
   Validator框架是通過聲明的方式,而不是編程的方式來調用檢驗規則,因此配置文件Validator-rules.xml十分重要,在Validator-rules.xml中講檢驗類所實現的檢驗規則和聲明表示銜接起來,提供聲明實現
   Validator-rules.xml文件
  Validator框架是通過聲明的方式,而不是編程的方式來調用檢驗規則.因此配置文件Validator-rules.xml十分重要,在Validator-rules.xml中將檢驗類所實現的檢驗規則和聲明標識銜接起來,提供聲明的實現.
   簡單的Validator-rules.xml

<!DOCTYPE form-validation PUBLIC
          "-//Apache Software Foundation//DTD Commons Validator Rules Configuration 1.0//EN"
          "http://jakarta.apache.org/commons/dtds/validator_1_0.dtd">
<!--
-->

<form-validation>

   <global>  //所有檢驗規則的聲明都被定義<global>元素下作為其子元素  
    <validator name="required"//每個validator都代表一個檢驗規則,name屬性是該檢驗規則的聲明標識
            classname="org.apache.struts.validator.FieldChecks"//檢驗規則的實體類
               method="validateRequired"http://檢驗類中的方法名,指定聲明標識將調用該方法來進行檢驗
         methodParams="java.lang.Object,//檢驗類所需要的傳入參數
                       org.apache.commons.validator.ValidatorAction,
                       org.apache.commons.validator.Field,
                       org.apache.struts.action.ActionErrors,
                       javax.servlet.http.HttpServletRequest"
                  msg="errors.required">//msg屬性指定了報錯信息在資源配置文件中的"鍵值",通過該"鍵值"從資源配置文件中找到該條報錯信息,并顯示出來.
      </validator>
      <validator name="integer"
            classname="org.apache.struts.validator.FieldChecks"
               method="validateInteger"
         methodParams="java.lang.Object,
                       org.apache.commons.validator.ValidatorAction,
                       org.apache.commons.validator.Field,
                       org.apache.struts.action.ActionErrors,
                       javax.servlet.http.HttpServletRequest"
              depends=""
                  msg="errors.integer"
         </validator>
      <validator name="range"
            classname="org.apache.struts.validator.FieldChecks"
               method="validateIntRange"
         methodParams="java.lang.Object,
                       org.apache.commons.validator.ValidatorAction,
                       org.apache.commons.validator.Field,
                       org.apache.struts.action.ActionErrors,
                       javax.servlet.http.HttpServletRequest"
              depends="integer"
                  msg="errors.range">
      </validator>
   </global>
</form-validation>
3個<validator>元素的校驗規則
*校驗值是否不為空或不為null
*校驗值是否可以安全轉換為integer型
*校驗該校驗值的范圍是否在最大和最小值之間

<validator>元素還有其他屬性來幫助實現其他功能
name屬性為range的<validator>元素擁有depends屬性,并指定屬性的內容為"integer"
depends屬性的含義是:本<validator>校驗規則必須依賴另一個檢驗規則而實現.換句話說,就是必須先校驗depends屬性所指定的<validator>檢驗規則,通過后才會校驗自身規則.depends屬性的內容應該是另一組<validator>校驗規則的聲明.
 
(2)2
validator.xml文件
  該文件是將validator-rules.xml中的校驗和應用程序結合起來的配置文件,有了validator-rule.xml后,只要通過validator,.xml將它與具體校驗邏輯結合,就能完成真正的具體校驗
  結合validator.xml的ActionForm
validator框架的ActionForm
package struts.sample.cap5.sample.form;
import org.apache.struts.validator.ValidatorForm;
public class CheckForm extends ValidatorForm{//不能繼承普通的ActionForm,必須繼承自ValidatorForm或ValidatorActionForm.若是動態ActionForm,則需要繼續于DynaValidatorFor或DynaValidatorActionForm
private sring userName;
private int age;
private string email;
private string password;
public String getUserName(){
return userName;
}
public String getUserName(){
return userName;
}
public void setUserName(String userName){
this.userName=userName;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age=age;
}
public String getEmail(){
return email;
}
public void setEmail(string email){
this.email=email;
}
public String getPassWord(){
return password;
}
public void setPassword(String password){
this.password=password;
}
}
*ValidatorForm(或DynaValidatorFor)將根據surut-config.xml文件中<action>的name屬性,為當前ActionForm調用相應的校驗規則,這在validator.xml中可以看到
*ValidatorActionForm(或DynaValidatorActionForm)使用struts-config.xml中<action>的path屬性,為當前ActionForm調用相應的檢驗規則.



冬天出走的豬 2007-09-28 21:13 發表評論
]]>
Struts學習筆記(5)Struts國際化http://m.tkk7.com/microlab4321/articles/147822.html冬天出走的豬冬天出走的豬Mon, 24 Sep 2007 07:49:00 GMThttp://m.tkk7.com/microlab4321/articles/147822.htmlhttp://m.tkk7.com/microlab4321/comments/147822.htmlhttp://m.tkk7.com/microlab4321/articles/147822.html#Feedback0http://m.tkk7.com/microlab4321/comments/commentRss/147822.htmlhttp://m.tkk7.com/microlab4321/services/trackbacks/147822.html一國際化與本地化
   1.國際化的含義:
     就是讓一個程序在不同語系的操作系統之間能夠有不同的顯示,所謂不同顯示的含義就是:語言的不同,語法的不同,數字.日期.排序以及貨幣格式的不同.
  
   2.本地化的含義
    本地化相對于國際化來說,所涵蓋的范圍小得多,它指為單一一個操作系統提供符合的語言環境。比喻直接將英文軟件轉化為中文軟件就是本地化的一種。國際化是泛指,本地化是單一指定。

二認識編碼
   1.UNICODE是微軟所提出的多字節等長碼,它可以使雙字節既可以表示英文字母,也可以表示漢字。表示英文字母的等長碼時,對其第一個字節進行補充動作。
   java語言默認的編碼就是UNICODE;通常被國際化組織認可,用雙字節表示的中文中,針對Struts的國際化主要是UNICODE.
 
    2.Struts中國際化的步驟:
   UTF-8編碼就是以UNICODE編碼的儲存方式來表示的,它是Struts國際化的好幫手,它已經包含了英文字母的顯示。
   (1).指定程序編碼和編譯時的字符編碼為UTF-8
   (2).指定請求到來時的字符編碼為UTF-8
   (3).在JSP的頭部聲明中也要出現UTF-8聲明
   (4).對任何外部資源配置文件的編寫都使用UTF-8

三.Resource綁定
  1.在Struts-config.xml中,配置資源文件需要做如下步驟
  (1).從Struts-config.xml中找到"resource.application"
  (2).為應該確定本地化環境后綴
  (3).為本地化應用加上.properties擴展名
  (4).在classpath目錄下找到resource目錄下的本地應用資源配置文件.

2.確定本地化后綴
  JSP發送請求到達ActionServlet時.request都會用一個request.getLcale()的方法返回java.util.Locale對象.這個Locale對象保存的就是本地化區域環境.Locale對象由JDK提供專門用來實現國際化工作.
  在Struts框架中,與Locale對象配合"確定本地化環境后綴",會讀取Locale對象的內容,并將它的語言和國家信息"_"產生一組字符串,追加到原來的文件名后.
   static public final Locale SIMPLFIED_CHINESE=new Locale("zh","CN");
 struts框架讀取對象該對象后,產生的本地化環境后綴就是"application_zh_CN".再加上.properties的擴展名,那么在簡體中文環境中,struts框架真正應該要讀取得的資源配置文件其實應該是:application_zh_CN.properties

3.Locale對象
    要動態改變Locale對象,就必須先確定Locale對象的讀取在框架中是怎樣進行的,Locale對象被保存在什么地方.
   Struts框架對于Locale對象的讀取是通過Session來進行的程序開始進行時,Struts框架就已經將Locale對象的實例存放在Session中得到Locale對象,再得到合適的資源配置文件.
   把本地化Local對象的實例存放在Session中.
 (1).存放本地化Locale對象到Session中是由Struts框架自行完成的..
 (2).Struts框架內容定義了GloBals類的靜態全局變量,LOCALE_KEY,用來表示org,apache,struts.action.LOCALE;不應單獨使用,而是存放Locale對象用Globals.LOCALE_KEY來代替



冬天出走的豬 2007-09-24 15:49 發表評論
]]>
Struts學習筆記(4)Struts-config.xml詳解http://m.tkk7.com/microlab4321/articles/147444.html冬天出走的豬冬天出走的豬Sat, 22 Sep 2007 09:59:00 GMThttp://m.tkk7.com/microlab4321/articles/147444.htmlhttp://m.tkk7.com/microlab4321/comments/147444.htmlhttp://m.tkk7.com/microlab4321/articles/147444.html#Feedback0http://m.tkk7.com/microlab4321/comments/commentRss/147444.htmlhttp://m.tkk7.com/microlab4321/services/trackbacks/147444.html    一.處理異常的exception和global-exception
   在Web應用中,對異常處理位置都是業務邏輯失敗的信息.因為異常處理還需要編寫ActionErrors,給出報錯信息將導致在Action會看到許多的ActionErrors的代碼.
   struts解決了這個問題,它允許程序員配置任何異常,并且在將異常轉化為報錯信息的時候,不必須自行使用"try catch"來捕捉,寫報錯轉發到出錯頁面.
   1.局部異常
      就是針對一個Action響應所拋出的異常,該異常將只負責Action的程序段,并且自定義在<action>元素中.

   局部異常的定義:
  <action-mapping>
   <action
      input="SampleJsp.jsp" 指定了SampleForm對象使用的ActionForrm對象名稱,與form-bean元素定義的name屬性一致
      name="SampleForm"  指定了SampleForm對象使用的ActionForm對象名稱
      path="/SampleAction" 如果使用了SampleForm.do的響應,那么ActionServlet控制器組件就會自動找到本Action對象
      scope="request"   使用ActionForm的范圍
      type="struts.sample.cap3.sample1.action.SampleAction"  解釋本Action對象的路俓
      validate="false">   定義使用的ActionForm在Action是否需要檢驗
      <expetion
      key="userNameException"  指定了在資源配置文件中報錯信息的鍵
      path="/SampleJsp.jsp"   指定了報錯之后所轉發到的JSP頁面,在該頁面中可以通過標簽庫來讀取報錯信息,并顯示
      type="struts.sample.cap3.sample1.exception.UserNameException"/> 指定了該異常類的java實體名
      <exception
       key="SampleJsp.jsp"
       type="java.sql.SQLException"/>
     </action>
      </action-mappings>

 2.全局異常
       指對所有定義在Struts-config.xml的Action程序都進行處理,他定義在<global-exception>元素中
     <global-exception>
     <exception
     key="passWordException.jsp"
     path="SampleJsp.jsp"
     type="struts.sample.cap3.sample.exception.passWordException"/>
    <global-exception>
     定義全局變量時無需將<exception>元素作為任何<action>元素的子元素,而是直接作為 <global-exception>的子元素.

  簡單示例:
  (1).自定義標簽類
      UserNameException.java

package struts.sample.cap3.sample1.exception;
public class UserNameException extends Exception {
  public UserNameException(){
   super();
  }
  public UserNameException(String message){
   super();
  }
  public UserNameException(String message,Throwable cause){
   super(message,cause);
  }
  public UserNameException(Throwable cause){
   super(cause);
  }
  public UserNameException(Exception exc){
   super(exc);
  }

}


(2)業務邏輯類
UserNameService.java

package struts.sample.cap3.sample1.service
 import struts.sample.cap3.sample1.exception.UserNameException;
 import struts.sample.cap3.sample1.exception.UserNameException2;
public class UserNameService {
 public void UserNameLogic() throws UserNameException{
  throw new UserNameException("UserName");
 }

}


(3)Action類
SampleAction.java
 

package struts.sample.cap3.sample1.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 struts.sample.cap3.sample1.exception.UserNameException;
import struts.sample.cap3.sample1.service.UserNameService;
public class SampleAction extends Action{
  public ActionForward execute(
    ActionMapping mapping,
    ActionForm form,
    HttpServletRequest request,
    HttpServletResponse response) throws Exception{
   UserNameService userNameService=new UserNameService();
   return  null;
  }

}


 (4)資源配置文件
application.properties
userNameException=用戶名無法確定
XXX=XXX
....

(5)JSP頁面

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page language="java"%>

<%@ taglib uri="http://jakarta.apache.org/struts/tags-bean" prefix="bean" %>
<%@ taglib uri="http://jakarta.apache.org/struts/tags-html" prefix="html" %>
<html>
<head><title>JSP for SampleForm</title>
</head>
<body>
<html:errors/><p/>
<html:form action="SampleAction.do">
userName : <html:text property="userName"/><br/>
password : <html:password property="password"/><br/>
sex: <html:select property="sex">
    <html:option key="F" value="F"/>
    <html:option key="M" value="M"/>
     </html:select><br/>
     age : <html:text property="age"/><br/>
     email : <html:text property="email"/><br/>
     <html:submit/><html:cacel/>
     </html:form>
</body>
</html>



二:global-forwards標記與全局轉發
 1.全局轉發  
        所謂全局轉發,就是在整個應用程序中,無論怎樣的請求者都可以使用的全局中轉.它可以僅僅通過一個請求轉發到一個JSP頁面,也可以通過另一個請求轉發到另一個已經定義的Action請求.可以理解為全局轉發就是一個控制器,它可以隨著按鈕(請求)的切換而轉換(轉發)到任何一個頻道(JSP頁面和請求).

2. global-forward標記的配置
 <blobal-forward>
 <forward
   name="Login"
   path="/LoginSampleJSP.jsp"/>
 <forward
   name="success"
   path="/SampleAction"
   redirect="true"  屬性允許在2個Web context中進行轉發,默認為false
  contextRelative="true"/>  屬性允許在多個struts配置文件模塊中都可以識別轉發,默認為false.
  </blobal-forwards>
  name的屬性,path的屬性是必須的,它們分別表示了轉發標識和轉發定位,對于任何一個<forward>元素都可以被設置.它實現了無論是全局轉發還是局部轉發都可以在模塊間實現通訊.
 
3.Struts-config.xml中的轉發
 (1).<action>元素結合Action bean的局部轉發
 (2).<action>元素的簡單局部轉發
 (3).Action bean中的程序轉發
 (4).<global-forwards>的全局轉發

(1)這類轉發是在請求到來后做一些業務邏輯,然后根據業務需要將結果轉發到另一個請求或直接顯示出一個JSP頁面.
Struts-config.xml配置
<action-mapping>
 <action
  name="SampleForm"
  path="/SampleAction"
  scope="request"
  type="struts.sample.cap3.sample1.action.SampleAction"
  validate="false">
 <forward name="SampleAction" path="/SampleJsp.jsp"/>
 <forward name="failue" path="/Login"/>

 </action>
 </action-mapping>

Action bean程序代碼
  public class SampleAction extends Action{
   public ActionForward execute(
   ActionMapping mapping,
  ActionForm form,
  HttpServletRequest request ,
  HttpServletResponse response) throws Exception{
 //業務邏輯代碼................
  if(true){
  return mapping.findForward("SampleAction");
 }else{
  return mappingForward("failue")
}
}

 
(2) 這類轉發只需要定義<action>元素,而不用專門的Action bean來配合工作,可以轉發到請求或JSP頁面.通常這類轉發被用作直接轉發到一個JSP顯示頁面的請求.
  <action forward="/SampleJsp.jsp" path="/Welcome"/>
  利用<action>元素的forward屬性和path屬性來完成工作,沒有定義的ActionForm的name屬性和定義Action bean Java實體名的type屬性.當請求為path屬性所定義的內容時,將直接轉發到forward屬性所指定的地方...

(3).通過Action bean的execte方法由程序員利用代碼來制定轉發.通常這類轉發被使用在不確定轉發目的地的場合,可能會根據請求request或ActionForm傳入的內容來指定轉發
Struts-config.xml配置
<action-mapping>
 <action
  name="SampleForm"
  path="/SampleAction"
  scope="request"
  type="struts.sample.cap3.sample1.action.SampleAction"
  validate="false">
 <forward name="SampleAction" path="/SampleJsp.jsp"/>
 <forward name="failue" path="/Login"/>

 </action>
 </action-mapping>

Action bean程序代碼
  public class SampleAction extends Action{
   public ActionForward execute(
   ActionMapping mapping,
  ActionForm form,
  HttpServletRequest request ,
  HttpServletResponse response) throws Exception{
 //業務邏輯代碼................
  return new ActionForward(request.getParmeter("pageFlow"));}
}

返回的ActionForward類型對象可以實現動態轉發,本示例中使用JSP頁面中名為"pageFlow"的控件所指定的值作為轉發目的地."pageFlow"控件的值可以是一個請求,也可以是一個JSP頁面.這樣,轉發的目的地就完全交給進行請求的JSP頁面來指定.
 
(4).這一類型的轉發僅僅關注在轉發這個動作上面,而不關注請求,因此全局轉發必須配合<action>元素或者Action bean來實現"請求-轉發"的整個過程.這類轉發通常被使用在有統一轉發目的地的顯式邏輯中.
struts-config.xml配置(同上)

Actionbean部分(同上)+
return mapping.findForward("Login");
return mapping.findForward("SampleAction");

四.控制器
  Struts框架的控制器由ActionServlet(Struts Servlet) RequestProcessor(請求處理),ModoleConfig(存儲配置信息),Action,
ActionForward(Action的轉發)5個主要對象多組成,他們完成了Struts框架服務器端表示層MVC的所有工作.
  流程如下
  1.客戶端的請求到來后發送到ActionServlet中
  2.ActionServlet調用RequestProoessor處理用戶請求
  3.RequestProcess根據Module得到請求對應的Action
  4.具體Action對象處理請求的具體工作
  5.從Action的處理返回ActionForward,轉發到指定的目的地....


冬天出走的豬 2007-09-22 17:59 發表評論
]]>
(轉)Struts學習心得之Struts流程篇http://m.tkk7.com/microlab4321/articles/137625.html冬天出走的豬冬天出走的豬Fri, 17 Aug 2007 08:46:00 GMThttp://m.tkk7.com/microlab4321/articles/137625.htmlhttp://m.tkk7.com/microlab4321/comments/137625.htmlhttp://m.tkk7.com/microlab4321/articles/137625.html#Feedback0http://m.tkk7.com/microlab4321/comments/commentRss/137625.htmlhttp://m.tkk7.com/microlab4321/services/trackbacks/137625.html閱讀全文

冬天出走的豬 2007-08-17 16:46 發表評論
]]>
(轉)Strus常見錯誤及原因分析 http://m.tkk7.com/microlab4321/articles/137623.html冬天出走的豬冬天出走的豬Fri, 17 Aug 2007 08:43:00 GMThttp://m.tkk7.com/microlab4321/articles/137623.htmlhttp://m.tkk7.com/microlab4321/comments/137623.htmlhttp://m.tkk7.com/microlab4321/articles/137623.html#Feedback0http://m.tkk7.com/microlab4321/comments/commentRss/137623.htmlhttp://m.tkk7.com/microlab4321/services/trackbacks/137623.html

本篇文章包含了在用Struts開發web應用時經常碰到的一些異常和錯誤,根據異常或錯誤信息本身,經常可以找到潛在的錯誤發生原因。

下面列出了一些Struts的常見錯誤和異常,并給出了一些可能發生此類錯誤或異常的原因。有的后面有相關連接,你可以通過它找到更多的信息。

Cannot retrieve mapping for action

異常

javax.servlet.jsp.JspException: Cannot retrieve mapping for action /Login /Login是你的action名字)

 

 

可能原因

action沒有再struts-config.xml 中定義,或沒有找到匹配的action,例如在JSP文件中使用 <html:form action="Login.do".將表單提交給Login.do處理,如果出現上述異常,請查看struts-config.xml中的定義部分,有時可能是打錯了字符或者是某些不符合規則,可以使用struts console工具來檢查。

 

Cannot retrieve definition for form bean null

異常

org.apache.jasper.JasperException: Cannot retrieve definition for form bean null

可能原因       
       

這個異常是因為Struts根據struts-config.xml中的mapping沒有找到action期望的form bean。大部分的情況可能是因為在form-bean中設置的name屬性和action中設置的name屬性不匹配所致。換句話說,actionform都應該各自有一個name屬性,并且要精確匹配,包括大小寫。這個錯誤當沒有name屬性和action關聯時也會發生,如果沒有在action中指定name屬性,那么就沒有name屬性和action相關聯。當然當action制作某些控制時,譬如根據參數值跳轉到相應的jsp頁面,而不是處理表單數據,這是就不用name屬性,這也是action的使用方法之一。

 

No action instance for path /xxxx could be created

異常

No action instance for path /xxxx could be created

可能原因

特別提示:因為有很多中情況會導致這個錯誤的發生,所以推薦大家調高你的web服務器的日志/調試級別,這樣可以從更多的信息中看到潛在的、在試圖創建action類時發生的錯誤,這個action類你已經在struts-config.xml中設置了關聯(即添加了<action>標簽)。

struts-config.xml中通過action標簽的class屬性指定的action類不能被找到有很多種原因,例如:

  • 定位編譯后的.class文件失敗。Failure to place compiled .class file for the action in the classpath (web開發中,class的的位置在r WEB-INF/classes,所以你的action class必須要在這個目錄下。例如你的action類位于WEB-INF/classes/action/Login.class,那么在struts-config.xml中設置action的屬性type時就是action.Login).
  • 拼寫錯誤,這個也時有發生,并且不易找到,特別注意第一個字母的大小寫和包的名稱。

struts-config.xml中指定的action類沒有繼承自Stuts的Action類,或者你自定義的Action類沒有繼承自Struts提供的Action類。

你的action類必須繼承自Struts提供的Action類。

你的classpath的問題。例如web server沒有發現你的資源文件,資源文件必須在WEB-INF/classes/目錄下

Problem in struts-config.xml file with action mapping.

Problem with data-sources.xml file.

相關鏈接

 

No getter method for property XXXX of bean org.apache.struts.taglib.html.BEAN

異常

javax.servlet.jsp.JspException: No getter method for property username of bean org.apache.struts.taglib.html.BEAN

可能原因

沒有位form bean中的某個變量定義getter 方法

這個錯誤主要發生在表單提交的FormBean中,用struts標記<html:text property=”username”>時,在FormBean中必須有一個getUsername()方法。注意字母“U”。

Related Links

 

java.lang.NoClassDefFoundError: org/apache/struts/action/ActionForm

錯誤

java.lang.NoClassDefFoundError: org/apache/struts/action/ActionForm

可能原因

這個錯誤主要發生在在classpath中找不到相應的Java .class文件。如果這個錯誤發生在web應用程序的運行時,主要是因為指定的class文件不在web serverclasspath中(/WEB-INF/classes /WEB-INF/lib)。

在上面的錯誤中,原因是找不到ActionForm類。

This error is sometimes seen when one or more ActionForm.class instances are actually in the classpath. This most often occurs when ActionForm.class is made available correctly by placing struts.jar in the /WEB-INF/lib directory. When this library has been correctly placed and it is verified that ActionForm.class actually is present in the struts.jar file, the problem is either that more than one copy of ActionForm.class is in the classpath or (more likely) that duplicate versions of class files other than ActionForm are in the same classpath, causing confusion. This is especially true if a class that extends ActionForm is made available twice, such as in an .ear file that encompasses a .war file as well as in the .war file's own classpath (/WEB-INF/classes). This problem can be resolved by guaranteeing that there are no redundant classes, especially those related to Struts (directly from Struts or extensions of Struts), in the web application's view.

相關連接

 

Exception creating bean of class org.apache.struts.action.ActionForm: {1}

異常

javax.servlet.jsp.JspException: Exception creating bean of class org.apache.struts.action.ActionForm: {1}

可能原因

Instantiating Struts-provided ActionForm class directly instead of instantiating a class derived off ActionForm. This might occur implicitly if you specify that a form-bean is this Struts ActionForm class rather than specifying a child of this class for the form-bean.

Not associating an ActionForm-descended class with an action can also lead to this error.

Related Links

 

 

Cannot find ActionMappings or ActionFormBeans collection

Exception

javax.servlet.jsp.JspException: Cannot find ActionMappings or ActionFormBeans collection

可能原因

不是標識Struts actionServlet<servlet>標記就是映射.do擴展名的<sevlet-mapping>標記或者兩者都沒有在web.xml中聲明。

struts-config.xml中的打字或者拼寫錯誤也可導致這個異常的發生。例如缺少一個標記的關閉符號/>最好使用struts console工具檢查一下

另外,load-on-startup必須在web.xml中聲明,這要么是一個空標記,要么指定一個數值,這個數值用來表servlet運行的優先級,數值越大優先級越低。

還有一個和使用load-on-startup有關的是使用Struts預編譯JSP文件時也可能導致這個異常。

相關鏈接

 

NullPointerException at ... RequestUtils.forwardURL

異常

java.lang.NullPointerException at org.apache.struts.util.RequestUtils.forwardURL(RequestUtils.java:1223)

可能原因

struts-config.xml中的forward元素缺少path屬性。例如應該是如下形式:
<forward name="userhome" path="/user/userhome.jsp"/>

 

Cannot find bean org.apache.struts.taglib.html.BEAN in any scope

Exception

javax.servlet.jsp.JspException: Cannot find bean org.apache.struts.taglib.html.BEAN in any scope

 

 

Probable Causes

試圖在Struts的form標記外使用form的子元素。這常常發生在你在</html:form>后面使用Struts的html標記。

另外要注意可能你不經意使用的無主體的標記,如<html:form … />,這樣web 服務器解析時就當作一個無主體的標記,隨后使用的所有<html>標記都被認為是在這個標記之外的,如又使用了<html:text property=”id”>

還有就是在使用taglib引入HTML標記庫時,你使用的prefix的值不是html。 

相關連接

 

Missing message for key xx.xx.xx

Exception

javax.servlet.jsp.JspException: Missing message for key xx.xx.xx

Probable Causes

這個key的值對沒有在資源文件ApplicationResources.properties中定義。如果你使用eclipse時經常碰到這樣的情況,當項目重新編譯時,eclipse會自動將classes目錄下的資源文件刪除。

資源文件ApplicationResources.properties 不在classpath 應將資源文件放到 WEB-INF/classes 目錄下,當然要在struts-config.xml中定義)

 

Cannot find message resources under key org.apache.struts.action.MESSAGE

異常

Cannot find message resources under key org.apache.struts.action.MESSAGE

可能原因

很顯然,這個錯誤是發生在使用資源文件時,而Struts沒有找到資源文件。

Implicitly trying to use message resources that are not available (such as using empty html:options tag instead of specifying the options in its body -- this assumes options are specified in ApplicationResources.properties file)

XML parser issues -- too many, too few, incorrect/incompatible versions

Related Links

 

No input attribute for mapping path /loginAction

錯誤

No input attribute for mapping path /xxxxAction

可能原因e

No input attribute in action mapping in struts-config.xml file for the action with the name specified in the error message. An input attribute is not required if form validation is not performed (either because the validate attribute is set to false or because the validation method in the relevant form class is not implemented. The input attribute specifies the page leading to this action because that page is used to display error messages from the form validation.

Related Links

 

 

Strange Output Characters

錯誤

Strange and seemingly random characters in HTML and on screen, but not in original JSP or servlet.

可能原因

混和使用Strutshtml:form標記和標準的HTML標記不正確。

使用的編碼樣式在本頁中不支持。

 

"Document contained no data" or no data rendered on page

錯誤

"Document contained no data" in Netscape

No data rendered (completely empty) page in Microsoft Internet Explorer

可能原因

使用一個Action的派生類而沒有實現perform()方法或execute()方法。在Struts1.0中實現的是perform()方法,在Struts1.1中實現的是execute()方法,但Struts1.1向后兼容perform()方法。

但你使用Struts1.1創建一個Action的派生類,并且實現了execute()方法,而你在Struts1.0中運行的話,就會得到"Document contained no data" error message in Netscape or a completely empty (no HTML whatsoever) page rendered in Microsoft Internet Explorer.”的錯誤信息。

 



冬天出走的豬 2007-08-17 16:43 發表評論
]]>
Struts環境配置手順(eclipse版),包括SQL Server的連接 http://m.tkk7.com/microlab4321/articles/137303.html冬天出走的豬冬天出走的豬Thu, 16 Aug 2007 08:04:00 GMThttp://m.tkk7.com/microlab4321/articles/137303.htmlhttp://m.tkk7.com/microlab4321/comments/137303.htmlhttp://m.tkk7.com/microlab4321/articles/137303.html#Feedback0http://m.tkk7.com/microlab4321/comments/commentRss/137303.htmlhttp://m.tkk7.com/microlab4321/services/trackbacks/137303.html
1.Eclipse
  下載網址:  http://www.eclipse.org/

2.tomcat
  下載網址:  http://jakarta.apache.org/site/binindex.cgi

3.struts
  下載網址:  http://jakarta.apache.org/site/binindex.cgi

4.tomcat for Eclipse插件
  下載網址:  http://www.sysdeo.com/eclipse/tomcatPlugin.html

5.easy struts插件
  下載網址:  http://sourceforge.net/projects/easystruts

6.EJB開發工具lomboz(不是必需的)  
  下載網址:  http://www.objectlearn.com/

把上述4中的com.sysdeo.eclipse.tomcat_2.2.1和上述5中的com.cross.easystruts.eclipse_0.6.4分別COPY到
eclipse\plugins\,然后進行以下設置

1.Tomcat的初始化設置:啟動Eclipse,通過菜單Windows->Preferences打開設置窗口
  選擇Tomcat并做配置
1.Easy Struts的初始化設置:啟動Eclipse,通過菜單Windows->Preferences打開設置窗口
  選擇struts 1.1并在struts 1.1所需的庫文件中找到并添加struts.jar文件
3.在struts 1.1所需的類型庫描述文件中建議至少加入前面提到的三個描述文件分別是:
  struts_html.tld、struts_bean.tld、struts_logic.tld,這三個文件會在創建struts應用項目時自動拷貝到項目的WEB-INF目錄下。
4.新建一個Tomcat項目,然后右擊project->Properties->Libraries,把struts 1.1中的包全部加入\r
5.新建Add Easy Struts Support
6.把struts 1.1中的包全部COPY到project->WEB-INF\LIB\

用JAVA連接SQL Server 2000取得數據
1.下載JDBC FOR SQLSERVER 的驅動:
http://www.microsoft.com/downloads/details.aspx?FamilyID=4f8f2f01-1ed7-4c4d-8f7b-3d47969e66ae&DisplayLang=en#filelist
點擊setup.exe下載驅動
2.下載后開始安裝,就用默認設置安裝,會被安裝到:
   C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC
3.把C:\Program Files\Microsoft SQL Server 2000 Driver for JDBC\lib
  下面的mssqlserver.jar,msbase.jar,msutil.jar三個文件拷貝到你的
   JDK主目錄\jre\lib\ext下面,現在JDBC驅動就算配置好了
4.編譯運行測試程序:
        String driverName = "com.microsoft.jdbc.sqlserver.SQLServerDriver";
        String connURL = "jdbc:microsoft:sqlserver://BLUESKY:1433;User=sa;Password=sa;DatabaseName=sitedb";
        try{
        Class.forName(driverName);
        Connection conn = DriverManager.getConnection(connURL);
        Statement stmt = conn.createStatement();
        StringBuffer strsql = new StringBuffer();
        strsql.append("select * from USERTABLE where username ='" + username + "'");
        ResultSet rs = stmt.executeQuery(strsql.toString());
        if(!rs.next() ||!password.equals(NulltoString(rs.getString("password")).trim())){
            DBmsg = "對不起,您所輸入的用戶不存在或用戶密碼不正確";
        }else{
            username = NulltoString(rs.getString("username"));
            selectright = NulltoString(rs.getString("selectright"));
            deleteright = NulltoString(rs.getString("deleteright"));
            updateright = NulltoString(rs.getString("updateright"));
        }

        }catch (ClassNotFoundException ex){
             ex.printStackTrace();
        }catch (SQLException ex){
             ex.printStackTrace();
        }

接下來就可以開始做struts了!!! 

冬天出走的豬 2007-08-16 16:04 發表評論
]]>
主站蜘蛛池模板: 岛国精品一区免费视频在线观看| 亚洲成av人影院| 野花高清在线观看免费3中文| 国产免费毛不卡片| 亚洲美女激情视频| 亚洲av无码一区二区三区天堂| 亚洲AV无码一区二区三区网址| 国产精品成人免费视频网站京东| 亚洲乱亚洲乱少妇无码| 亚洲AV永久无码精品| 亚洲免费综合色在线视频| rh男男车车的车车免费网站| 无码国产精品一区二区免费模式| 午夜网站免费版在线观看| 国产午夜亚洲精品国产成人小说| 久久99亚洲网美利坚合众国| 亚洲av永久无码一区二区三区| 男的把j放进女人下面视频免费| 性感美女视频免费网站午夜 | 日韩亚洲Av人人夜夜澡人人爽| 成人片黄网站色大片免费观看APP| 成人免费a级毛片无码网站入口| 国产成人亚洲综合无码| 亚洲AV无码资源在线观看| 男人的天堂亚洲一区二区三区| 国产精品亚洲玖玖玖在线观看| 全部在线播放免费毛片| 在线观看的免费网站| 亚洲丁香婷婷综合久久| 亚洲视频一区二区| 亚洲视频在线观看免费| 亚洲色大成网站www永久男同| 伊人久久免费视频| 亚洲小说图区综合在线| 国产av无码专区亚洲国产精品| 久久久久国产精品免费免费不卡| 亚洲avav天堂av在线网爱情| 97在线免费视频| 亚洲宅男天堂在线观看无病毒| 亚洲AV福利天堂一区二区三| 一级一看免费完整版毛片|