欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Struts開(kāi)發(fā)技巧
Struts開(kāi)發(fā)技巧
snowsea 轉貼  (參與分:16578,專(zhuān)家分:1160)   發(fā)表:2006-04-17 15:22   版本:1.0   閱讀:1375

模塊配置
1.         Struts配置文件定義
    對于系統中的某個(gè)模塊,需要在開(kāi)發(fā)前定義該模塊的配置,該struts的配置文件命名為:
struts-config-xxx.xml 
xxx為模塊的小寫(xiě)英文名或縮寫(xiě),如:struts-config-sysman.xml
注意:中間為“-”,而不是“_”連接符
統一保存在“WEB-INF\xml”文件夾下,并需要在web.xml中添加相應的配置文件
地址,具體如下例:
    …
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts-config.xml, /WEB-INF/xml/struts-config-pages.xml,/WEB-INF/xml/struts-config-sysman.xml</param-value>
    </init-param>

注意:需要用“,”連接符隔開(kāi)各個(gè)配置文件名
另外,所有的靜態(tài)jsp需要通過(guò)配置文件定義其“.do”形式的訪(fǎng)問(wèn),保存在
struts-config-pages.xml文件中,內容如下例:
    …
    <!--主頁(yè)轉向-->
  <action path="/main" type="org.apache.struts.actions.ForwardAction" parameter="/main.jsp"/>
    …
2.         Tiles配置文件定義
系統的框架配置文件為tiles-defs_zh_CN.xml(通過(guò).properties屬性文件支持國際化應用,默認是tiles-defs.xml),模塊的框架結構需要定義在里面,如下例:

<!-- 定義默認首頁(yè) -->
    <definition name="default.frame" path="/layouts/defaultLayout.jsp">
        <put name="title"  value="歡迎進(jìn)入電信經(jīng)營(yíng)分析系統" />
        <put name="header" value="/top.jsp" />
        <put name="body"   value="default.body" />
        <put name="footer" value="/buttom.jsp" />
    </definition>
<!-- 定義默認首頁(yè)的body -->    
    <definition name="default.body" path="/layouts/main.jsp" >
          <put name="logon"   value="/logon.jsp" />
          <put name="date" value="/layouts/date.jsp" />
       <put name="linkSite"   value="/layouts/link.html" />
    </definition>

框架命名規范按“系統(子系統).功能模塊.頁(yè)面模塊”,如上面的“default.frame”
在struts-config-pages.xml文件中的設置的頁(yè)面action可以這樣寫(xiě):
<action path="/main" type="org.apache.struts.actions.ForwardAction" parameter=" default.frame "/>
這樣就不必單獨寫(xiě)一個(gè)tiles:insert的頁(yè)面,如下:
<tiles:insert definition="vip.warn.day" flush="true" />
3.         模塊中的注釋
不但需要在程序中添加必要的注釋?zhuān)诙x配置文件的時(shí)候也必須需要添加相應注釋?zhuān)饕窃趕truts-config-xxx.xml和tiles-defs_zh_CN.xml這些文件中添加注釋?zhuān)補ction或配置模塊的功能解釋清楚,放在配置項的前面,參見(jiàn)上面的配置文件
4.         對于配置文件的編輯
不能使用Jbuilder里面的xml編輯功能,因為JB會(huì )自動(dòng)地改變xml里面的編碼和內容,因此,對xml配置文件的編輯,要使用編輯軟件,如UE等
事件定義
事件對應的類(lèi)主要有Action、ActionForm,還有jsp中提交的“.do”定義,以及頁(yè)面動(dòng)作的提交,以login登錄為例:
1.  類(lèi)的命名定義(首字母需大寫(xiě))
形式為“動(dòng)作名+Action/Form”
如:LoginAction.class、LoginForm.class
2.  頁(yè)面地址定義(首字母需小寫(xiě))
如果有兩個(gè)單詞以上,第二個(gè)單詞首字母大寫(xiě),依此類(lèi)推
形式為“動(dòng)作名”
如:login.do或loginSys.do
jsp文件命名也按此規范
3.  頁(yè)面動(dòng)作定義
因為jsp頁(yè)面中的Form對應ActionForm,其本身有action這個(gè)屬性,所以頁(yè)面動(dòng)作如果定義也為action,會(huì )引起不必要的麻煩,所以,把頁(yè)面動(dòng)作統一定義為“act”,
如需要編輯某條記錄,地址如下:
“/editRecord.do?act= Edit”
如需要刪除,地址如下:
“/editRecord.do?act=Delete”
4.  對于菜單和操作事件觸發(fā)的控制機制
由于系統中的菜單和操作都是由“.do”形式向服務(wù)端發(fā)請求的,因此需要一套機制來(lái)控制哪些是對菜單的事件請求,哪些是對操作的事件請求;
我們在系統中引入了Filter過(guò)濾器,對所有請求進(jìn)行控制,以及判斷用戶(hù)是否登錄和是否有對資源(菜單等)訪(fǎng)問(wèn)權限等;
約定:
jsp頁(yè)面上對于系統中菜單的請求都是“GET”方法,對于操作的Action都是“POST”方法;
有了這樣的約定,在Filter中先判斷request的請求方法,如果是“GET”方法,則認為是對菜單的請求,所以去“菜單表”根據請求地址讀取相應的記錄,并讀取用戶(hù)的權限表,判斷用戶(hù)的菜單權限;
如果是“POST”的方法,則認為是對操作的請求,并提取request中的“act”動(dòng)作,進(jìn)行對用戶(hù)的權限點(diǎn)的判定。
 
參數信息獲取
1.         公共參數信息通過(guò)Plugin方式在Web服務(wù)啟動(dòng)時(shí)將變量放入application中,使得在任何需要該變量的jsp中都可以調用;
方式如下:
public void setServletContext(ActionServlet actionServlet) {
try {
        ServletContext sc = actionServlet.getServletContext();
        //SysInitPwd
   sc.setAttribute(Constants.SYS_INIT_PWD,SelectLists.getSysConfig("PWDINIT"));

在action等程序中的調用方式:
getServlet().getServletContext().getAttribute(“…”);
 
2.         對于頁(yè)面上需要展示的數據盡量存放在request這個(gè)范圍里,可以減輕服務(wù)器端內存負載,方式如下:
//調用員工處理類(lèi)
StaffDeal sd=new StaffDeal();
//根據員工狀態(tài)查詢(xún)員工
ArrayList al=sd.qryStaff(strState);
//放入request
    request.setAttribute("staffInfo",al);
3.         私有的或需要根據用戶(hù)的屬性來(lái)獲取參數信息的,可以在tiles的定義中使用“controlClass=xxx”這個(gè)方式獲取,配置如下例:
<definition name="vip.welcome" path="/vip/welcome.jsp" controllerClass="viptx.logic.vip.welcomeAction" />
需implements Controller中的perform方法,代碼如下例:
public void perform(ComponentContext componentContext,
                      HttpServletRequest request,
                      HttpServletResponse response,
                      ServletContext servletContext) throws IOException,ServletException  {
    HttpSession session = request.getSession();
    // Get current session.
    User user = (User) session.getAttribute(Constants.USER_KEY);
    if (user == null) {
      return null;
    }
    String uid = user.getUserid();
    String sql = "select userid,content from ti_salutatory where userid=‘"+uid+"‘";
    try {
      …
    }
    catch (Exception ex) {
      throw new ServletException(ex.getMessage());
    }
}
4.         對于后臺出錯信息在前臺頁(yè)面顯示的技巧
首先在properties配置“message.common={0}”
然后在A(yíng)ction類(lèi)中使用ActionErrors或ActionMessages時(shí),方法如下:

ActionMessages ams = new ActionMessages(); //例外處理
Try{

}
catch (Exception ex) {
    ex.printStackTrace();
    ams.add(ActionMessages.GLOBAL_MESSAGE,
                 new ActionMessage("message.common", ex.getMessage()));
}
           finally {
if (!ams.isEmpty()) {
        saveMessages(request, ams);
     }
}

    在jsp頁(yè)面中使用方法如下:
    <html:messages id="msg" message="true">
           <font color="red"><bean:write name="msg"/></font>
    </html:messages>
    如果有后臺的messages產(chǎn)生,前臺頁(yè)面就可以出現報錯信息
5.         系統配置文件
系統參數如數據庫連接等在sysConfi.xml文件中配置,存放在“WEB-INF/xml”文件夾下,請參見(jiàn)該文件。
開(kāi)發(fā)規范和公用方法
關(guān)于java的開(kāi)發(fā)規范參見(jiàn)《Java 編程規范.doc》,這里僅給出用struts開(kāi)發(fā)中一些的規范:
1.         java文件存放按業(yè)務(wù)邏輯劃分,并用模塊作為包名的形式,如:telecombi.logic.sysman.security
包名都為小寫(xiě)形式
所有的Action和ActionForm都存放在同一包下,便于管理,不要跨包調用
2.         所有ActionForm中的屬性均為“首單詞小寫(xiě)+第二個(gè)單詞首字母大寫(xiě)+…”的形式,如:staffId、staffName,不允許使用“_”為單詞連接符
3.         需要驗證的頁(yè)面,均需要客戶(hù)端和服務(wù)端兩次驗證(即對jsp中的Form進(jìn)行javascript驗證和Action中的excute方法中進(jìn)行驗證),不能只采用其中一種方法,防止客戶(hù)繞過(guò)js直接提交;
在驗證登錄提交的form時(shí),必須使用staticJavascript="false",否則就會(huì )把javascript寫(xiě)到頁(yè)面里,如:
<html:javascript formName="logonForm"
        dynamicJavascript="true"
         staticJavascript="false"/>
<script language="Javascript1.1" src="staticJavascript.jsp"></script>
驗證的formName必須和validation.xml中的Form的名字對應起來(lái),否則驗證無(wú)效
4.         ActionForm是代表html中的Form的,其中的變量需要和Form中的屬性對應起來(lái),如:要在jsp中使用<form:text property="userName"/>,則使用的ActionForm中就必須有userName這個(gè)變量
5.         對于A(yíng)ction中的邏輯,如果處理方法在一個(gè)以上,需要另外新建一個(gè)處理類(lèi),負責對Action中的邏輯集中處理,命名為xxxDeal,如:LoginDeal;
Action通過(guò)調用該處理類(lèi)的方法,實(shí)現業(yè)務(wù)邏輯處理
6.         對數據庫的操作使用DBManager這個(gè)類(lèi),對其中的一些方法,具體介紹如下:
n         查詢(xún)結果對象化的Select操作,使用Select(String sql,String className)方法
StringBuffer sql = new StringBuffer(
        "select staff_id staffId from ts_m_staff ")
        .append("where staff_id=‘").append(uid).append("‘");
    try {
/**
*     User是一個(gè)用戶(hù)對象類(lèi),其中有staffId這個(gè)屬性,以及對應的get/set方法,通過(guò)
*     DBManager的Select方法獲得一個(gè)User的ArrayList集合
*/
ArrayList rs = DBManager.Select(sql.toString(), User.class.getName());
/** 
*    如果確定返回的只有一個(gè)對象,則可以使用
*
*/
User user=(User)rs.get(0);
    }
    catch (Exception ex) {
      throw new ServletException(ex.getMessage());
}
取出來(lái)的數據可以存放在session或page等里,供jsp頁(yè)面調用,方法為session.setAttribute(“user”,user1)

n         Insert或Update等操作
使用DBManager里面的executeSql(String sql)方法,如果是批量處理,使用executeBatchSql(String[] sqls)方法,返回成功標志為Constants.OPERATE_SUCCESS
失敗標志為Constants.OPERATE_FAILED
暫無(wú)其它信息返回
n         ResultSet對象向Hashtable集合對象的轉化,使用select(String sql)方法:
除了可以使用DBManager的Select把查詢(xún)結果轉為對象以外,還可以使用以前的直接使用ResultSet對象的方式,不過(guò)這里返回的數據集對象為Hashtable;
Hashtable存放的數據結構為:
columnName1 ? ArrayList1(該字段的結果集)
columnName2 ? ArrayList2(該字段的結果集)

    系統中使用該方法的比較多的是用在生成下拉框數據,從select方法返回的Hashtable取到字段值,并生成LabelValueBean,具體方法如下:
    /**公用函數 Hashtable 轉換成 ArrayList (LabelValueBean)*/
   private static ArrayList hashToLVB(Hashtable ht, String id, String name,boolean hasBlank) {
      if (ht!=null){
         ArrayList al = new ArrayList();
         ArrayList alId = (ArrayList) ht.get(id.toUpperCase());
         ArrayList alName = (ArrayList) ht.get(name.toUpperCase());
         int iLen = alId.size();
         if (hasBlank)
            al.add(new LabelValueBean("未知", "-1"));
         for (int i = 0; i < iLen; i++) {
            al.add(new LabelValueBean( (String) alName.get(i),
                                      (String) alId.get(i)));
         }
         return al;
      }
      else{
         return null;
      }
   }
n         AutoSetForm(String sql, Object frm)方法介紹:
a)         該方法可以返回一個(gè)查詢(xún)數據庫后已對其中的屬性賦值的對象,使用方法如下:
User user=DBManager. AutoSetForm(sql,new User());
sql為查詢(xún)語(yǔ)句
b)        該方法還可以對頁(yè)面操作后的Form進(jìn)行賦值,比如在頁(yè)面上提交一個(gè)對某條記錄進(jìn)行編輯的操作,當Action得到該條記錄的Id號并查詢(xún)數據庫成功后,需要把各個(gè)詳細信息set到ActionForm的屬性變量中去,這個(gè)時(shí)候就可以使用該方法,方法如下:
form= DBManager. AutoSetForm(sql,form);
form為Action的excute方法中傳入的ActionForm
 
7.         調用存儲過(guò)程
使用DBManager中的execProc(String procName,ArrayList procPrts)方法
procName為存儲過(guò)程名,procPrts是該存儲過(guò)程的入口參數集,返回的是ProcOuts的對象,其中有Result和ExceptionInfo兩個(gè)屬性,表示返回的處理標記和異常信息(如果有的話(huà))
8.         數據操作返回信息的處理
在對數據操作完成后,需要返回操作是否成功等信息,具體步驟如下:
n         使用屬性文件中的“messages.comm”這個(gè)key,可以對該key添加具體返回信息
n         程序中使用“ActionMessages”這個(gè)對象,java程序如下:
ActionMessages ams = new ActionMessages();

//執行結果
         ProcOuts pResult=null;
//是否調用成功
         if (pResult.getResult() == -1) {
               ams.add(ActionMessages.GLOBAL_MESSAGE,
                       new ActionMessage("message.common",
                                         pResult.getExceptionInfo()));
         }
if (!ams.isEmpty()) {
            saveMessages(request, ams);
         }
Jsp中調用方法如下:
<html:messages id="msg" message="true">
  <font color="red"><bean:write name="msg"/></font>
</html:messages>
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
配置Struts應用
Struts-config.xml配置文件《action-mappings》元素的詳解 -...
深入Struts 1.1
重用標題,簡(jiǎn)化用戶(hù)界面
java面試-ssh-1
struts1 Action原理與配置
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久