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

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

Hibernate+Spring+Struts擴展Struts

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

  簡介:
  我看到很多項目中,開發者實現了自己的MVC框架,并不是因為他們想做同Struts根本不同的東西,而是因為他們并沒有意識到如何擴展Struts。開發自己的MVC框架可以獲得全部的控制權,但是這也意味著需要很多資源來實現它(人力物力),在緊張的日程安排下,有時候這是不可能的。
  
  Struts不僅僅是一個強大的框架,同時它也是可擴展的。你可以以三種方式來擴展Struts。
  
  1、PlugIn:假如你想在application startup或shutdown的時候做一些業務邏輯的話,那就創建你自己的PlugIn類。
  
  2、RequestPRocessor:假如你想在請求被處理的過程中某個時刻做一些業務邏輯的話,那么創建你自己的RequestProcessor類。比如說,在每次請求執行之前,你可以擴展RequestProcessor來檢查用戶是否登陸了以及他是否有權限去執行某個特定的action。
  
  3、ActionServlet:假如你想在application startup和shutdown的時候以及請求被處理的時候做某些業務邏輯,你也可以擴張ActionServlet類。不過你應當在PlugIn和RequestProcessor都不能解決你的需求的時候來使用ActionServlet。
  
  在這篇文章中,我們將使用一個Struts應用的示例來示范如何使用這三種方式來擴展Struts。示例程序的代碼可以從http://www.onjava.com/onjava/2004/11/10/examples/sample1.zip下載。兩個擴展Struts成功的范例是Struts自身的Validation和Tiles框架。
  
  我們假設你已經比較熟悉Struts框架并且知道如何使用它創建一個簡單的應用。假如你想知道更多關于Struts的內容,請參考官方主頁。
  
  PlugIn
  
  PlugIn是一個接口,你可以創建一個實現該接口的類,當application startup或shutdown的時候做些事情。
  
  比方說,我創建了一個使用Hibernate作為持久層的web應用,我想當應用啟動的時候就初始化Hibernate,這樣子當我的web應用受到第一個請求的時候,Hibernate就已經是配置好的并且可用的。同時我們想當application關閉的時候關閉Hibernate。我們可以用一個Hibernate PlugIn來實現這個需求,通過如下的兩步:
  
  1、創建一個類實現了PlugIn接口:
  
  public class HibernatePlugIn implements PlugIn{
  private String configFile;
  // This method will be called at application shutdown time
  public void destroy() {
  System.out.println("Entering HibernatePlugIn.destroy()");
  //Put hibernate cleanup code here
  System.out.println("Exiting HibernatePlugIn.destroy()");
  }
  //This method will be called at application startup time
  public void init(ActionServlet actionServlet, ModuleConfig config)
  throws ServletException {
  System.out.println("Entering HibernatePlugIn.init()");
  System.out.println("value of init parameter " +
  getConfigFile());
  System.out.println("Exiting HibernatePlugIn.init()");
  }
  public String getConfigFile() {
  return name;
  }
  public void setConfigFile(String string) {
  configFile = string;
  }
  }
  
  實現PlugIn接口的類必須完成兩個方法:init()和destroy()。當application startup的時候init()方法被調用,當shutdown的時候destroy()方法被調用。Struts還答應給你的PlugIn類傳遞初始化參數。為了傳遞參數,你必須在PlugIn類中為每一個參數創建JavaBean式的setter方法。在我們的HibernatePlugIn類中,我會把configFile的name作為參數傳進去,而不是硬編碼到程序中。
  
  2、在struts-config.xml中添加如下的代碼來通告Struts有新的PlugIn:
  
 ?。約truts-config>
  ...
 ?。?-- Message Resources -->
 ?。糾essage-resources parameter= "sample1.resources.ApplicationResources"/>
  
 ?。?-- Declare your plugins -->
 ?。紁lug-in className="com.sample.util.HibernatePlugIn">
 ?。約et-property property="configFile" value="/hibernate.cfg.xml"/>
 ?。?plug-in>
 ?。?struts-config>
  
  屬性className是實現了PlugIn接口的類的全限定名。對于每一個初始化參數,可以使用<set-property>元素傳遞參數。在我們的例子中,我要把config文件的名字傳進去,所以使用了一個帶有配置文件路徑的<set-property>。
  
  Struts的Tiles和Validator框架都使用PlugIn來讀取配置文件進行初始化。另外兩件PlugIn可以幫你做到的事情是:
  
  假如你的application依靠于某些配置文件,那么你可以在PlugIn類中檢查它們是否可用,假如不可用的話拋出一個ServletException,這樣就可以使ActionServlet變為不可用。
  
  PlugIn接口的init()方法是你可以改變ModuleConfig的最后機會,ModuleConfig是一組靜態配置信息的集合,用來描述基于Struts模塊。Struts將會在所有PlugIn處理完后釋放ModuleConfig。
  
  Request是如何被處理的
  ActionServlet是Struts框架中唯一的Servlet,它負責處理所有request。無論何時接收到一個request,它都會先嘗試為當前的request尋找一個sub-application。一旦一個sub-application被找到,ActionServlet就會為那個sub-application創建一個RequestProcessor對象,調用這個對象的process()方法并把HttpServletRequest和HttpServletResponse對象傳入。
  
  RequestProcessor.process()就是大部分request被處理的地方。process()方法使用了Template Method模式實現,其中有很多獨立的方法來執行請求處理的每一步驟,這些方法將會在process方法中依次被調用。比如,將會有一個獨立的方法用來尋找當前request對應的ActionForm類,一個方法來檢查當前用戶是否有執行action mapping所必須的權限。這些給與我們極大的靈活性。在發布的Struts包中有一個RequestProcessor類提供了請求處理每一步驟的默認實現。這就意味著你可以僅僅重寫你感愛好的方法,其它的使用默認的實現。舉例來說,默認地Struts調用request.isUserInRole()來檢查用戶是否有權限執行當前的ActionMapping;這時假如你想通過查詢數據庫來實現,你所要做的就是重寫processRoles()方法,通過查詢出的用戶是否擁有必須的權限來返回true或false。
  
  首先我們將會看到缺省情況下,process()方法是如何實現的,然后我將會具體解釋默認的RequestProcessor類中的每一個方法,這樣你就可以決定哪一部分是你想要改變的。
  
  public void process(HttpServletRequest request,HttpServletResponse response)
  throws IOException, ServletException {
  // Wrap multipart requests with a special wrapper
  request = processMultipart(request);
  // Identify the path component we will
  // use to select a mapping
  String path = processPath(request, response);
  if (path == null) {
  return;
  }
  if (log.isDebugEnabled()) {
  log.debug("Processing a '" + request.getMethod() + "' for path '" + path + "'");
  }
  // Select a Locale for the current user if requested
  processLocale(request, response);
  // Set the content type and no-caching headers
  // if requested
  processContent(request, response);
  processNoCache(request, response);
  // General purpose preprocessing hook
  if (!processPreprocess(request, response)) {
  return;
  }
  // Identify the mapping for this request
  ActionMapping mapping =
  processMapping(request, response, path);
  if (mapping == null) {
  return;
  }
  // Check for any role required to perform this action
  if (!processRoles(request, response, mapping)) {
  return;
  }
  // Process any ActionForm bean related to this request
  ActionForm form = processActionForm(request, response, mapping);
  processPopulate(request, response, form, mapping);
  if (!processValidate(request, response, form, mapping)) {
  return;
  }
  // Process a forward or include specified by this mapping
  if (!processForward(request, response, mapping)) {
  return;
  }
  if (!processInclude(request, response, mapping)) {
  return;
  }
  // Create or acquire the Action instance to
  // process this request
  Action action =
  processActionCreate(request, response, mapping);
  if (action == null) {
  return;
  }
  // Call the Action instance itself
  ActionForward forward = processActionPerform(request, response,action, form, mapping);
  // Process the returned ActionForward instance
  processForwardConfig(request, response, forward);
  }
  
  1、processMutipart():在這個方法中,Struts將會讀取request來檢查request的contentType是否是multipart/form-data。假如是的話,將會解析request并且將之包裝到HttpServletRequest中。當你創建了一個Html FORM用來提交數據,那么request的cont

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91在线观看免费高清完整版在线观看| 国产精品三级在线| 亚洲欧美日韩中文在线| 国产在线精品自拍| 亚洲综合色激情五月| 日韩av影院在线观看| 亚洲成av人片在线观看香蕉| 国产婷婷色综合av蜜臀av| 欧洲成人在线视频| 午夜精品三级视频福利| 中文字幕亚洲欧美| 欧美日韩精品二区| 亚洲欧美成人在线| 亚洲伦理中文字幕| 欧美成人在线网站| 久久精品中文字幕| 在线国产精品播放| 夜夜嗨av色一区二区不卡| 国产日韩在线免费| 亚洲视频在线观看| 成人免费观看49www在线观看| 亚洲一区二区福利| 不卡av电影在线观看| 日韩经典中文字幕在线观看| 国产日产亚洲精品| 国产亚洲欧美日韩一区二区| 国产精品露脸自拍| 国产99久久精品一区二区永久免费| 欧美成人免费在线观看| 国产欧美日韩中文| 国产精品视频自拍| 琪琪亚洲精品午夜在线| 欧美夫妻性视频| 久久伊人精品天天| 亚洲成人亚洲激情| 性欧美亚洲xxxx乳在线观看| 亚洲最大av网站| 日韩精品在线视频观看| 欧美性受xxxx白人性爽| 亚洲日本成人网| 日韩av高清不卡| 欧美日韩在线视频一区二区| 国产亚洲精品久久久| 亚洲欧美在线x视频| 国产精品久久色| 亚洲精品视频在线播放| 成人两性免费视频| 亚洲一区美女视频在线观看免费| 欧日韩不卡在线视频| 欧美怡红院视频一区二区三区| 美女扒开尿口让男人操亚洲视频网站| 欧美在线观看网站| 国产亚洲精品美女| xxxx欧美18另类的高清| 在线观看日韩www视频免费| 538国产精品视频一区二区| 亚洲人成网站色ww在线| 中文字幕在线成人| 国产精品18久久久久久首页狼| 亚洲国产精品视频在线观看| www.亚洲一二| 久久久www成人免费精品张筱雨| 成人黄色网免费| 宅男66日本亚洲欧美视频| 亚洲人成在线一二| 国产精品影院在线观看| 韩国精品美女www爽爽爽视频| 国模视频一区二区| 91黑丝高跟在线| 午夜精品久久久久久久久久久久| 国产日韩欧美另类| 亚洲香蕉在线观看| 色多多国产成人永久免费网站| 欧美一级视频在线观看| 伊人成人开心激情综合网| 亚洲深夜福利在线| 欧美精品福利视频| 美女黄色丝袜一区| 国产精品一区二区久久精品| 国产精品v日韩精品| 国产精品露脸av在线| 在线观看成人黄色| 中文字幕久热精品视频在线| 欧美日韩激情网| 91av在线播放视频| 中文字幕日韩av电影| 欧美精品在线播放| 97精品在线视频| 2018日韩中文字幕| 欧美激情国产高清| 久久久亚洲影院| 亚洲a中文字幕| 日韩在线视频网| 黑人巨大精品欧美一区二区三区| 热久久美女精品天天吊色| 国产精品亚洲第一区| 日本精品免费观看| 日本精品免费观看| 亚洲最大的免费| 亚洲精品国产品国语在线| 富二代精品短视频| 亚洲国产黄色片| 精品视频中文字幕| 亚洲精品久久久久久久久久久久久| 这里只有精品丝袜| 国产精品久久久久久亚洲影视| 久久久精品亚洲| 欧美疯狂性受xxxxx另类| 日韩电影中文字幕在线观看| 久热精品视频在线免费观看| 欧美日韩成人在线播放| 色妞一区二区三区| 亚洲黄色av女优在线观看| 日韩欧美在线网址| 欧美风情在线观看| 777精品视频| 九九久久精品一区| 亚洲欧洲在线播放| 亚洲精品久久在线| 国产aⅴ夜夜欢一区二区三区| 性欧美在线看片a免费观看| 欧美精品在线第一页| 欧美黑人视频一区| 亚洲第一色在线| 97人洗澡人人免费公开视频碰碰碰| 少妇高潮久久久久久潘金莲| 一区二区欧美在线| 欧美另类在线观看| 97超碰国产精品女人人人爽| 亚洲综合日韩中文字幕v在线| 亚洲激情视频在线播放| 亚洲精品日韩激情在线电影| 欧美电影免费观看电视剧大全| 国产69精品99久久久久久宅男| 国产亚洲精品91在线| 欧美激情一级精品国产| 欧美成人精品在线观看| 91大神福利视频在线| 国产日韩一区在线| 日韩久久精品成人| 亚洲理论在线a中文字幕| 午夜精品三级视频福利| 国产精品黄页免费高清在线观看| 91极品女神在线| 亚洲变态欧美另类捆绑| 国产精品久久久一区| 午夜精品久久久久久久99黑人| 国内揄拍国内精品少妇国语| 国产精品国产三级国产专播精品人| 日韩免费不卡av| 91精品国产色综合| 亚洲石原莉奈一区二区在线观看| 国产视频自拍一区| 欧美怡红院视频一区二区三区| 欧美午夜性色大片在线观看| 欧美尤物巨大精品爽| 亚洲电影在线观看| 国语对白做受69| 欧美性xxxx在线播放| 久久91亚洲人成电影网站| 啪一啪鲁一鲁2019在线视频| 国产视频丨精品|在线观看| 热99精品里视频精品| 亚洲欧美制服另类日韩|