亚洲高清在线播放,国产精品一区专区,亚洲精品免费在线http://www.aygfsteel.com/microlab4321/category/24781.html適時(shí)總結(jié)是一種很好的彌補(bǔ)方法!zh-cnSat, 06 Oct 2007 00:39:14 GMTSat, 06 Oct 2007 00:39:14 GMT60Struts學(xué)習(xí)筆記(7)良好的大局觀:J2EE設(shè)計(jì)模式http://www.aygfsteel.com/microlab4321/articles/150350.html冬天出走的豬冬天出走的豬Thu, 04 Oct 2007 04:48:00 GMThttp://www.aygfsteel.com/microlab4321/articles/150350.htmlhttp://www.aygfsteel.com/microlab4321/comments/150350.htmlhttp://www.aygfsteel.com/microlab4321/articles/150350.html#Feedback0http://www.aygfsteel.com/microlab4321/comments/commentRss/150350.htmlhttp://www.aygfsteel.com/microlab4321/services/trackbacks/150350.html 

一.概述

   設(shè)計(jì)模式是對(duì)重復(fù)出現(xiàn)的問(wèn)題的一種可以重用的解決方法,其本質(zhì)其實(shí)是解偶.
  1.J2EE應(yīng)用模型的分層 (1)服務(wù)器端業(yè)務(wù)邏輯
                                      (2)服務(wù)器端表示層
                                     (3)客戶端表示層
  2.J2EE的設(shè)計(jì)模式   (1)表示層體系結(jié)構(gòu)模式
                                    (2)表示層高級(jí)體系結(jié)構(gòu)模式
                                    (3)表示層伸縮性模式
                                    (4)業(yè)務(wù)層模式
                                    (5)數(shù)據(jù)傳遞模式
                                    (6)數(shù)據(jù)庫(kù)模式

二.詳解
  1.表示層體系結(jié)構(gòu)模式
   1.1前端控制模式
    通過(guò)創(chuàng)建統(tǒng)一而且集中的組建來(lái)執(zhí)行公共的任務(wù),在J2EE的功能是截取所有的請(qǐng)求,并根據(jù)選擇利用這個(gè)前端控制器將請(qǐng)求轉(zhuǎn)發(fā)到一個(gè)頁(yè)面控制器,頁(yè)面控制器解析用戶的請(qǐng)求,選擇具體的業(yè)務(wù)邏輯,并根據(jù)結(jié)果轉(zhuǎn)到頁(yè)面視圖
   一個(gè)Servlet可以作為一個(gè)前端控制器,也可以作為一個(gè)頁(yè)面控制器,這個(gè)servlet調(diào)用請(qǐng)求所應(yīng)該執(zhí)行的業(yè)務(wù)邏輯,并根據(jù)業(yè)務(wù)邏輯的結(jié)果返回到具體的顯示頁(yè)面..

  1.1.1.Struts框架前端模式的實(shí)現(xiàn)
   Actionservlet是Struts框架的主要Servlet,所有請(qǐng)求都會(huì)通過(guò)它.在ActionServelt中,它會(huì)處理如下工作
  1)ActionServelt調(diào)用RequestProcessor的Process方法處理公共任務(wù)
  2)RequestProcessor得到請(qǐng)求對(duì)應(yīng)的Action處理請(qǐng)求的具體工作
   在RequestProcessor的process方法中最后會(huì)調(diào)用ProcessActionPerform方法,這就是一個(gè)命名模式的實(shí)現(xiàn),將具體請(qǐng)求的工作分配到Action

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

 一個(gè)過(guò)濾器
   這個(gè)過(guò)濾器SetCharacterEncodingFilter被用在當(dāng)request請(qǐng)求到達(dá)Servelt前,為request的參數(shù)信息的字符編碼進(jìn)行設(shè)定
   SetCharcterEncodingFilter.java(省略)

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

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

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

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


1.3.3服務(wù)工作模式
     服務(wù)工作者模式將頁(yè)面流轉(zhuǎn),前端控制模式,視圖助手模式合在一起使用,表示"請(qǐng)求--轉(zhuǎn)發(fā)--視圖"的整套流程,服務(wù)器工作者模式也是MVC模式的實(shí)現(xiàn)標(biāo)準(zhǔn),Struts框架本身基于這個(gè)模式實(shí)現(xiàn)

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



冬天出走的豬 2007-10-04 12:48 發(fā)表評(píng)論
]]>
Struts學(xué)習(xí)筆記(6)Validator框架http://www.aygfsteel.com/microlab4321/articles/149349.html冬天出走的豬冬天出走的豬Fri, 28 Sep 2007 13:13:00 GMThttp://www.aygfsteel.com/microlab4321/articles/149349.htmlhttp://www.aygfsteel.com/microlab4321/comments/149349.htmlhttp://www.aygfsteel.com/microlab4321/articles/149349.html#Feedback0http://www.aygfsteel.com/microlab4321/comments/commentRss/149349.htmlhttp://www.aygfsteel.com/microlab4321/services/trackbacks/149349.html  
2.Validator框架由Validator檢驗(yàn)類,Validator配置文件,資源配置文件和JSP標(biāo)簽庫(kù)組成..
 (1).Validator檢驗(yàn)類
     該類是在進(jìn)行檢驗(yàn)類時(shí)所需要的一個(gè)java類.每一次檢驗(yàn)的發(fā)生都會(huì)調(diào)用該檢驗(yàn)類中的方法,該檢驗(yàn)類的方法只針對(duì)一種檢驗(yàn)規(guī)則,但是通過(guò)配置文件的聲明,可以使檢驗(yàn)類規(guī)則產(chǎn)生合作.組合成更復(fù)雜的檢驗(yàn)規(guī)則.

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

(2)Validator-rule.xml文件
   Validator框架是通過(guò)聲明的方式,而不是編程的方式來(lái)調(diào)用檢驗(yàn)規(guī)則,因此配置文件Validator-rules.xml十分重要,在Validator-rules.xml中講檢驗(yàn)類所實(shí)現(xiàn)的檢驗(yàn)規(guī)則和聲明表示銜接起來(lái),提供聲明實(shí)現(xiàn)
   Validator-rules.xml文件
  Validator框架是通過(guò)聲明的方式,而不是編程的方式來(lái)調(diào)用檢驗(yàn)規(guī)則.因此配置文件Validator-rules.xml十分重要,在Validator-rules.xml中將檢驗(yàn)類所實(shí)現(xiàn)的檢驗(yàn)規(guī)則和聲明標(biāo)識(shí)銜接起來(lái),提供聲明的實(shí)現(xiàn).
   簡(jiǎn)單的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>  //所有檢驗(yàn)規(guī)則的聲明都被定義<global>元素下作為其子元素  
    <validator name="required"//每個(gè)validator都代表一個(gè)檢驗(yàn)規(guī)則,name屬性是該檢驗(yàn)規(guī)則的聲明標(biāo)識(shí)
            classname="org.apache.struts.validator.FieldChecks"//檢驗(yàn)規(guī)則的實(shí)體類
               method="validateRequired"http://檢驗(yàn)類中的方法名,指定聲明標(biāo)識(shí)將調(diào)用該方法來(lái)進(jìn)行檢驗(yàn)
         methodParams="java.lang.Object,//檢驗(yàn)類所需要的傳入?yún)?shù)
                       org.apache.commons.validator.ValidatorAction,
                       org.apache.commons.validator.Field,
                       org.apache.struts.action.ActionErrors,
                       javax.servlet.http.HttpServletRequest"
                  msg="errors.required">//msg屬性指定了報(bào)錯(cuò)信息在資源配置文件中的"鍵值",通過(guò)該"鍵值"從資源配置文件中找到該條報(bào)錯(cuò)信息,并顯示出來(lái).
      </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個(gè)<validator>元素的校驗(yàn)規(guī)則
*校驗(yàn)值是否不為空或不為null
*校驗(yàn)值是否可以安全轉(zhuǎn)換為integer型
*校驗(yàn)該校驗(yàn)值的范圍是否在最大和最小值之間

<validator>元素還有其他屬性來(lái)幫助實(shí)現(xiàn)其他功能
name屬性為range的<validator>元素?fù)碛衐epends屬性,并指定屬性的內(nèi)容為"integer"
depends屬性的含義是:本<validator>校驗(yàn)規(guī)則必須依賴另一個(gè)檢驗(yàn)規(guī)則而實(shí)現(xiàn).換句話說(shuō),就是必須先校驗(yàn)depends屬性所指定的<validator>檢驗(yàn)規(guī)則,通過(guò)后才會(huì)校驗(yàn)自身規(guī)則.depends屬性的內(nèi)容應(yīng)該是另一組<validator>校驗(yàn)規(guī)則的聲明.
 
(2)2
validator.xml文件
  該文件是將validator-rules.xml中的校驗(yàn)和應(yīng)用程序結(jié)合起來(lái)的配置文件,有了validator-rule.xml后,只要通過(guò)validator,.xml將它與具體校驗(yàn)邏輯結(jié)合,就能完成真正的具體校驗(yàn)
  結(jié)合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.若是動(dòng)態(tài)ActionForm,則需要繼續(xù)于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)將根據(jù)surut-config.xml文件中<action>的name屬性,為當(dāng)前ActionForm調(diào)用相應(yīng)的校驗(yàn)規(guī)則,這在validator.xml中可以看到
*ValidatorActionForm(或DynaValidatorActionForm)使用struts-config.xml中<action>的path屬性,為當(dāng)前ActionForm調(diào)用相應(yīng)的檢驗(yàn)規(guī)則.



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

二認(rèn)識(shí)編碼
   1.UNICODE是微軟所提出的多字節(jié)等長(zhǎng)碼,它可以使雙字節(jié)既可以表示英文字母,也可以表示漢字。表示英文字母的等長(zhǎng)碼時(shí),對(duì)其第一個(gè)字節(jié)進(jìn)行補(bǔ)充動(dòng)作。
   java語(yǔ)言默認(rèn)的編碼就是UNICODE;通常被國(guó)際化組織認(rèn)可,用雙字節(jié)表示的中文中,針對(duì)Struts的國(guó)際化主要是UNICODE.
 
    2.Struts中國(guó)際化的步驟:
   UTF-8編碼就是以UNICODE編碼的儲(chǔ)存方式來(lái)表示的,它是Struts國(guó)際化的好幫手,它已經(jīng)包含了英文字母的顯示。
   (1).指定程序編碼和編譯時(shí)的字符編碼為UTF-8
   (2).指定請(qǐng)求到來(lái)時(shí)的字符編碼為UTF-8
   (3).在JSP的頭部聲明中也要出現(xiàn)UTF-8聲明
   (4).對(duì)任何外部資源配置文件的編寫(xiě)都使用UTF-8

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

2.確定本地化后綴
  JSP發(fā)送請(qǐng)求到達(dá)ActionServlet時(shí).request都會(huì)用一個(gè)request.getLcale()的方法返回java.util.Locale對(duì)象.這個(gè)Locale對(duì)象保存的就是本地化區(qū)域環(huán)境.Locale對(duì)象由JDK提供專門(mén)用來(lái)實(shí)現(xiàn)國(guó)際化工作.
  在Struts框架中,與Locale對(duì)象配合"確定本地化環(huán)境后綴",會(huì)讀取Locale對(duì)象的內(nèi)容,并將它的語(yǔ)言和國(guó)家信息"_"產(chǎn)生一組字符串,追加到原來(lái)的文件名后.
   static public final Locale SIMPLFIED_CHINESE=new Locale("zh","CN");
 struts框架讀取對(duì)象該對(duì)象后,產(chǎn)生的本地化環(huán)境后綴就是"application_zh_CN".再加上.properties的擴(kuò)展名,那么在簡(jiǎn)體中文環(huán)境中,struts框架真正應(yīng)該要讀取得的資源配置文件其實(shí)應(yīng)該是:application_zh_CN.properties

3.Locale對(duì)象
    要?jiǎng)討B(tài)改變Locale對(duì)象,就必須先確定Locale對(duì)象的讀取在框架中是怎樣進(jìn)行的,Locale對(duì)象被保存在什么地方.
   Struts框架對(duì)于Locale對(duì)象的讀取是通過(guò)Session來(lái)進(jìn)行的程序開(kāi)始進(jìn)行時(shí),Struts框架就已經(jīng)將Locale對(duì)象的實(shí)例存放在Session中得到Locale對(duì)象,再得到合適的資源配置文件.
   把本地化Local對(duì)象的實(shí)例存放在Session中.
 (1).存放本地化Locale對(duì)象到Session中是由Struts框架自行完成的..
 (2).Struts框架內(nèi)容定義了GloBals類的靜態(tài)全局變量,LOCALE_KEY,用來(lái)表示org,apache,struts.action.LOCALE;不應(yīng)單獨(dú)使用,而是存放Locale對(duì)象用Globals.LOCALE_KEY來(lái)代替



冬天出走的豬 2007-09-24 15:49 發(fā)表評(píng)論
]]>
Struts學(xué)習(xí)筆記(4)Struts-config.xml詳解http://www.aygfsteel.com/microlab4321/articles/147444.html冬天出走的豬冬天出走的豬Sat, 22 Sep 2007 09:59:00 GMThttp://www.aygfsteel.com/microlab4321/articles/147444.htmlhttp://www.aygfsteel.com/microlab4321/comments/147444.htmlhttp://www.aygfsteel.com/microlab4321/articles/147444.html#Feedback0http://www.aygfsteel.com/microlab4321/comments/commentRss/147444.htmlhttp://www.aygfsteel.com/microlab4321/services/trackbacks/147444.html    一.處理異常的exception和global-exception
   在Web應(yīng)用中,對(duì)異常處理位置都是業(yè)務(wù)邏輯失敗的信息.因?yàn)楫惓L幚磉€需要編寫(xiě)ActionErrors,給出報(bào)錯(cuò)信息將導(dǎo)致在Action會(huì)看到許多的ActionErrors的代碼.
   struts解決了這個(gè)問(wèn)題,它允許程序員配置任何異常,并且在將異常轉(zhuǎn)化為報(bào)錯(cuò)信息的時(shí)候,不必須自行使用"try catch"來(lái)捕捉,寫(xiě)報(bào)錯(cuò)轉(zhuǎn)發(fā)到出錯(cuò)頁(yè)面.
   1.局部異常
      就是針對(duì)一個(gè)Action響應(yīng)所拋出的異常,該異常將只負(fù)責(zé)Action的程序段,并且自定義在<action>元素中.

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

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

  簡(jiǎn)單示例:
  (1).自定義標(biāo)簽類
      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)業(yè)務(wù)邏輯類
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=用戶名無(wú)法確定
XXX=XXX
....

(5)JSP頁(yè)面

<%@ 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標(biāo)記與全局轉(zhuǎn)發(fā)
 1.全局轉(zhuǎn)發(fā)  
        所謂全局轉(zhuǎn)發(fā),就是在整個(gè)應(yīng)用程序中,無(wú)論怎樣的請(qǐng)求者都可以使用的全局中轉(zhuǎn).它可以僅僅通過(guò)一個(gè)請(qǐng)求轉(zhuǎn)發(fā)到一個(gè)JSP頁(yè)面,也可以通過(guò)另一個(gè)請(qǐng)求轉(zhuǎn)發(fā)到另一個(gè)已經(jīng)定義的Action請(qǐng)求.可以理解為全局轉(zhuǎn)發(fā)就是一個(gè)控制器,它可以隨著按鈕(請(qǐng)求)的切換而轉(zhuǎn)換(轉(zhuǎn)發(fā))到任何一個(gè)頻道(JSP頁(yè)面和請(qǐng)求).

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

(1)這類轉(zhuǎn)發(fā)是在請(qǐng)求到來(lái)后做一些業(yè)務(wù)邏輯,然后根據(jù)業(yè)務(wù)需要將結(jié)果轉(zhuǎn)發(fā)到另一個(gè)請(qǐng)求或直接顯示出一個(gè)JSP頁(yè)面.
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{
 //業(yè)務(wù)邏輯代碼................
  if(true){
  return mapping.findForward("SampleAction");
 }else{
  return mappingForward("failue")
}
}

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

(3).通過(guò)Action bean的execte方法由程序員利用代碼來(lái)制定轉(zhuǎn)發(fā).通常這類轉(zhuǎn)發(fā)被使用在不確定轉(zhuǎn)發(fā)目的地的場(chǎng)合,可能會(huì)根據(jù)請(qǐng)求request或ActionForm傳入的內(nèi)容來(lái)指定轉(zhuǎn)發(fā)
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{
 //業(yè)務(wù)邏輯代碼................
  return new ActionForward(request.getParmeter("pageFlow"));}
}

返回的ActionForward類型對(duì)象可以實(shí)現(xiàn)動(dòng)態(tài)轉(zhuǎn)發(fā),本示例中使用JSP頁(yè)面中名為"pageFlow"的控件所指定的值作為轉(zhuǎn)發(fā)目的地."pageFlow"控件的值可以是一個(gè)請(qǐng)求,也可以是一個(gè)JSP頁(yè)面.這樣,轉(zhuǎn)發(fā)的目的地就完全交給進(jìn)行請(qǐng)求的JSP頁(yè)面來(lái)指定.
 
(4).這一類型的轉(zhuǎn)發(fā)僅僅關(guān)注在轉(zhuǎn)發(fā)這個(gè)動(dòng)作上面,而不關(guān)注請(qǐng)求,因此全局轉(zhuǎn)發(fā)必須配合<action>元素或者Action bean來(lái)實(shí)現(xiàn)"請(qǐng)求-轉(zhuǎn)發(fā)"的整個(gè)過(guò)程.這類轉(zhuǎn)發(fā)通常被使用在有統(tǒng)一轉(zhuǎn)發(fā)目的地的顯式邏輯中.
struts-config.xml配置(同上)

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

四.控制器
  Struts框架的控制器由ActionServlet(Struts Servlet) RequestProcessor(請(qǐng)求處理),ModoleConfig(存儲(chǔ)配置信息),Action,
ActionForward(Action的轉(zhuǎn)發(fā))5個(gè)主要對(duì)象多組成,他們完成了Struts框架服務(wù)器端表示層MVC的所有工作.
  流程如下
  1.客戶端的請(qǐng)求到來(lái)后發(fā)送到ActionServlet中
  2.ActionServlet調(diào)用RequestProoessor處理用戶請(qǐng)求
  3.RequestProcess根據(jù)Module得到請(qǐng)求對(duì)應(yīng)的Action
  4.具體Action對(duì)象處理請(qǐng)求的具體工作
  5.從Action的處理返回ActionForward,轉(zhuǎn)發(fā)到指定的目的地....


冬天出走的豬 2007-09-22 17:59 發(fā)表評(píng)論
]]>
(轉(zhuǎn))Struts學(xué)習(xí)心得之Struts流程篇http://www.aygfsteel.com/microlab4321/articles/137625.html冬天出走的豬冬天出走的豬Fri, 17 Aug 2007 08:46:00 GMThttp://www.aygfsteel.com/microlab4321/articles/137625.htmlhttp://www.aygfsteel.com/microlab4321/comments/137625.htmlhttp://www.aygfsteel.com/microlab4321/articles/137625.html#Feedback0http://www.aygfsteel.com/microlab4321/comments/commentRss/137625.htmlhttp://www.aygfsteel.com/microlab4321/services/trackbacks/137625.html閱讀全文

冬天出走的豬 2007-08-17 16:46 發(fā)表評(píng)論
]]>
(轉(zhuǎn))Strus常見(jiàn)錯(cuò)誤及原因分析 http://www.aygfsteel.com/microlab4321/articles/137623.html冬天出走的豬冬天出走的豬Fri, 17 Aug 2007 08:43:00 GMThttp://www.aygfsteel.com/microlab4321/articles/137623.htmlhttp://www.aygfsteel.com/microlab4321/comments/137623.htmlhttp://www.aygfsteel.com/microlab4321/articles/137623.html#Feedback0http://www.aygfsteel.com/microlab4321/comments/commentRss/137623.htmlhttp://www.aygfsteel.com/microlab4321/services/trackbacks/137623.html

本篇文章包含了在用Struts開(kāi)發(fā)web應(yīng)用時(shí)經(jīng)常碰到的一些異常和錯(cuò)誤,根據(jù)異常或錯(cuò)誤信息本身,經(jīng)常可以找到潛在的錯(cuò)誤發(fā)生原因。

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

Cannot retrieve mapping for action

異常

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

 

 

可能原因

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

 

Cannot retrieve definition for form bean null

異常

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

可能原因       
       

這個(gè)異常是因?yàn)?/span>Struts根據(jù)struts-config.xml中的mapping沒(méi)有找到action期望的form bean。大部分的情況可能是因?yàn)樵?/span>form-bean中設(shè)置的name屬性和action中設(shè)置的name屬性不匹配所致。換句話說(shuō),actionform都應(yīng)該各自有一個(gè)name屬性,并且要精確匹配,包括大小寫(xiě)。這個(gè)錯(cuò)誤當(dāng)沒(méi)有name屬性和action關(guān)聯(lián)時(shí)也會(huì)發(fā)生,如果沒(méi)有在action中指定name屬性,那么就沒(méi)有name屬性和action相關(guān)聯(lián)。當(dāng)然當(dāng)action制作某些控制時(shí),譬如根據(jù)參數(shù)值跳轉(zhuǎn)到相應(yīng)的jsp頁(yè)面,而不是處理表單數(shù)據(jù),這是就不用name屬性,這也是action的使用方法之一。

 

No action instance for path /xxxx could be created

異常

No action instance for path /xxxx could be created

可能原因

特別提示:因?yàn)橛泻芏嘀星闆r會(huì)導(dǎo)致這個(gè)錯(cuò)誤的發(fā)生,所以推薦大家調(diào)高你的web服務(wù)器的日志/調(diào)試級(jí)別,這樣可以從更多的信息中看到潛在的、在試圖創(chuàng)建action類時(shí)發(fā)生的錯(cuò)誤,這個(gè)action類你已經(jīng)在struts-config.xml中設(shè)置了關(guān)聯(lián)(即添加了<action>標(biāo)簽)。

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

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

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

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

你的classpath的問(wèn)題。例如web server沒(méi)有發(fā)現(xiàn)你的資源文件,資源文件必須在WEB-INF/classes/目錄下

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

Problem with data-sources.xml file.

相關(guān)鏈接

 

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

可能原因

沒(méi)有位form bean中的某個(gè)變量定義getter 方法

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

Related Links

 

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

錯(cuò)誤

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

可能原因

這個(gè)錯(cuò)誤主要發(fā)生在在classpath中找不到相應(yīng)的Java .class文件。如果這個(gè)錯(cuò)誤發(fā)生在web應(yīng)用程序的運(yùn)行時(shí),主要是因?yàn)橹付ǖ?/span>class文件不在web serverclasspath中(/WEB-INF/classes /WEB-INF/lib)。

在上面的錯(cuò)誤中,原因是找不到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.

相關(guān)連接

 

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

可能原因

不是標(biāo)識(shí)Struts actionServlet<servlet>標(biāo)記就是映射.do擴(kuò)展名的<sevlet-mapping>標(biāo)記或者兩者都沒(méi)有在web.xml中聲明。

struts-config.xml中的打字或者拼寫(xiě)錯(cuò)誤也可導(dǎo)致這個(gè)異常的發(fā)生。例如缺少一個(gè)標(biāo)記的關(guān)閉符號(hào)/>最好使用struts console工具檢查一下

另外,load-on-startup必須在web.xml中聲明,這要么是一個(gè)空標(biāo)記,要么指定一個(gè)數(shù)值,這個(gè)數(shù)值用來(lái)表servlet運(yùn)行的優(yōu)先級(jí),數(shù)值越大優(yōu)先級(jí)越低。

還有一個(gè)和使用load-on-startup有關(guān)的是使用Struts預(yù)編譯JSP文件時(shí)也可能導(dǎo)致這個(gè)異常。

相關(guān)鏈接

 

NullPointerException at ... RequestUtils.forwardURL

異常

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

可能原因

struts-config.xml中的forward元素缺少path屬性。例如應(yīng)該是如下形式:
<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標(biāo)記外使用form的子元素。這常常發(fā)生在你在</html:form>后面使用Struts的html標(biāo)記。

另外要注意可能你不經(jīng)意使用的無(wú)主體的標(biāo)記,如<html:form … />,這樣web 服務(wù)器解析時(shí)就當(dāng)作一個(gè)無(wú)主體的標(biāo)記,隨后使用的所有<html>標(biāo)記都被認(rèn)為是在這個(gè)標(biāo)記之外的,如又使用了<html:text property=”id”>

還有就是在使用taglib引入HTML標(biāo)記庫(kù)時(shí),你使用的prefix的值不是html。 

相關(guān)連接

 

Missing message for key xx.xx.xx

Exception

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

Probable Causes

這個(gè)key的值對(duì)沒(méi)有在資源文件ApplicationResources.properties中定義。如果你使用eclipse時(shí)經(jīng)常碰到這樣的情況,當(dāng)項(xiàng)目重新編譯時(shí),eclipse會(huì)自動(dòng)將classes目錄下的資源文件刪除。

資源文件ApplicationResources.properties 不在classpath 應(yīng)將資源文件放到 WEB-INF/classes 目錄下,當(dāng)然要在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

可能原因

很顯然,這個(gè)錯(cuò)誤是發(fā)生在使用資源文件時(shí),而Struts沒(méi)有找到資源文件。

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

錯(cuò)誤

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

錯(cuò)誤

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

可能原因

混和使用Strutshtml:form標(biāo)記和標(biāo)準(zhǔn)的HTML標(biāo)記不正確。

使用的編碼樣式在本頁(yè)中不支持。

 

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

錯(cuò)誤

"Document contained no data" in Netscape

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

可能原因

使用一個(gè)Action的派生類而沒(méi)有實(shí)現(xiàn)perform()方法或execute()方法。在Struts1.0中實(shí)現(xiàn)的是perform()方法,在Struts1.1中實(shí)現(xiàn)的是execute()方法,但Struts1.1向后兼容perform()方法。

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

 



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

2.tomcat
  下載網(wǎng)址:  http://jakarta.apache.org/site/binindex.cgi

3.struts
  下載網(wǎng)址:  http://jakarta.apache.org/site/binindex.cgi

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

5.easy struts插件
  下載網(wǎng)址:  http://sourceforge.net/projects/easystruts

6.EJB開(kāi)發(fā)工具lomboz(不是必需的)  
  下載網(wǎng)址:  http://www.objectlearn.com/

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

1.Tomcat的初始化設(shè)置:啟動(dòng)Eclipse,通過(guò)菜單Windows->Preferences打開(kāi)設(shè)置窗口
  選擇Tomcat并做配置
1.Easy Struts的初始化設(shè)置:?jiǎn)?dòng)Eclipse,通過(guò)菜單Windows->Preferences打開(kāi)設(shè)置窗口
  選擇struts 1.1并在struts 1.1所需的庫(kù)文件中找到并添加struts.jar文件
3.在struts 1.1所需的類型庫(kù)描述文件中建議至少加入前面提到的三個(gè)描述文件分別是:
  struts_html.tld、struts_bean.tld、struts_logic.tld,這三個(gè)文件會(huì)在創(chuàng)建struts應(yīng)用項(xiàng)目時(shí)自動(dòng)拷貝到項(xiàng)目的WEB-INF目錄下。
4.新建一個(gè)Tomcat項(xiàng)目,然后右擊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取得數(shù)據(jù)
1.下載JDBC FOR SQLSERVER 的驅(qū)動(dòng):
http://www.microsoft.com/downloads/details.aspx?FamilyID=4f8f2f01-1ed7-4c4d-8f7b-3d47969e66ae&DisplayLang=en#filelist
點(diǎn)擊setup.exe下載驅(qū)動(dòng)
2.下載后開(kāi)始安裝,就用默認(rèn)設(shè)置安裝,會(huì)被安裝到:
   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三個(gè)文件拷貝到你的
   JDK主目錄\jre\lib\ext下面,現(xiàn)在JDBC驅(qū)動(dòng)就算配置好了
4.編譯運(yùn)行測(cè)試程序:
        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 = "對(duì)不起,您所輸入的用戶不存在或用戶密碼不正確";
        }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();
        }

接下來(lái)就可以開(kāi)始做struts了!!! 

冬天出走的豬 2007-08-16 16:04 發(fā)表評(píng)論
]]>
主站蜘蛛池模板: 鄂温| 宜丰县| 吉林市| 奉节县| 乳山市| 大丰市| 平陆县| 兰溪市| 德州市| 黄平县| 新和县| 余姚市| 望奎县| 九龙坡区| 岳普湖县| 巢湖市| 延吉市| 上蔡县| 龙岩市| 涿鹿县| 房产| 宾阳县| 泌阳县| 丰镇市| 文安县| 旬邑县| 淮北市| 隆尧县| 黑水县| 临海市| 剑川县| 溧水县| 凯里市| 凤台县| 日土县| 利辛县| 东平县| 江油市| 遂宁市| 苗栗县| 怀来县|