什么是Tapestry?
歡迎來到Tapestry世界!
本文是一篇幫助人們使用Tapestry5來創(chuàng)建應用程序的指導文章。不論你是否會使用Tapestry4(或Tapestry3)或者你對Tapestry完全陌生,都不影響你閱讀此篇指南,事實上你對一般的互聯(lián)網(wǎng)程序開發(fā)知道的越少,Tapestry則對你是越好的選擇,因為你可以少學很多!
當然你還是需要知道以下一些知識:HTML、XML,基本的Java語言特性和一些新一點的東西如Java Annotations.
如果你是用servlets、JSP或Struts來開發(fā)互聯(lián)網(wǎng)應用程序的,或許你已對很多麻煩的事情習以為常了。或許你并沒有意識到你所處的可怕處境。這些環(huán)境沒有安全保障;Struts和Servlet API不知道你程序的架構(gòu)是如何的,不知道各個不同的塊是如何連接起來的。任何一個URL地址都可以是一個Action并且每個Action都可以前進到任何一個顯示頁面(通常是JSP頁面),這些顯示頁面會生成返回到客戶端瀏覽器的HTML頁面。作為一個開發(fā)者,你必須要做出一系列永無止盡的小而重要的決定(并且要與你的開發(fā)團隊進行協(xié)商),如actions、頁面、屬性等的命名規(guī)范、變量存放在HttpSession中還是存放在HttpServletRequest中等等,這些都是麻煩的事情。
傳統(tǒng)方式將很多你不想要的東西推向你:多線程編程。還記得以前學習面向?qū)ο缶幊蹋恳粋€對象可以定義為一組數(shù)據(jù)以及對這些數(shù)據(jù)進行操作的集合?當你開始互聯(lián)網(wǎng)編程后你就必須忘記這個課程,因為互聯(lián)網(wǎng)編程是多線程的。一個應用服務器可以處理來自單個用戶的幾十、上百個請求,每一個用戶都有自己的線程,而且每一個用戶都共享相同的對象。 突然,你發(fā)現(xiàn)不能在一個對象(一個servlet或一個struts Action)中存儲數(shù)據(jù),因為不論你為一個用戶存放什么數(shù)據(jù),它都會立馬被某個其他用戶的數(shù)據(jù)覆蓋。
更糟的是,你的每個對象都有一個方法:doGet()或doPost()。
期間你每天工作的大部分內(nèi)容是決定如何將你已經(jīng)存儲在java對象中的數(shù)據(jù)給打包然后把這些數(shù)據(jù)擠壓進一個URL地址的請求參數(shù)里,然后你得再寫些代碼把這些數(shù)據(jù)給轉(zhuǎn)換回來。同時要記得修改一大堆存儲在servlet容器或Struts框架中的XML文件,讓它們知道這些決定。
歡迎來到Tapestry世界!
本文是一篇幫助人們使用Tapestry5來創(chuàng)建應用程序的指導文章。不論你是否會使用Tapestry4(或Tapestry3)或者你對Tapestry完全陌生,都不影響你閱讀此篇指南,事實上你對一般的互聯(lián)網(wǎng)程序開發(fā)知道的越少,Tapestry則對你是越好的選擇,因為你可以少學很多!
當然你還是需要知道以下一些知識:HTML、XML,基本的Java語言特性和一些新一點的東西如Java Annotations.
如果你是用servlets、JSP或Struts來開發(fā)互聯(lián)網(wǎng)應用程序的,或許你已對很多麻煩的事情習以為常了。或許你并沒有意識到你所處的可怕處境。這些環(huán)境沒有安全保障;Struts和Servlet API不知道你程序的架構(gòu)是如何的,不知道各個不同的塊是如何連接起來的。任何一個URL地址都可以是一個Action并且每個Action都可以前進到任何一個顯示頁面(通常是JSP頁面),這些顯示頁面會生成返回到客戶端瀏覽器的HTML頁面。作為一個開發(fā)者,你必須要做出一系列永無止盡的小而重要的決定(并且要與你的開發(fā)團隊進行協(xié)商),如actions、頁面、屬性等的命名規(guī)范、變量存放在HttpSession中還是存放在HttpServletRequest中等等,這些都是麻煩的事情。
傳統(tǒng)方式將很多你不想要的東西推向你:多線程編程。還記得以前學習面向?qū)ο缶幊蹋恳粋€對象可以定義為一組數(shù)據(jù)以及對這些數(shù)據(jù)進行操作的集合?當你開始互聯(lián)網(wǎng)編程后你就必須忘記這個課程,因為互聯(lián)網(wǎng)編程是多線程的。一個應用服務器可以處理來自單個用戶的幾十、上百個請求,每一個用戶都有自己的線程,而且每一個用戶都共享相同的對象。 突然,你發(fā)現(xiàn)不能在一個對象(一個servlet或一個struts Action)中存儲數(shù)據(jù),因為不論你為一個用戶存放什么數(shù)據(jù),它都會立馬被某個其他用戶的數(shù)據(jù)覆蓋。
更糟的是,你的每個對象都有一個方法:doGet()或doPost()。
期間你每天工作的大部分內(nèi)容是決定如何將你已經(jīng)存儲在java對象中的數(shù)據(jù)給打包然后把這些數(shù)據(jù)擠壓進一個URL地址的請求參數(shù)里,然后你得再寫些代碼把這些數(shù)據(jù)給轉(zhuǎn)換回來。同時要記得修改一大堆存儲在servlet容器或Struts框架中的XML文件,讓它們知道這些決定。