麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

Struts模塊化編程經典實戰教程(三)

2019-11-18 12:55:39
字體:
來源:轉載
供稿:網友

  4、模塊定義
  通過上面對STRUTS的模塊化機制的講解,我們現在可以開始實現我們的模塊化例子程序了。
  
  4.1 Actionservlet參數
  
  我們在struts的web.xml中定義模塊。下面的代碼定義了三個模塊:缺省模塊,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的過程中,servletcontext的屬性中就會有這樣的屬性鍵/值關系:
  
Struts模塊化編程經典實戰教程(三)

  4.2 approval模塊配置文件
  
  下面是approval模塊的配置文件,定義了form和action,以及相應的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,以及相應的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、模塊選擇
  本節主要講述struts中如何選擇模塊,實現模塊的真正運作的。
  
  5.1 action的模塊選擇
  
  當我們在瀏覽器中使用http://hostaddress/contextpath/module/action.do式樣的的url時,actionservlet會根據module選擇模塊對象,下面是actionservlet處理http請求的代碼:
  
  protected void process(HttpServletRequest request,
              HttpServletResponse response)
    throws IOException, ServletException {
    RequestUtils.selectModule(request, getServletContext());
       getRequestProcessor(getModuleConfig(request)).process
      (request, response);
  }
  
  RequestUtils.selectModule函數將使用下面的代碼把url中的模塊前綴(下面代碼的prefix將代表上面url式樣中的/module)指定的模塊對象保存在request屬性中,這個模塊對象就成了處理這個請求的當前模塊對象:
  
  // 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)的模塊化是指資源可以按照模塊一樣來組織,比如approval模塊的資源可以放在approval目錄下,而registration模塊的資源則放在registration目錄下,缺省模塊的資源放在webroot下。
  
  url訪問這些資源很簡單,url式樣是 http://hostaddress/contextpath/module/xxx.jsp。對于input和forward訪問這些資源,我們只需直接寫相對于模塊路徑下的路徑,注重它們必須以”/”開頭。假如forward是相對servletcontext的,則要加上模塊路徑。
  
  
          attribute="registrationForm"
      input="/index.jsp"
      name="registrationForm"
      path="/registration"
      type="com.i505.struts.registration.action.RegistrationAction">
      
    
  
  
  5.3 Formtag中表單action url的生成
  
  對于模塊編程,struts在formtag的action屬性似乎有些問題,這些問題出現在struts沒有考慮直接訪問jsp時的情況。應為forward和直接訪問這兩種環境是不同的,主要是直接訪問這些JSP,request屬性中沒有模塊對象,而forward訪問這些jsp時request屬性中有模塊對象。我們需要修改代碼,使得在產生action屬性時不受jsp所在環境的影響,也就是我們將在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"%>
  
  申請注冊
  <%@ page contentType="text/html;charset=GB2312" %>
  
  
  
   姓名:


   年齡:


  
  

  
  
  
  下面我們來修改struts的相關代碼達到這個效果。
  
  5.3.1 Formtag
  
  Formtag的setAction將識別form tag的acton屬性的module前綴,并分離出真正的模塊相對的action路徑,lookup將直接從ServletContext中獲取模塊配置對象。
  
  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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 少妇一级淫片免费放播放 | av在线更新 | 成人午夜在线观看视频 | 中文字幕在线永久 | 国产成人精品无人区一区 | 一级做a爱片久久毛片a高清 | 久久精品欧美视频 | 国产免费午夜 | 一级网站 | 久久精品视频3 | 伊人yinren22综合网色 | 亚洲成人激情av | 国产亚洲精品影达达兔 | 久久免费视频3 | 在线免费日韩 | www.99久久久| 香蕉成人在线视频 | 中文字幕在线永久 | 久久久久久久久久久国产精品 | 91久久久久久久一区二区 | 青草久久网 | 欧美a在线观看 | 国产精品一区99 | 亚洲一区二区三区四区精品 | 意大利av在线 | 久久国产在线观看 | 日本高清在线免费 | 一边吃奶一边摸下娇喘 | 成年免费视频黄网站在线观看 | 国产精品99久久久久久久女警 | 久久精品国产99久久久古代 | 久久精品爱 | 九色com | 国产日韩亚洲 | 国产呦在线观看视频 | 国产在线一级片 | 中文字幕精品在线观看 | 亚洲特黄 | 精品国产一区二区三区久久久 | 伊人yinren22综合网色 | 99热草|