本來想寫成讀書筆記的,結果還是變成翻譯,謹作記錄,學習。
1.HTML -- 見我前面文章
2.Internet 了解 http 請求和響應的循環 --- 見我前面文章
3.java
Reflection 和 Introspection
反射和內省
內省(IntroSpector)是Java語言對JavaBean 類屬性、事件的一種缺省處理方法。
例如類A中有屬性name, 那我們可以通過getName,setName 來得到其值或者設置新的值。
通過getName/setName 來訪問name屬性,這就是默認的規則。
Java中提供了一套API 用來訪問某個屬性的getter/setter方法,通過這些API 可以使你不需要了解這個規則,這些API存放于包java.beans 中。
一般的做法是通過類Introspector的getBeanInfo方法獲取某個對象的BeanInfo 信息,然后通過BeanInfo來獲取屬性的描述器(PropertyDescriptor),通過這個屬性描述器就可以獲取某個屬性對應的getter/setter方法,然后我們就可以通過反射機制來調用這些方法。
反射是一個決定在一個對象中什么成員域和方法是可用的。而內省是一種特殊的反射,它被用在JavaBean Api中。
Struct 使用內省來轉換HTTP參數為javaBean 特性并且從javaBean中產生HTML字段。
Properties Files and ResourceBundles
java程序包括網絡程序,常常需要配置Properties文件。
Java ResourceBundles 使用更多的Properties文件來提供國際化的信息。
ResourceBundles介紹:
JavaScript, AJAX, and SOAP
JavaScript AJAX 都是一些還不錯的前端技術
SOAP可以平衡請求/響應循環。使用它,一個應用可以訪問數據,處理業務邏輯。SOAP和AJAX應該有很好的結合。
SOAP:?https://en.wikipedia.org/wiki/SOAP 一個特殊的應用層協議。是工作在HTTP或者SMTP之上的協議,使用XML來表示信息。
Servlets, Filters, and Web Containers
因為java是面向對象的語言,java Servlet 用來將http轉為面向對象的形式。這樣讓開發者可以專注于它們應用開發需要的事情。
一個java-aware http server 可以傳遞一個請求到一個servlet 容器,這個容器可以實現請求或者它可以將請求傳回給HTTP服務器。容器通過查找他的servlet列表來決定是否可以處理請求。如果有servlet是為這個請求注冊的,就傳遞這個請求到servlet。
容器需要管理servlet的生命周期,容器創造,調用,并且最終有servlet。
Filters 讓你組裝一系列的組件來 處理一個請求或者回應。過濾器集中在一個鏈上,這樣每一個過濾器都有機會處理請求或者回應。
來 寫下我目前的理解:servlet是在container的,container接收到請求后,通過注冊列表來確定是否有對應的servlet可以處理,而servlet可以對請求進行處理。最后就是過濾器,過濾器可以在處理請求過程中對它們做一些處理,但是不太清楚和servlet 的差別。過濾器可以有多個,而servlet 只能有一個。感覺入侵性更小些。
Sessions
HTTP一個很重要的特點是無狀態的。這樣是沒有機制來分辨HTTP是一個同一個用戶的下一個請求。這樣讓想要構建一個應用可以和用戶對話有多個請求有些困難。
為此,servlet API通過了一個編程的概念,叫做 session,表示一個對象實現了 javax.servlet.http.HttpSession 接口
containter 會使用兩個技術之一(cookies 或者 URL重寫)來保證同一個用戶的下一個請求將會包括session id 對這次會話來說,這樣這個狀態信息將會保存在session中和多個請求關聯。狀態信息將會保存在session 屬性( session attributes,在JSP中叫做:session scope beans)
為了防止當用戶不能完成一次交互時無期限的占用資源,session配置了超時時間。如果兩個請求時間間隔超過了超時時間,這個session就會被刪除。
知道Session 數據常常保存在RAM內存是很重要的。取決于你的容器,你也許有不同的方式來避過它。
Web Applications
網頁應用,就像一個HTTP服務器可以被用來作為不同的網頁的主機,一個servlet容器也可以用來包含多個網站應用。Java Servlet 平臺提供一個很好定義的機制用來組織并且部署網頁應用。一個應用可以被組裝稱為一個 Web Application Archive, 或者 WAR file。單個war可以被上傳,并且自動部署。
你需要知道你怎么產生一個war文件,并且如何部署。也許需要一些構建工具的知識,比如:Maven:http://maven.apache.org/ 以及一些你服務器容器的閱讀文檔。
Security
在應用程序部署描述符中可以配置的是 容器管理安全。聲明安全可以用來保護請求的URI要滿足一定的模式。實用安全可以根據當天的時間,調用的參數,或者這個應用的組件的狀態用來微調安全作授權決定。它也可以被用來限制授權根據數據庫中的信息。
有一些項目,比如Apache Shiro 或者 Spring Security 可以幫助你保護你的應用。
JavaServer Pages, JSP Tag Libraries, and JavaServer Faces
如果你需要編寫一個標準的網頁應用,你也許需要一個視圖組件。一種就是JSP。http://www.oracle.com/technetwork/java/javaee/jsp/index.html
或者也可以是Velocity 或者 Freemarker,都是structs 支持的。
所有相同的是你要從編寫HTML開始同時增加動態的特性使用JSP標簽。不太推薦在JSP中使用java。JSTL和 Unified expression language 是推薦的。
http://www.oracle.com/technetwork/java/index-jsp-135995.html這也就是說,你可以輕松的從你的視圖來訪問你的數據并且合適的展示它。如果你想要使用一個更加現代的方式,也許你會喜歡返回json,通常用來給AJAX作為展示頁面。
提到了一些前端的技術,我也還是列出來吧,如果也許我會去看了:
Extensible Markup Language (XML)
可擴展標記語言
這個框架提供的特性常常依賴于很多的對象,那些對象又的時候是通過一個由xml編寫的配置文件來部署的。XML同樣也可以部署java 應用程序。
幸運的是 Struct2將對XML的需求降低到0,如果你需要使用到它,可以查看: Convention plugin.
?
Model View Controller (MVC)
基于JSP的網頁應用有時會混合數據庫代碼,頁面設計代碼,流程控制代碼。實踐中,我們發現除非這些被分離,否則大型的應用會很難被維護。使用MVC架構可以分離這些問題。Model代表業務或者數據庫代碼。View代表頁面設計代碼,Controller代表導航的代碼。
MVC這個單詞來源于 SmallTalk Model-View-Controller 框架。在SmallTalk MVC中,View根據Model來更新通過觀察中模式。原始的MVC模式就像一個封閉的循環,View和Controller 交談,Controller和Model交談,Model和View 交談。
但是模式和頁面的直接聯系對于網頁應用并不實際,我們修改傳統的MVC模式讓他看起來少點像一個循環,而更像Controller是在中間的地位。
在MVC/Model2設計模式中,應用流是通過一個中心的控制器調解的。這個控制器委托請求到一個合適的handler中。這個handler和一個模式綁定,然后每一個handler扮演一個請求和model之間的適配器。Model代表或者扮演一個應用的商業邏輯或者狀態。通常控制會通過Controller傳回給合適的頁面。流向可以通過咨詢一系列的mapping通常是從數據庫或者配置文件載入的來確定流向。這個提供一個視圖和模型之間很寬松的連接,可以使應用便于維護和創造。
由于MVC是一個便利的范式,很多工作者發現這個也許還有大于三層。比如,在Model層中,常常有獨立的業務邏輯層和數據訪問層。
這個框架提供控制層給Model2 網頁應用。開發者常常使用這一層和其他的標準的技術來構建業務,數據和永久層。
更多關于MVC的事情可以查看:
Business Logic Frameworks
商業邏輯框架
很多團隊在POJOs(plain old JavaBeans )構建它們自己的商業邏輯層。所以商業層框架開始出現,包括:- Spring
- Google Guice
- Commons Chain of Responsiblity
- or you can rely on features of the bundled Struts XWork
Data Access Frameworks
數據訪問框架
大多數時候,業務層和數據訪問層分離,有的團隊會開發它們自己的數據訪問對象,但是很多的團隊轉向使用下面的數據訪問框架。一些流行的數據訪問框架如下:
- Apache Cayenne
- Enterprise Java Beans
- Hibernate
- myBATIS —— 這個看起來就是我用的。
浙公網安備 33010602011771號