熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

JSP設計模式中的兩種常見模式

2013-11-23 19:33:52  來源: Java核心技術 

  

  如果你經常去Servlet或JSP的新聞組或者郵件列表那麼一定會看到不少關於Model I 和Model II 方法的討論究竟采用哪一種這取決於你的個人喜好團隊工作策略以及是否采用正統的OOP

  簡單地說Model I將事務邏輯(business logic)和表示代碼(presentation code)融合在一起(如在HTML中)Model II則提倡最大限度地將所有的代碼放到內容表示之外

  Model I 簡單的單層次應用

  如果是在一個人人都精通Java和HTML的環境中或者你獨自做著所有的工作假如每個人都有清晰的編程結構和思路那麼這種方法會很有效不過這樣的假設不在本文討論范圍之內這種方法的第一個優點是如果你的應用改變了你只需維護一個文件而最大的缺陷是可讀性!除非十分小心否則你的HTML和Java代碼會相互混雜從而難以維護

  在下面這個例子中我們將增加一個 TimeZone 元素從而使它變成JSP文件它會返回基於時間的所期待的TimeZone如果沒有提交 TimeZone那麼缺省的是服務器的缺省時間

  ======================================================================   
   ﹤xml version= ?﹥   
   ﹤H﹥Time JSP﹤/H﹥   
   ﹤jsp:scriptlet﹥   
   //the parameter zone shall be equal to a number between  and  (inclusive)   
   TimeZone timeZone = TimeZonegetDefault(); //returns the default TimeZone for the server   
   if (requestgetParameterValues(zone) != null)   
   {   
   String timeZoneArg = requestgetParameterValues(zone)[];   
   timeZone = TimeZonegetTimeZone(GMT+ + timeZoneArg + :);   
   // gets a TimeZone For this example we´re just going to assume   
   // its a positive argument not a negative one   
   }   
   //since we´re basing our time from GMT we´ll set our Locale to Brittania and get a Calendar   
   Calendar myCalendar = CalendargetInstance(timeZone LocaleUK);   
   ﹤/jsp:scriptlet﹥   
   ﹤%= myCalendarget(CalendarHOUR_OF_DAY) %﹥:   
   ﹤%= myCalendarget(CalendarMINUTE) %﹥:   
   ﹤%= myCalendarget(CalendarSECOND) %﹥   
   ======================================================================  

  相應地數據也可以從JavaBean取得並加以顯示在下一個例子中我們就可以看到

  Model II: 重定向請求(Redirecting Requests)

  在一個團隊開發環境中有些是HTML設計者另一些則是Java程序員這時這一方法顯得非常重要Java程序員可以集中精力創建可重用代碼而HTML設計師可以集中精力於內容表示彼此相對對立可以分別動態地修改自己的內容只要總體的輸入輸出不變

  現在我們可以使用Model II來表示Model I的那個例子這一方法遵循了ModelViewController (MVC) 范例 (cite Design Patterns book) 在這個例子中我們只有一個類(頁或者servlet) 處理請求(Controller)取得TimeZone設置所有用於表示的變量並將控制傳遞到表示頁(View)作為如此簡單的應用可以沒有 Model

  Controller: timeByZonejsp

  controller可以是一個servlet或一個JSP頁我推薦使用JSP因為這樣我不必擔心每當我做修改時要對類重新編譯但是你將因此失去granularity(顆粒性)以後要擴展該類也比較困難

  ======================================================================   
   ﹤xml version= ?﹥   
   ﹤!Worker Class nobody should see me﹥   
   ﹤jsp:scriptlet﹥   
   //the parameter zone shall be equal to a number between  and  (inclusive)   
   TimeZone timeZone = TimeZonegetDefault(); //returns the default TimeZone for the server   
   if (requestgetParameterValues(zone) != null)   
   {   
   String timeZoneArg = requestgetParameterValues(zone)[];   
   timeZone = TimeZonegetTimeZone(GMT+ + timeZoneArg + :);   
   // gets a TimeZone For this example we´re just going to assume   
   // its a positive argument not a negative one  
    
   }   
   TimeBean timeBean = new TimeBean();   
   timeBeansetHours = myCalendarget(CalendarHOUR_OF_DAY);   
   timeBeansetMinutes = myCalendarget(CalendarMINUTE);   
   timeBeansetSeconds = myCalendarget(CalendarSECOND);   
   HttpSession mySession = requestgetSession();   
   mySessionputValue(tempTimeBean timeBean);   
   ﹤/jsp:scriptlet﹥   
   ﹤jsp:forward page=displayTimejsp /﹥   
   ======================================================================  

  View: displayTimejsp

  同樣地這個view既可以是一個servlet也可以是一個jsp文件這裡我們從Session中取得並顯示它的值實際上我們會將這做兩次來示范Bean是如何被使用的

  ======================================================================   
   ﹤xml version= ?﹥   
   ﹤H﹥Time JSP﹤/H﹥   
   ﹤jsp:useBean class=TimeBean id=tempTimeBean scope=session /﹥   
   ﹤jsp:getProperty name=tempTimeBean property=hours﹥:   
   ﹤jsp:getProperty name=tempTimeBean property=minutes﹥:   
   ﹤jsp:getProperty name=tempTimeBean property=seconds﹥   
   ﹤! these would have printed null if tempTimeBean was not instantiated by timeByZonejsp ﹥   
   ﹤jsp:scriptlet﹥   
   HttpSession mySession = requestgetSession();   
   TimeBean timeBean = mySessiongetValue(tempTimeBean);   
   if (timeBean != null)   
   { // check to make sure its not null to avoid NullPointerExceptions   
   outprint(timeBeangetHours());   
   outprint(:);   
   outprint(timeBeangetMinutes());   
   outprint(:);   
   outprint(timeBeangetSeconds());   
   }   
   else   
   {   
   outprintln(Press your Back button and select a TimeZone);   
   }   
   ﹤/jsp:scriptlet﹥   
   ======================================================================  


From:http://tw.wingwit.com/Article/program/Java/hx/201311/27100.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.