第一篇:年終總結(jié)框架
年終總結(jié)框架
一、2016年個人工作陳述
(一)工作簡述
1.業(yè)務(wù)工作思路簡述
2.2016年度工作的主要變化、做法
3.部門規(guī)章制度建設(shè)情況;
4.人員培養(yǎng)計劃
5.部門黨風、個人廉潔自律方面情況。
(二)分析存在的主要問題,并找出原因,給出解決辦法。
二、2017年崗位工作計劃(一)人員管理思路、工作管理思路
(二)2017年崗位工作目標及實現(xiàn)目標的思路及措施
第二篇:三大框架總結(jié)
JAVA三大框架ssh-Struts、Spring、Hibernate
Struts
1.struts是一個按MVC模式設(shè)計的Web層框架,其實它就是一個大大的servlet,這個Servlet名為ActionServlet,或是 ActionServlet的子類。我們可以在web.xml文件中將符合某種特征的所有請求交給這個Servlet處理,這個Servlet再參照一個配置文件(通常為/WEB-INF/struts-config.xml)將各個請求分別分配給不同的action去處理。
一個擴展知識點:struts的配置文件可以有多個,可以按模塊配置各自的配置文件,這樣可以防止配置文件的過度膨脹;
2.ActionServlet把請求交給action去處理之前,會將請求參數(shù)封裝成一個formbean對象(就是一個java類,這個類中的每個屬性對應(yīng)一個請求參數(shù)),封裝成一個什么樣的formbean對象呢?看配置文件。
3.要說明的是,ActionServlet把formbean對象傳遞給action的execute方法之前,可能會調(diào)用formbean的validate方法進行校驗,只有校驗通過后才將這個formbean對象傳遞給action的execute方法,否則,它將返回一個錯誤頁面,這個錯誤頁面由input屬性指定,(看配置文件)作者為什么將這里命名為 input屬性,而不是error屬性,我們后面結(jié)合實際的運行效果進行分析。
4.action執(zhí)行完后要返回顯示的結(jié)果視圖,這個結(jié)果視圖是用一個ActionForward對象來表示的,actionforward對象通過struts-config.xml配置文件中的配置關(guān)聯(lián)到某個jsp 頁面,因為程序中使用的是在struts-config.xml配置文件為jsp頁面設(shè)置的邏輯名,這樣可以實現(xiàn)action程序代碼與返回的jsp頁面名稱的解耦。
Hibernate
1.面向?qū)ο笤O(shè)計的軟件內(nèi)部運行過程可以理解成就是在不斷創(chuàng)建各種新對象、建立對象之間的關(guān)系,調(diào)用對象的方法來改變各個對象的狀態(tài)和對象消亡的過程,不管程序運行的過程和操作怎么樣,本質(zhì)上都是要得到一個結(jié)果,程序上一個時刻和下一個時刻的運行結(jié)果的差異就表現(xiàn)在內(nèi)存中的對象狀態(tài)發(fā)生了變化。
2.為了在關(guān)機和內(nèi)存空間不夠的狀況下,保持程序的運行狀態(tài),需要將內(nèi)存中的對象狀態(tài)保存到持久化設(shè)備和從持久化設(shè)備中恢復出對象的狀態(tài),通常都是保存到關(guān)系數(shù)據(jù)庫來保存大量對象信息。從Java程序的運行功能上來講,保存對象狀態(tài)的功能相比系統(tǒng)運行的其他功能來說,應(yīng)該是一個很不起眼的附屬功能,java采用 jdbc來實現(xiàn)這個功能,這個不起眼的功能卻要編寫大量的代碼,而做的事情僅僅是保存對象和恢復對象,并且那些大量的jdbc代碼并沒有什么技術(shù)含量,基本上是采用一套例行公事的標準代碼模板來編寫,是一種苦活和重復性的工作。
3.通過數(shù)據(jù)庫保存java程序運行時產(chǎn)生的對象和恢復對象,其實就是實現(xiàn)了java對象與關(guān)系數(shù)據(jù)庫記錄的映射關(guān)系,稱為ORM(即Object Relation Mapping),人們可以通過封裝JDBC代碼來實現(xiàn)了這種功能,封裝出來的產(chǎn)品稱之為ORM框架,Hibernate就是其中的一種流行ORM框架。使用Hibernate框架,不用寫JDBC代碼,僅僅是調(diào)用一個save方法,就可以將對象保存到關(guān)系數(shù)據(jù)庫中,僅僅是調(diào)用一個get方法,就可以從數(shù)據(jù)庫中加載出一個對象。
4.使用Hibernate的基本流程是:配置Configuration對象、產(chǎn)生SessionFactory、創(chuàng)建session對象,啟動事務(wù),完成CRUD操作,提交事務(wù),關(guān)閉session。
5.使用Hibernate時,先要配置hibernate.cfg.xml文件,其中配置數(shù)據(jù)庫連接信息和方言等,還要為每個實體配置相應(yīng)的hbm.xml文件,hibernate.cfg.xml文件中需要登記每個hbm.xml文件。
6.在應(yīng)用Hibernate時,重點要了解Session的緩存原理,級聯(lián),延遲加載和hql查詢。
3、AOP的作用。
Spring
1.Spring實現(xiàn)了工廠模式的工廠類(在這里有必要解釋清楚什么是工廠模式),這個類名為BeanFactory(實際上是一個接口),在程序中通常BeanFactory的子類ApplicationContext。Spring相當于一個大的工廠類,在其配置文件中通過
2.Spring提供了對IOC良好支持,IOC是一種編程思想,是一種架構(gòu)藝術(shù),利用這種思想可以很好地實現(xiàn)模塊之間的解耦。IOC也稱為DI(Depency Injection),什么叫依賴注入呢?譬如,Class Programmer
{
Computer computer = null;
public void code()
{
//Computer computer = new IBMComputer();
//Computer computer = beanfacotry.getComputer();
computer.write();
}
public void setComputer(Computer computer)
{
this.computer = computer;
}
}
另外兩種方式都由依賴,第一個直接依賴于目標類,第二個把依賴轉(zhuǎn)移到工廠上,底與目標和工廠解耦了。在spring的配置文件中配置片段如下:
3.Spring提供了對AOP技術(shù)的良好封裝,AOP稱為面向切面編程,就是系統(tǒng)中有很多各不相干的類的方法,在這些眾多方法中要加入某種系統(tǒng)功能的代碼,例如,加入日志,權(quán)限判斷,加入異常處理,這種應(yīng)用稱為AOP。實現(xiàn)AOP功能采用的是代理技術(shù),客戶端程序不再調(diào)用目標,而調(diào)用代理類,代理類與目標類對外具有相同的方法聲明,可以實現(xiàn)相同的方法聲明,一是實現(xiàn)相同的接口,二是作為目標的子類在,JDK
類產(chǎn)生動態(tài)代理的方式為某個接口生成實現(xiàn)類,如果要為某個類生成子類,則可以用
B。在生成的代理類的方法中加入系統(tǒng)功能和調(diào)用目標類的相應(yīng)方法,系統(tǒng)功能的代理以Advice對象進行提供,顯然要創(chuàng)建出代理對象,至少需要目標類和 Advice類。
了這種支持,只需要在spring配置文件中配置這兩個元素即可實現(xiàn)代理和aop
第三個徹加入ProxyCGLI spring提供有兩種方式中采用功能,例如,
Struts優(yōu)缺點
優(yōu)點:
1.實現(xiàn)MVC模式,結(jié)構(gòu)清晰,使開發(fā)者只關(guān)注業(yè)務(wù)邏輯的實現(xiàn).2.有豐富的tag可以用 ,Struts的標記庫(Taglib),如能靈活動用,則能大大提高開發(fā)效率
3.頁面導航
使系統(tǒng)的脈絡(luò)更加清晰。通過一個配置文件,即可把握整個系統(tǒng)各部分之間的聯(lián)系,這對于后期的維護有著莫大的好處。尤其是當另一批開發(fā)者接手這個項目時,這種優(yōu)勢體現(xiàn)得更加明顯。
4.提供Exception處理機制.5.數(shù)據(jù)庫鏈接池管理
6.支持I18N
缺點
一、轉(zhuǎn)到展示層時,需要配置forward,如果有十個展示層的jsp,需要配置十次struts,而且還不包括有時候目錄、文件變更,需要重新修改forward,注意,每次修改配置之后,要求重新部署整個項目,而tomcate這樣的服務(wù)器,還必須重新啟動服務(wù)器
二、Struts 的Action必需是thread-safe方式,它僅僅允許一個實例去處理所有的請求。所以action用到的所有的資源都必需統(tǒng)一同步,這個就引起了線程安全的問題。
三、測試不方便.Struts的每個Action都同Web層耦合在一起,這樣它的測試依賴于Web容器,單元測試也很難實現(xiàn)。不過有一個Junit的擴展工具Struts TestCase可以實現(xiàn)它的單元測試。
四、類型的轉(zhuǎn)換.Struts的FormBean把所有的數(shù)據(jù)都作為String類型,它可以使用工具Commons-Beanutils進行類型轉(zhuǎn)化。但它的轉(zhuǎn)化都是在Class級別,而且轉(zhuǎn)化的類型是不可配置的。類型轉(zhuǎn)化時的錯誤信息返回給用戶也是非常困難的。
五、對Servlet的依賴性過強.Struts處理Action時必需要依賴ServletRequest 和ServletResponse,所有它擺脫不了Servlet容器。
六、前端表達式語言方面.Struts集成了JSTL,所以它主要使用JSTL的表達式語言來獲取數(shù)據(jù)。可是JSTL的表達式語言在Collection和索引屬性方面處理顯得很弱。
七、對Action執(zhí)行的控制困難.Struts創(chuàng)建一個Action,如果想控制它的執(zhí)行順序?qū)浅@щy。甚至你要重新去寫Servlet來實現(xiàn)你的這個功能需求。
八、對Action 執(zhí)行前和后的處理.Struts處理Action的時候是基于class的hierarchies,很難在action處理前和后進行操作。
九、對事件支持不夠.在struts中,實際是一個表單Form對應(yīng)一個Action類(或DispatchAction),換一句話說:在Struts中實際是一個表單只能 對應(yīng)一個事件,struts這種事件方式稱為application event,application event和component event相比是一種粗粒度的事件。
一、Spring
Spring是一個解決了許多在J2EE開發(fā)中常見的問題的強大框架。Spring提供了管理業(yè)務(wù)對象的一致方法并且鼓勵了注入對接口編程而不是對類編程的良好習慣。Spring的架構(gòu)基礎(chǔ)是基于使用JavaBean屬性的Inversion of Control容器。然而,這僅僅是完整圖景中的一部分:Spring在使用IoC容器作為構(gòu)建完關(guān)注所有架構(gòu)層的完整解決方案方面是獨一無二的。Spring提供了唯一的數(shù)據(jù)訪問抽象,包括簡單和有效率的JDBC框架,極大的改進了效率并且減少了可能的錯誤。Spring的數(shù)據(jù)訪問架構(gòu)還集成了Hibernate和其他O/R mapping解決方案。Spring還提供了唯一的事務(wù)管理抽象,它能夠在各種底層事務(wù)管理技術(shù),例如JTA或者JDBC事務(wù)提供一個一致的編程模型。Spring提供了一個用標準Java語言編寫的AOP框架,它給POJOs提供了聲明式的事務(wù)管理和其他企業(yè)事務(wù)--如果你需要--還能實現(xiàn)你自己的aspects。這個框架足夠強大,使得應(yīng)用程序能夠拋開 EJB的復雜性,同時享受著和傳統(tǒng)EJB相關(guān)的關(guān)鍵服務(wù)。Spring還提供了可以和IoC容器集成的強大而靈活的MVC Web框架。
二、STRUCTS
Struts 是一個基于Sun J2EE平臺的MVC框架,主要是采用Servlet和JSP技術(shù)來實現(xiàn)的。由于Struts能充分滿足應(yīng)用開發(fā)的需求,簡單易用,敏捷迅速,在過去的一年中頗受關(guān)注。Struts把Servlet、JSP、自定義標簽和信息資源
(message resources)整合到一個統(tǒng)一的框架中,開發(fā)人員利用其進行開發(fā)時不用再自己編碼實現(xiàn)全套MVC模式,極大的節(jié)省了時間,所以說Struts是一個非常不錯的應(yīng)用框架。
三、Hibernate
Hibernate是一個開放源代碼的對象關(guān)系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫。Hibernate可以應(yīng)用在任何使用JDBC的場合,既可以在Java的客戶端程序?qū)嵱?,也可以在Servlet/JSP的Web應(yīng)用中使用,最具革命意義的是,Hibernate可以在應(yīng)用EJB的J2EE架構(gòu)中取代CMP,完成數(shù)據(jù)持久化的重任。,Hibernate可以在應(yīng)用EJB的J2EE架構(gòu)中取代CMP,完成數(shù)據(jù)持久化的重任。
第三篇:CI框架總結(jié)
第一部分 CI框架的簡介
1.官網(wǎng)下載ci框架包
2.解壓包需要的文件夾是 aplication systerm(ci框架包)index.php總?cè)肟谖募?/p>
3.aplication 中分別有文件:
models controllers views
4.ci路由的訪問機制是pathinfo 即 入口文件.php/控制器/動作
第三部分 CI框架中的控制器與視圖
5.模型層 控制器 視圖層
控制器
a.保證控制器類名稱與控制器類文件名稱一樣(且文件名稱大小問題因為人們輸入習慣而變成了小寫)無后綴 類名.php b.所有的控制器直接或間接繼承CI_Controller類
c.方法屬性為 public時可被訪問
d.控制器的對象:超級對象($this 當前類的當前對象)可在控制器的任意方法中打印超級對象
CI框架可以自動實例化一些對象,并且把它放在超級對象的屬性中
超級對象的屬性:
CI裝載器($this->loader)可以看成 $Object=new CI_loader();$this->load=$Object;可以裝載的操作有:
view()裝載視圖
也可用來裝載文件
vars()裝載分配的變量
database()裝載數(shù)據(jù)庫操作對象
model()裝載模型對象
helper()裝載輔助函數(shù)
路由解析($this->uri)可以看成 $Object=new CI_URI();$this->uri=$Object;
ci框架的路由是分段截取的 參數(shù)為1-開始位置 入口文件.php/值1/值2/(與tp框架不同的是ci框架路由僅有值無名)
CI框架的路由參數(shù)獲取方式
方法一:
segment()特點:很便捷但是路由參數(shù)的順序變得很重要
方法二:
public function index($a,$b)通過參數(shù)來獲取路由的參數(shù) 特點:必須要有默認值參數(shù)順序同樣很重要
客戶端信息提取($this->input)
$this->input->post();
$this->input->server();e.存放的是目錄為view f.視圖文件的加載方式:$this->load->view();視圖文件名稱不加后綴亦可寫子目錄
d.視圖文件中混編php代碼
h.變量分配的問題 $this->load->vars('title','這是標題');如果多變量分配將通過關(guān)聯(lián)數(shù)組 $array['title'] $date['list']=$list 視圖頁 echo $title d.網(wǎng)站開發(fā)規(guī)范 應(yīng)將頭尾等公共部分分別放在文件中方便加載
第四部分 數(shù)據(jù)庫訪問
1.修改配置文件:
Application-?config ? database.php 注意:如果同時有多個數(shù)據(jù)庫時可將defalut 那塊代碼復制一遍
2.在控制器中裝載數(shù)據(jù)庫操作類 $this->load->database()(是可以指點函數(shù)的當有多個數(shù)據(jù)庫)后 框架自動加載數(shù)據(jù)庫操作類驅(qū)動(app/config/autoload.php)到超級對象屬性db中
設(shè)置自動加載數(shù)據(jù)庫操作類: application?config->autoload.php 3.數(shù)據(jù)獲取
$reslut=$this->db->query();//結(jié)果是一個對象database文件夾下所有類的對象
$result->result();//一個一個的數(shù)組對象 類似 mysql_fetch_object();$result->result_array();//返回二維數(shù)組里面是關(guān)聯(lián)數(shù)組 $result->row();//取第一條數(shù)據(jù)是對象 $result->row_array();//返回數(shù)組
4.數(shù)據(jù)添加
$result=$this->db->query();//同mysql操作函數(shù)一樣 返回值是布爾
$this->insert_id();//返回增加的主鍵id
$this->affeched_rows();//受影響的記錄條數(shù)
安全提升:
第一步:設(shè)定表前綴 application->config->database.php可以用一個常量來替換所有的表前綴 配置成相同的方便以后項目的維護修改
第二步:綁定數(shù)據(jù)
例如將insert中 字段值列表用 ?代替 執(zhí)行sql時將需要添加的數(shù)據(jù)封裝到索引數(shù)組中
第五部分 AR模型
1.開啟AR模型后可以使用 model類中一系列的方法 如果是重新解壓CI框架文件 需要:
1.設(shè)置數(shù)據(jù)庫操作函數(shù):application/config/database.php 進行設(shè)置
2開啟對數(shù)據(jù)庫的自動加載 :application /config/autoload.php $autoload['libraries'] = array('database');2.如果確定使用AR模型的話必須確定在數(shù)據(jù)操作類(database)的配置文件中確定 支持AR模型: app/config/database.php $active_record = TRUE;3.設(shè)置表前綴
Application/config/database.php 設(shè)置了表前綴后會自動加載前綴 4.加載AR模型后可以使用mysql_result數(shù)據(jù)處理
增加數(shù)據(jù):
$this->db->insert(‘表名’,關(guān)聯(lián)數(shù)組);// 返回值為布爾; 刪除數(shù)據(jù):
$this->db->delete(‘表名’,條件關(guān)聯(lián)數(shù)組);修改數(shù)據(jù):
$this->db->update(‘表名’,修改值得關(guān)聯(lián)數(shù)組,條件的關(guān)聯(lián)數(shù)組);查詢數(shù)據(jù):
$result=$this->db->get(‘表名’);//等同于tp中的select()返回值是資源 $result->result();查詢數(shù)據(jù)的連環(huán)操作:
方式一:
$this->db->select(‘name,password’)//字段列表 不是tp中的select()方法
->from(‘表名’)//不加表前綴
->where(‘id >=’,3)//條件列表
->limit(2,3);//ci中l(wèi)imit方法中 開始位置和取值長度與sql相反
->order_by(‘tiaojian’);//
->get();
方式二:
$this->db->where(‘id =’,1)->get(‘表名’)
$this->db->where(array(‘id’=>1,’name!=’=>’臭妮’))->get(‘表名’)查看上一條sql:echo last_query();注意:如果是復雜的查詢采用
$this->db->query($sql,$data);5.AR模型之控制器的擴展:
Application/core下新建擴展的控制器文件
Class MY_Controller extends CI_Controller{
Public function __construct(){
Parent::__constuct();
//登陸 權(quán)限的驗證
} 注:CI中 控制器的前綴的可以進行修改 application /config文件中可以進行修改
第四篇:框架總結(jié)日語
幕沖擊可以讓哪?位置可前可后!說我們奢望。海量游;吃今天酸,奮刻苦讀書后來?巧的看似,鑄鞭臘月草。聲那小虎他爺!頭的語大,聽過哪些最好!一綠活著。
則由:頭風曉得閃。個宏簡;類同也;牢牛驥同槽牛驥?的時候看到。行余的重也給!癥血管預防和治?我想學習專業(yè)!草雪見題,透露曖昧的語言?死了依然。
開生死路一。我讓你驚,尋天空之,曲的所歌曲。吧交:過曾經(jīng)里你。一年幸福,點無奈讓,子命也中文化的?服熱線托物言志?離心:棟梁之才。
以讓生養(yǎng)眼。歌聲來所以說音?柳綠朱;話英鑄造,起背景知識樹!員工雖然,婷越長大,正午海水,論縱橫之幽。才把無義的語音?大腦安;活著死了。
以及避淋雨現(xiàn)在?合十年前后李!放也比喻浮。換貨季火,要配當;地后腿伸,的馬克思寫資本?無言獨上西樓月?你她想繼續(xù)了要?藝術(shù)宮翔,詩的大說在靜聲?都這就我??梢悦鑼懙哪?!班時老板對兔!式葡萄牙,事事下建,業(yè)年學;音節(jié)詞中遇到音?的北極漸漸抬高?物豬油肥肉等高?班試聽;個之:游最好暑假去!同學做的。
中寫:長久以后你。樹森林防,這都算張,躲避獵食動。來搬去的,心我一定,慢慢地在水。專業(yè)供納米質(zhì)優(yōu)?詩吳克群你我!語甜言蜜語花!標準和長。
鑰匙還退一。白這首歌,長度過;分細胞和突。德華來生緣劉!失報話上,起銀:生今世我,吻我吧完,感覺氣足,必定趕家,兩種上小。
火陳翔下個路!系的靈作戰(zhàn)雙!鋒利無比在。起攻勢到省城!那無趣了到。帥和帥我?guī)?。王方:而且同的學習!了這支歌,要每一個演員!趙詠華最,文章小草。
玩家也;地位但你直憋!飛音絡(luò)話到底大?喻神通大驅(qū)雷策?身的毛豎,歇后語;勻地:要五一出,過獵豹;的嫩葉;的氣但要,和大樹閱。
第五篇:WEB框架總結(jié)
概述
開發(fā)框架的選擇,始終是個仁者見仁、智者見智的事情。尤其是Web層的開發(fā)框架,數(shù)量非常多,而且各有特色,如:Struts、WebWork、Spring
MVC、Tapestry、JSF、WebPage3.0......等等。他們各自的優(yōu)、缺點: 框架使用背景
一:使用框架的必然性
框架,即framework。其實就是某種應(yīng)用的半成品,把不同應(yīng)用程序中有共性的一些東西抽取出來,做成一個半成品程序,這樣的半成品就是所謂的程序框架。
軟件系統(tǒng)發(fā)展到今天已經(jīng)很復雜了,特別是服務(wù)器端軟件,涉及到的知識,內(nèi)容,問題太多。在某些方面使用別人成熟的框架,就相當于讓別人幫你完成一些基礎(chǔ)工作,你只需要集中精力完成系統(tǒng)的業(yè)務(wù)邏輯設(shè)計。這樣每次開發(fā)就不用白手起家,而是可以在這個基礎(chǔ)上開始搭建。
使用框架的最大好處:減少重復開發(fā)工作量、縮短開發(fā)時間、降低開發(fā)成本。同時還有其它的好處,如:使程序設(shè)計更合理、程序運行更穩(wěn)定等?;谶@些原因,基本上現(xiàn)在在開發(fā)中,都會選用某些合適的開發(fā)框架,來幫助快速高效的開發(fā)應(yīng)用系統(tǒng)。
了解了使用框架的必然性,下面來看看如何選擇,當然我們的話題集中在Web層的開發(fā)框架。在談這個問題之前,先來看看我們在Web開發(fā)中究竟需要做些什么工作:
二:Web層開發(fā)的工作
在J2EE開發(fā)中,分層是基本的思想,3層架構(gòu)或者多層架構(gòu)早已深入人心,在這里我們就把目光集中到Web層,看看到底Web層開發(fā)做了那些工作:
1:數(shù)據(jù)展示
Web層需要從邏輯層獲取需要展示的數(shù)據(jù),然后以合理的方式在頁面進行展示
2:人機交互
用戶需要從界面上輸入數(shù)據(jù),在界面上進行按鈕點擊,進而觸發(fā)事件,標準的事件驅(qū)動模型,然后跟后臺進行數(shù)據(jù)交換,出現(xiàn)新的界面。
3:收集數(shù)據(jù),調(diào)用邏輯層接口
Web層收到用戶的事件請求,需要調(diào)用相應(yīng)的邏輯層接口來進行處理,Web層是不會有任何邏輯處理的。調(diào)用邏輯層接口,需要傳遞參數(shù),這時需要收集用戶在界面上輸入的數(shù)據(jù),然后進行組織,組織成為邏輯層接口需要的數(shù)據(jù)封裝形式(通常都是ValueObject)。
4:根據(jù)邏輯層的數(shù)據(jù)來重新展示頁面
邏輯層處理完了,需要返回數(shù)據(jù)或信息到界面上。這個時候Web層需要根據(jù)返回的值選擇合適的頁面,然后展示這些數(shù)據(jù)或者信息。
從上面可以看出,Web層開發(fā)的主要工作集中在展示上,也就是圖形用戶界面。這一部分是用戶直觀感受應(yīng)用程序的窗口,也是用戶要求最多的地方,其表現(xiàn)形式也是最豐富的。
三:Web層開發(fā)的步驟
下面再來總結(jié)一下Web層開發(fā)的大致步驟(也就是需要開發(fā)人員做的工作):
注意:這里討論的Web層開發(fā),是不使用任何開發(fā)框架時候的開發(fā)。
1:寫頁面Html,到底有哪些數(shù)據(jù)需要在界面上表現(xiàn)
2:每個數(shù)據(jù)的具體表現(xiàn)形式,如:有的需要表現(xiàn)成為下拉列表,有的需要表現(xiàn)成為單選按鈕等。
3:界面表現(xiàn)形式的邏輯布局,所謂邏輯布局是指某些數(shù)據(jù)的表現(xiàn)形式應(yīng)該放在前面,某些應(yīng)該放在后面;某些放在上面,某些放在下面。如:某個請假申請的業(yè)務(wù),有請假開始時間和結(jié)束時間,很明顯開始時間的表現(xiàn)就應(yīng)該排在結(jié)束時間的前面。而美工是負責最后頁面的美觀,一般美工不能動界面的邏輯布局。
4:完成前面3步,頁面的表現(xiàn)形式的大致模樣就有了,下面需要來做功能性的開發(fā)。第一個就是這些表現(xiàn)形式的值的來源,如:下拉列表顯示的值從什么地方來。值的來源方式很多,有數(shù)據(jù)庫中來、固定值、某斷程序運行的中間結(jié)果、前面頁面?zhèn)鬟f過來等等,當然典型的還是來自數(shù)據(jù)庫。
好了,確定了值的來源,開發(fā)人員就要寫代碼來獲取這些值,然后把這些值賦值到對應(yīng)的表現(xiàn)形式里面。
5:還有一些比較特殊,也就是真實操作的是一類值,但是在界面上顯示的是另一類值,比如:數(shù)據(jù)庫中有用戶編號,到了界面上就得顯示用戶姓名,但是所有的操作都是要操作用戶編號的。我們把這種情況分做:真實值和表現(xiàn)值,他們有一定的內(nèi)在聯(lián)系。這些都是要開發(fā)人員去轉(zhuǎn)化和維護的。
6:接下來就應(yīng)該開發(fā)功能性的事件響應(yīng)了。用戶點擊了某個按鈕或者觸發(fā)了某個事件,首先是客戶端:數(shù)據(jù)檢測、客戶端事件處理;然后提交到服務(wù)端,服務(wù)端要獲取到客戶端提交的數(shù)據(jù),然后調(diào)用相應(yīng)的邏輯層接口來響應(yīng)。當然如何寫邏輯層的實現(xiàn)這里就不去談?wù)摿恕?/p>
7:邏輯層執(zhí)行完過后,返回數(shù)據(jù)和信息到Web層,開發(fā)人員還需要寫代碼去處理,選擇哪個頁面來顯示,如何顯示這些數(shù)據(jù)和信息等。
8:在整個交互的過程中,還必須考慮到如何控制權(quán)限,如:某些數(shù)據(jù)不能顯示,某些數(shù)據(jù)不能編輯等等;同樣還需要考慮到消息的配置和國際化等等。這些功能起源于邏輯層,但是實際的控制要到Web層,這些都需要開發(fā)人員來控制。
9:完成了上面的開發(fā)步驟,頁面基本的功能開發(fā)就告一段落,接下來開發(fā)人員需要考慮頁面美觀的問題了。大家可能會說:“不是有美工嗎,還需要開發(fā)人員干什么?”。事實上美工多半只能出一個靜態(tài)頁面的美化模版,美工對于一推Java代碼和Html的混雜物,多半是沒有辦法的,更不要說還有一些內(nèi)容是動態(tài)生成的,美工就更不可能搞定了。還是得開發(fā)人員上陣,按照美工給的模版,開始添加Css:class、id、style......10:完成上面的開發(fā),基本頁面的開發(fā)工作就完成了,最后的一個步驟就是把各個頁面有機的組織起來,開發(fā)應(yīng)用程序的整體應(yīng)用導航框架,通常就是菜單,然后把各個功能頁面跟菜單結(jié)合起來,形成一個完整的應(yīng)用。
在這里我們省略了開發(fā)期反復的調(diào)試過程,僅總結(jié)開發(fā)的步驟。
四:選擇Web開發(fā)框架的目的了解了如果沒有框架,我們需要做的工作,這對選擇框架有非常大的幫助。
框架,直白點說,就是一個半成品,能夠幫我們做一些事情的半成品。
框架的選擇,就是看哪個框架最合適,從而減少開發(fā)的工作量,提高開發(fā)的效率和質(zhì)量,并有效減少維護的工作量,最終達到節(jié)約綜合開發(fā)成本,獲取更多的收益。
五:選擇Web開發(fā)框架的標準
聲明:這里所談的選擇Web開發(fā)框架的標準,只是我們的總結(jié)和一家之言,并不是放之四海而皆準的真理,請根據(jù)您的體會客觀的看待我們的總結(jié)。
另外:我們這里更多的討論業(yè)務(wù)功能性應(yīng)用程序的Web開發(fā)框架。
1:選擇能夠?qū)ξ覀兊拈_發(fā)過程提供更多、更好幫助的Web開發(fā)框架
2:Web開發(fā)框架的學習一定要簡單,上手一定要快,沒有什么比使用能得到更深的體會。那些動不動就需要半個月或者一個月學習周期的框架,實在是有些恐怖。
3:一定要能得到很好的技術(shù)支持,在應(yīng)用的過程中,或多或少都會出現(xiàn)這樣或者那樣的問題,如果不能很快很好的解決,會對整個項目開發(fā)帶來影響。一定要考慮綜合成本,其實這是目前應(yīng)用開源軟件最大的問題,碰到問題除了死肯文檔就是查閱源代碼,或者是網(wǎng)上搜尋解決的辦法,通常一個問題就會導致1-2天的開發(fā)停頓,嚴重的甚至需要一個星期或者更長,一個項目有上這么幾次,項目整體的開發(fā)成本嗖嗖的就上去了。
4:Web開發(fā)框架結(jié)合其他技術(shù)的能力一定要強,比如:在邏輯層要使用Spring或者Ejb3,那么Web開發(fā)框架一定要能很容易,很方便的與它們進行結(jié)合。
5:Web開發(fā)框架的擴展能力一定要強。在好的框架都有力所不及的地方,這就要求能很容易的擴展Web開發(fā)框架的功能,以滿足新的業(yè)務(wù)需要。同時要注意擴展的簡單性,如果擴展框架的功能代價非常大,還不如不用呢。
6:Web開發(fā)框架最好能提供可視化的開發(fā)和配置,可視化開發(fā)對開發(fā)效率的提高,已經(jīng)得到業(yè)界公認。
7:Web開發(fā)框架的設(shè)計結(jié)構(gòu)一定要合理,應(yīng)用程序會基于這個框架,框架設(shè)計的不合理會大大影響到整個應(yīng)用的可擴展性。
8:Web開發(fā)框架一定要是運行穩(wěn)定的,運行效率高的??蚣艿姆€(wěn)定性和運行效率直接影響到整個系統(tǒng)的穩(wěn)定性和效率。
9:Web開發(fā)框架一定要能很好的結(jié)合目前公司的積累。在多年的開發(fā)中已有了很多積累,不能因為使用Web開發(fā)框架就不能再使用了,那未免有些得不償失。
10:選擇開發(fā)框架另外要注意的一點就是:任何開發(fā)框架都不可能是十全十美的,也不可能是適應(yīng)所有的應(yīng)用場景的,也就是說任何開發(fā)框架都有它適用的范圍。所以選擇的時候要注意判斷應(yīng)用的場景和開發(fā)框架的適用性??蚣軠y評 JSF
優(yōu)點:
Java EE標準,這意味著有很大的市場需求和更多的工作機會
上手快速并且相對容易
有大量可用的組件庫
缺點:
大量的JSP標簽
對REST和安全支持不好
沒有一個統(tǒng)一的實現(xiàn)。既有SUN的實現(xiàn),又有Apache的實現(xiàn)--MyFaces。
Spring MVC
優(yōu)點:
對覆蓋綁定(overriding binding)、驗證(validation)等提供生命周期管理
與許多表示層技術(shù)/框架無縫集成:JSP/JSTL、Tiles、Velocity、FreeMarker、Excel、XSL、PDF等
便于測試--歸功于IoC
缺點:
大量的XML配置文件
太過靈活--沒有公共的父控制器
沒有內(nèi)置的Ajax支持
Stripes
優(yōu)點:
不需要書寫XML配置文件
良好的學習文檔
社區(qū)成員很熱心
缺點:
社區(qū)比較小
不如其他的項目活躍
ActionBean里面的URL是硬編碼的 Struts 2
優(yōu)點:
架構(gòu)簡單--易于擴展
標記庫很容易利用FreeMarker或者Velocity來定制
基于控制器或者基于頁面的導航
缺點:
文檔組織得很差
對新特征過分關(guān)注
通過Google搜索到的大多是Struts 1.x的文檔 Tapestry
優(yōu)點:
一旦學會它,將極大地提高生產(chǎn)率
HTML模板--對頁面設(shè)計師非常有利
每出一個新版本,都會有大量的創(chuàng)新
缺點:
文檔過于概念性,不夠?qū)嵱?/p>
學習曲線陡峭
發(fā)行周期長--每年都有較大的升級
Wicket
優(yōu)點:
對Java開發(fā)者有利(不是Web開發(fā)者)
頁面和顯示綁定緊密
社區(qū)活躍--有來自創(chuàng)建者的支持
缺點:
HTML模板和Java代碼緊挨著
需要對OO有較好的理解
Wicket邏輯--什么都用Java搞定
接著,Matt通過采訪這些框架的作者,與他們討論各種開源的Java Web框架,并且突出各個框架的長處、聽取框架作者對其他框架的看法,希望借此了解這些框架的未來發(fā)展方向。
下列是一些被采訪者:
JSF, Jacob Hookom
RIFE, Geert Bevin
Seam, Gavin King
Spring MVC, Rob Harrop
Spring Web Flow, Rob Harrop and Keith Donald
Stripes, Tim Fennell
Struts 1, Don Brown
Tapestry, Howard Lewis Ship
Trails, Chris Nelson
Struts 2, Patrick Lightbody
Wicket, Eelco Hillenius
Matt對采訪做了如下總結(jié):
JSF:
如果你想讓web應(yīng)用具有類似桌面程序的功能性,那么JSF的標準規(guī)范和大量第三方組件庫的支持值得你 信賴。
Spring MVC:
綜合了許多不同的技術(shù),這使得它可以被廣泛地應(yīng)用到不同類型的項目中去;它可以被當作web應(yīng)用開發(fā)的一個基礎(chǔ)平臺。
Stripes:
可以被應(yīng)用到存在大量復雜數(shù)據(jù)交互的程序中;有強大的類型轉(zhuǎn)換、綁定和驗證功能;可以使管理大的復雜表單以及直接映射它們到域?qū)ο笞兊煤唵?.....Tapestry:
在中到大型項目中,表現(xiàn)突出(當然,你也可以只把它應(yīng)用到單個頁面上),在這些項目中,你可以通過簡單地創(chuàng)建新的組件起到杠桿作用。
Struts 2:
通常更適合于那些希望可以真正開始做事并且愿意花費大量時間來學習他們使用的開源工具的小項目組。Struts 2的目標不是那些更喜歡拖放式開發(fā)的“扶手椅程序員”。
Wicket:
非常適合于這樣的內(nèi)/外部網(wǎng)應(yīng)用:UI很復雜并且你希望可以充分利用你的開發(fā)者資源。
上面的總結(jié),基本是突出了各個框架的長處。然而,哪些又是他們不好的地方呢? 評價一個框架好壞與否的標準:
Ajax支持
是不是內(nèi)置了?是否便于使用?
書簽能力
用戶能否將某個頁面收藏起來并且可以方便地返回到該頁面?
驗證
使用是否簡單?是否支持客戶端(JavaScript)驗證?
可測試性
脫離容器測試控制器,是否足夠簡單?
提交和重定向
框架如何處理重復提交問題?
國際化
如何支持國際化?控制器利用國際化信息,是否容易?
頁面修飾
框架支持哪種類型的頁面修飾/組成機制?
社區(qū)和技術(shù)支持
提出問題,能否被快速地、恭敬地回答?
開發(fā)工具
是否有支持這個框架的好的工具,尤其是IDE?
市場需求
學習了這個框架,它能否幫你找到份工作?
崗位數(shù)量
在dice.com和indeed.com上,對這個框架技能的需求如何? 筆者認為這個評價標準,值得大家借鑒。
然后,Matt按照這些評價標準,對各個框架做了以下闡述:
Ajax支持
JSF:沒有內(nèi)置的Ajax支持,需要使用ICEfaces和Ajax4JSF
Stripes:沒有對應(yīng)的類庫,支持流輸出
Struts 2:內(nèi)置Dojo,有用于GWT和JSON的插件
Spring MVC:沒有對應(yīng)的類庫,需要使用DWR和Spring MVC擴展
Tapestry:Tapestry 4.1中,有內(nèi)置的Dojo
Wicket:有Dojo和Script.aculo.us支持
書簽能力
JSF:可以任意提交--URL甚至不被考慮
Stripes:使用約定,但是你可以不加理會
Struts 2:有命名空間的概念,這使得收藏某個頁面并返回變得容易
Spring MVC:允許完全的URL控制
Tapestry:依然存在一些丑陋的URL
Wicket:允許裝配(mount)頁面/URL
驗證
JSF:默認的國際化信息丑陋,但是配置簡單
Stripes和Wicket:用Java類進行驗證--不支持客戶端驗證
Struts 2:使用OGNL完成強大的表達式驗證功能;只有在Action上指定了規(guī)則,才支持客戶端驗證。
Spring MVC:允許你使用公共驗證器--這是一種成熟的解決方案
Tapestry:有健壯的驗證功能--不需自定義就有漂亮的國際化信息
可測試性
Spring MVC和Struts 2:允許利用mocks(例如EasyMock、jMock和Spring Mocks)簡單地進行測試
Tapestry:測試困難,因為頁面類被抽象、具體類被簡化
JSF:頁面類可以方便地被測試,實際上很像Struts 2 中的actions
Wicket:有WicketTester--一個強大的解決方案
Stripes:有Servlet API Mocks和MockRoundtrip
提交和重定向
解決重復提交問題的最簡單方法是:在提交后重定向
Spring MVC:允許你將參數(shù)加到重定向URL上
Stripes、Tapestry和Wicket:有“flash式”的支持
Struts 2:需要一個自定義的解決方案
JSF:需要一個自定義的解決方案,國際化信息很難加入到頁面bean中
國際化
JSTL的
Stripes、Spring MVC和JSF:每個地區(qū)使用一個資源綁定文件
Struts
2、Tapestry和Wicket:提倡把每個頁面/action用到的資源文件分開
JSF:需要在每個頁面上定義資源綁定信息
Tapestry:標簽比較可怕
頁面修飾
Tiles能夠用于Struts
2、Spring MVC和JSF中;需要對每個頁面進行配置。
SiteMesh能夠用于所有的這些框架中(不推薦在JSF、Tapestry或者Wicket中使用);在設(shè)置完成后,只需要很少的維護。
開發(fā)工具
Spring MVC:Spring IDE,但是只做XML校驗,不是一個UI/web工具
Struts 2:Eclipse
Tapestry:Spindle,對編碼者非常有利
JSF:眾多IDE支持,并且做得越來越好
Stripes和Wicket:沒有任何官方工具
NetBeans目前支持Struts *、JSF(+Facelets)、Tapestry和Wicket,尚不支持Stripes和Spring MVC
市場需求
Struts 1:需求依然很大并且被廣泛使用
Spring MVC:越來越受關(guān)注,但大部分是因為Spring框架的一些其他特征
JSF:很快地變得流行起來
Struts 2:正在獲得地盤,但是相關(guān)的工作機會很少
Tapestry:在過去的數(shù)年里,受歡迎程度不斷增加
Wicket和Stripes:還是未知數(shù)
通過以上的比較,我想大家對在自己的項目中應(yīng)該選擇哪種Web層框架,應(yīng)該有了更清醒的認識。
最后,Matt列出了一些相關(guān)資源,也供讀者參考。
Strutshttp://004km.cn
Spring IDE: http://004km.cn
Gaijin Studio: http://gaijin-studio.sf.net
Struts 2http://tapestry.apache.org
http://spindle.sourceforge.net
JSFhttp://appfuse.org
演講的最后,Matt以一句“If it works, use it!”作為結(jié)尾,可謂精辟!
通過此文,相信大家可以撥開當前Java Web層框架選用上的“迷霧”,見得“月明”了。