国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Struts模塊化編程經(jīng)典實(shí)戰(zhàn)教程(三)

2019-11-18 12:55:39
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  4、模塊定義
  通過(guò)上面對(duì)STRUTS的模塊化機(jī)制的講解,我們現(xiàn)在可以開始實(shí)現(xiàn)我們的模塊化例子程序了。
  
  4.1 Actionservlet參數(shù)
  
  我們?cè)趕truts的web.xml中定義模塊。下面的代碼定義了三個(gè)模塊:缺省模塊,apPRoval和registration模塊,前綴分別是””,/approval和/registration。
  
  
  
    action
    org.apache.struts.action.ActionServlet
    
      config
      /WEB-INF/struts-config.xml
          

    
      config/approval
      /WEB-INF/struts-config-approval.xml
          

    
      config/registration
      /WEB-INF/struts-config-registration.xml
    

  
     1
      
  
    action
    *.do
      

  

  
  這樣在初始化actionservlet的過(guò)程中,servletcontext的屬性中就會(huì)有這樣的屬性鍵/值關(guān)系:
  
Struts模塊化編程經(jīng)典實(shí)戰(zhàn)教程(三)

  4.2 approval模塊配置文件
  
  下面是approval模塊的配置文件,定義了form和action,以及相應(yīng)的forward。
  
  
                 DTD Struts Configuration 1.1//EN"
  "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
  
    
    
    

      

   
          attribute="approvalForm"
      name="approvalForm"
      input="/index.jsp"
      path="/approval"
      scope="request"
      type="com.i505.struts.approval.action.ApprovalAction">
      
    
  
  

  
  4.3 registration模塊配置文件
  
  下面是registration模塊的配置文件,定義了form和action,以及相應(yīng)的message-resources和forward。
  
  
                 DTD Struts Configuration 1.1//EN"
  "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">
  
  
    
      

   
          attribute="registrationForm"
      input="/index.jsp"
      name="registrationForm"
      path="/registration"
      type="com.i505.struts.registration.action.RegistrationAction">
      
    
  
  
  

  
  5、模塊選擇
  本節(jié)主要講述struts中如何選擇模塊,實(shí)現(xiàn)模塊的真正運(yùn)作的。
  
  5.1 action的模塊選擇
  
  當(dāng)我們?cè)跒g覽器中使用http://hostaddress/contextpath/module/action.do式樣的的url時(shí),actionservlet會(huì)根據(jù)module選擇模塊對(duì)象,下面是actionservlet處理http請(qǐng)求的代碼:
  
  protected void process(HttpServletRequest request,
              HttpServletResponse response)
    throws IOException, ServletException {
    RequestUtils.selectModule(request, getServletContext());
       getRequestProcessor(getModuleConfig(request)).process
      (request, response);
  }
  
  RequestUtils.selectModule函數(shù)將使用下面的代碼把url中的模塊前綴(下面代碼的prefix將代表上面url式樣中的/module)指定的模塊對(duì)象保存在request屬性中,這個(gè)模塊對(duì)象就成了處理這個(gè)請(qǐng)求的當(dāng)前模塊對(duì)象:
  
  // EXPose the resources for this module
    ModuleConfig config = (ModuleConfig)
   context.getAttribute(Globals.MODULE_KEY + prefix);
    if (config != null) {
      request.setAttribute(Globals.MODULE_KEY, config);
    }
   else {
      request.removeAttribute(Globals.MODULE_KEY);
    }
  
  5.2 資源的模塊化
  
  資源(比如jsp)的模塊化是指資源可以按照模塊一樣來(lái)組織,比如approval模塊的資源可以放在approval目錄下,而registration模塊的資源則放在registration目錄下,缺省模塊的資源放在webroot下。
  
  url訪問(wèn)這些資源很簡(jiǎn)單,url式樣是 http://hostaddress/contextpath/module/xxx.jsp。對(duì)于input和forward訪問(wèn)這些資源,我們只需直接寫相對(duì)于模塊路徑下的路徑,注重它們必須以”/”開頭。假如forward是相對(duì)servletcontext的,則要加上模塊路徑。
  
  
          attribute="registrationForm"
      input="/index.jsp"
      name="registrationForm"
      path="/registration"
      type="com.i505.struts.registration.action.RegistrationAction">
      
    
  
  
  5.3 Formtag中表單action url的生成
  
  對(duì)于模塊編程,struts在formtag的action屬性似乎有些問(wèn)題,這些問(wèn)題出現(xiàn)在struts沒(méi)有考慮直接訪問(wèn)jsp時(shí)的情況。應(yīng)為forward和直接訪問(wèn)這兩種環(huán)境是不同的,主要是直接訪問(wèn)這些JSP,request屬性中沒(méi)有模塊對(duì)象,而forward訪問(wèn)這些jsp時(shí)request屬性中有模塊對(duì)象。我們需要修改代碼,使得在產(chǎn)生action屬性時(shí)不受jsp所在環(huán)境的影響,也就是我們將在formtag的action屬性中指定模塊,而不是request中得到模塊。下面是registration模塊的index.jsp的代碼,它的formtag的action屬性包括了模塊的前綴/registration:
  
  <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%>
   <%@ taglib uri="/WEB-INF/struts-Html.tld" prefix="html"%>
  
  申請(qǐng)注冊(cè)
  <%@ page contentType="text/html;charset=GB2312" %>
  
  
  
   姓名:


   年齡:


  
  

  
  
  
  下面我們來(lái)修改struts的相關(guān)代碼達(dá)到這個(gè)效果。
  
  5.3.1 Formtag
  
  Formtag的setAction將識(shí)別form tag的acton屬性的module前綴,并分離出真正的模塊相對(duì)的action路徑,lookup將直接從ServletContext中獲取模塊配置對(duì)象。
  
  private String getActionPath(String action) {
   String temp = action.trim();
   String x;
        int pos=0;
   if(!temp.startsWith("/")) temp = "/"+ temp;
   pos = temp.indexOf("/", 1);
   if(pos<=0) return action;
  
         return temp.substring(pos); }
  private String getModulePrefix(String action) {
   String result;
   int pos;
   String temp=action.trim();
   if(!temp.startsWith("/")) {
   temp= "/"+temp;
   }
   pos = temp.indexOf("/", 1);
   if(pos<=1) return "";
   else
    re

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 沅江市| 绥江县| 沂南县| 塔河县| 霍山县| 津南区| 宕昌县| 望城县| 班玛县| 淳安县| 本溪| 香港 | 遵义市| 颍上县| 吉安市| 上虞市| 隆回县| 阳东县| 临高县| 常德市| 安新县| 额敏县| 彭山县| 莲花县| 金华市| 江油市| 昌平区| 武鸣县| 娱乐| 车险| 辽阳县| 瑞昌市| 宁乡县| 武陟县| 玉山县| 胶南市| 沙坪坝区| 南通市| 赤水市| 西宁市| 临泉县|