亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

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

覆蓋DispatchAction中的分發方法

2019-11-18 11:58:23
字體:
來源:轉載
供稿:網友

  背景:
  
  在使用struts時我們經常會用到DispatchAction.有了這個類,我們不需要針對每一個Action都要寫一個特定的類,而是可以把一些相關的方法放到一個類中.
  
  DispatchActon中使用了reflection來根據你傳入的method參數的值來獲取相應的參數來處理你的請求.正如他的方法 -- 他根據你傳入的請求參數,用不同的方法來處理你的請求.
  
  但是,通常我們還會碰到另一種情況,假如我想在之行實際的action處理方法之前或者之后再去做一些別的事情而又不想修改我們實際存在的action類呢?這里我將介紹一種方法.
  
  只要看看struts中DispatchAction(以下簡寫做DA)的源文件你就會發現,它有一個dispatchMethod方法,接受5個參數.其中4個就是我們通常的struts action里的(mapping,request,response,form),還有一個參數就是指定方法的參數的名字.
  
  PRotected ActionForward dispatchMethod(ActionMapping mapping,
  ActionForm form, HttpServletRequest request,
  HttpServletResponse response, String name) throws Exception
  
  其實現方法如下:
  
  // Make sure we have a valid method name to call.
  // This may be null if the user hacks the query string.
  if (name == null) {
  return this.unspecified(mapping, form, request, response);
  }
  
  // Identify the method object to be dispatched to
  Method method = null;
  try {
  method = getMethod(name);
  
  } catch (NoSUChMethodException e) {
  String message = messages.getMessage("dispatch.method", mapping
  .getPath(), name);
  log.error(message, e);
  throw e;
  }
  
  ActionForward forward = null;
  try {
  Object args[] = { mapping, form, request, response };
  
  //非凡的url不進行處理(add)
  String actionUrl = request.getServletPath(); // "/rolesign.do"
  boolean exception = isException(actionUrl);
  if(exception) {
  logger.debug("requestUrl :"+actionUrl+",no pre and post process");
  }
  // 預處理(add)
  if (!disabled && !exception) {
  logger.debug("preProcess begin");
  preProcess(request);
  logger.debug("preProcess end");
  }
  
  forward = (ActionForward) method.invoke(this, args);
  
  // 后處理(add)
  if (!disabled && !exception ){
  logger.debug("postProcess begin");
  postProcess(request);
  logger.debug("postProcess end");
  }
  } catch (ClassCastException e) {
  String message = messages.getMessage("dispatch.return", mapping
  .getPath(), name);
  log.error(message, e);
  throw e;
  
  } catch (IllegalaccessException e) {
  String message = messages.getMessage("dispatch.error", mapping
  .getPath(), name);
  log.error(message, e);
  throw e;
  
  } catch (InvocationTargetException e) {
  // Rethrow the target exception if possible so that the
  // exception handling machinery can deal with it
  Throwable t = e.getTargetException();
  if (t instanceof Exception) {
  throw ((Exception) t);
  } else {
  String message = messages.getMessage("dispatch.error", mapping
  .getPath(), name);
  log.error(message, e);
  throw new ServletException(t);
  }
  }
  
  // Return the returned ActionForward instance
  return (forward);
  
  大部分代碼還是從DA的實現方法中copy過來,但是我在這里加入了3個地方.分別是:
  
  1.對請求url的識別,確定是否使用預/后處理
  
  2.預處理方法調用
  
  3.后處理方法調用
  
  當然你要自己寫預處理方法和后處理方法.這里你可以傳任意你想要的參數給request,然后通過reflection來動態調用任意的java方法,比如你可以在頁面設置一個preFunction參數,它的值是classname.methodname.然后你可以在preProcess的實現中通過reflection來查找這個方法并執行.
  
  假如你想讓項目中所有的action都有這種特性,則只要讓根Action繼續DA并覆蓋它的dispatchMethod方法即可.
  
  這是在實際項目中用到的一個特性,為了盡可能少的修改原有的代碼使用了這種折中的做法.使用reflection時建議不要執行太過復雜的方法,可能會使你的action響應慢的.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
成人av资源在线播放| 日韩精品免费观看| 国产精品亚洲片夜色在线| 日本韩国欧美精品大片卡二| 国产精品国产三级国产aⅴ9色| 欧美国产精品va在线观看| 国产欧美久久一区二区| 国产性猛交xxxx免费看久久| 欧美高清在线观看| 久久国产精品电影| 最新国产精品拍自在线播放| 亚洲午夜av电影| 亚洲福利小视频| 97精品久久久中文字幕免费| 欧美在线视频一区| 精品一区二区三区四区| 亚洲精品自在久久| 一本大道香蕉久在线播放29| 精品国偷自产在线| 日韩国产在线播放| 久久久精品视频在线观看| 亚洲视频网站在线观看| 日本一区二区三区四区视频| 色综合天天综合网国产成人网| 国产精品成人免费视频| 国产精品日韩欧美| 国产成人一区二| 97视频人免费观看| 一区二区欧美在线| 26uuu久久噜噜噜噜| 日韩免费看的电影电视剧大全| 久久成人18免费网站| 欧美激情免费在线| 伊人男人综合视频网| 亚洲国产欧美日韩精品| 久久99亚洲热视| 自拍亚洲一区欧美另类| 欧美电影免费观看网站| 亚洲电影免费观看高清完整版在线| 国产欧美精品久久久| 欧美在线精品免播放器视频| 亚洲免费一级电影| 国产va免费精品高清在线观看| 欧美黑人狂野猛交老妇| 欧美日韩在线视频观看| 96pao国产成视频永久免费| 亚洲国产欧美一区二区三区久久| 日韩在线视频网| 91精品国产色综合久久不卡98口| 成人亚洲激情网| 亚洲电影在线观看| 欧美人交a欧美精品| 亚洲毛片在线观看.| 欧美大片在线免费观看| 欧美成人中文字幕在线| 一区二区三区视频在线| 欧美劲爆第一页| 日韩专区在线观看| 成人国产在线激情| 欧美日韩国产麻豆| 中文字幕自拍vr一区二区三区| 好吊成人免视频| 欧美性猛交99久久久久99按摩| 成人激情视频在线播放| 亚洲一区999| 日本午夜人人精品| 亚洲丝袜在线视频| 91po在线观看91精品国产性色| 中文字幕日韩av综合精品| 97在线观看免费| 国产精品欧美一区二区| 欧美日韩国产中文精品字幕自在自线| 欧美夜福利tv在线| 欧美刺激性大交免费视频| 亚洲天堂免费在线| 久久久99久久精品女同性| 亚洲国产精品成人精品| 欧美成人午夜剧场免费观看| 亚洲欧洲偷拍精品| 免费av在线一区| 福利微拍一区二区| 欧洲亚洲在线视频| 久久久久五月天| 欧美大肥婆大肥bbbbb| 色婷婷久久av| 国外视频精品毛片| 亚洲精品视频播放| 国产综合香蕉五月婷在线| 中文字幕日韩专区| 亚洲欧美综合另类中字| 精品视频在线导航| 久久久精品美女| 欧美在线影院在线视频| 成人疯狂猛交xxx| 欧美日韩一二三四五区| 色综合色综合网色综合| 国产精品啪视频| 欧美电影免费观看大全| 精品少妇v888av| yellow中文字幕久久| 精品国产一区二区三区久久久狼| 91最新国产视频| 亚洲欧美日韩天堂一区二区| 国产一区二区久久精品| 欧美电影免费播放| 久久久99久久精品女同性| 欧美中文字幕视频| 欧美在线免费观看| 日韩视频永久免费观看| 2019中文在线观看| 九九视频这里只有精品| 91精品91久久久久久| 一级做a爰片久久毛片美女图片| 人人爽久久涩噜噜噜网站| 亚洲国产精品资源| 欧美专区在线视频| 国产成人jvid在线播放| 成人黄色免费片| 精品国偷自产在线视频| 一区二区三区四区视频| 亚洲精品xxxx| 中文在线资源观看视频网站免费不卡| 福利精品视频在线| 欧美肥婆姓交大片| 91亚洲永久免费精品| 久久视频在线观看免费| 日韩欧美视频一区二区三区| 欧美电影免费在线观看| 91天堂在线观看| 精品少妇一区二区30p| 在线看欧美日韩| 日韩午夜在线视频| 国产成人a亚洲精品| 成人动漫网站在线观看| 日韩精品视频在线免费观看| 欧美巨乳在线观看| 久久久精品网站| 丰满岳妇乱一区二区三区| 亚洲福利在线视频| 欧美精品激情在线| 亚洲欧美三级在线| 国产精品综合久久久| 91情侣偷在线精品国产| 亚洲欧洲成视频免费观看| 欧美精品www在线观看| 在线播放日韩精品| 成人亚洲欧美一区二区三区| 亚洲国语精品自产拍在线观看| 国产精品91久久| 久色乳综合思思在线视频| 成人黄色大片在线免费观看| 精品视频偷偷看在线观看| 国产精品草莓在线免费观看| 日韩精品在线看| 午夜精品久久久久久久久久久久| 91久久国产综合久久91精品网站| 在线视频一区二区| 精品一区二区三区四区| 国产精品三级久久久久久电影| 欧美日韩人人澡狠狠躁视频| 久久久久久网址| 欧美大肥婆大肥bbbbb| 欧美成人精品在线| 欧美成人午夜剧场免费观看|