親兒子,Spring是私生子=p
與Spring一樣採用MVC架構,Java EE是Java平台企業版(Java Platform Enterprise Edition),之前稱為Java 2 Platform, Enterprise Edition (J2EE),2018年3月更名為Jakarta EE
Jakarta EE
Six Stages of JSF life cycle
- Restore Phase of view
- Process events: Apply step of request values
- Process events: Step of process validation
- Process events: Step update of model values
- IProcess events: Invoke step of application
- Render response step
Jakarta EE Annotations
javax.persistence.Entity;
1 | @Entity @Table @Id @Persistence |
@Inject
具有更廣泛的適用性和更標準的依賴注入機制,因此在現代的 Jakarta EE 應用程序中被更多地使用。但在處理傳統的 EJB 時,@EJB
仍可能是必需的選擇。
Framework
- JSF: Primefaces
- CDI(Dependency Injection @Inject):WeId
- Managed Beans
- EJB(Business Services)
- JAX-RS(REST): Jersey
- JAS-WS(SOAP: web service交換帶結構的資訊)
- JPA: Eclipselink
[Controller && View] 6 Presentation Layer
技術標準: JAX-RS: 各家可以實作RESful API 的解決方案
XHTML: 繼承HTML並融合XML的嚴謹
JavaFX
Oracle官方UI框架, awt, swing 後繼, java 8後內建於jdk, 要取代swing, 建構行動與桌面UI
AWT>swing> JavaFXPrimeFaces
基於JSF建構企業網頁UI, 可以想成java版的jQuery, 但PrimeFaces在伺服器運行, 通過JSF生成HTML
PrimeFaces bottom update連到另一個xhtml panelGroup id
PF(‘xxx’).show() 中 PF 是PrimeFaces 元件的選擇器
- JSF(JavaServer Faces)
Java EE的MVC web框架,定義標準UI與提供API, 用Ajax實現無頁面刷新, 良好支援Spring, Hibernate之類的其他標準,用”action”呼叫controller, p:commandButton的update跳轉到下個xhtml的p:pannelGroup id
core: JSF 驗證與轉換Tag
html: HTML Tag
facelets: 頁面區塊使用
main/resources/A.properties
app.title=標題main/webapp/jsff/B.xhtml
’#{A[‘app.title’]}‘
Faces Servlet
JSF 框架的一部分,用來處理頁面請求JSP(JavaServer Pages)
靜態網頁渲染, 不像JSF要求MVC, 可以隨意加入Java程式, 與JSF可合併使用, 或說JSP可以被包含在JSF
- Intercepting Filter Pattern - 分類與轉送不同需求到適當元件, 用於認證、日誌記錄等。
- Front Controller Pattern - 所有請求的單一處理程序。用於中心化的請求處理/路由。
- View Helper Pattern - 封裝視圖渲染邏輯。提高重用性和分離關注點。
- Composite View Pattern - 從多個源中合併數據到一個視圖中。
Model = Domain Model + Data Access Layer
[Domain Model] Business Layer
負責業務邏輯和處理,實現系統的核心功能, Spring只實現部份Java EE與新增其他新功能。
技術標準:EJB(Enterpise JavaBean)
一種伺服器規範, 在JavaEE規範下完成訪問後端資料庫與安全, 部屬等事務
技術標準:CDI(Contexts and Dependency Injection)
標準化依賴注入,開發者不會再深陷於特定廠商@Annotation
- Payara: 支持EJB的開源應用
- Business Delegate Pattern - 處理分層的互動。解耦 6表現層和 5業務(會話)層。
- Service Locator Pattern - 根據需要傳回服務實例。
- Session Facade Pattern - 提供業務服務的簡化和統一視圖。屏蔽客户端的複雜性。
- Transfer Object Pattern - 在層間傳輸的聚合數據。減少遠程調用。
[Data Access Layer] Persistence Layer/Integration Layer
技術標準:JTA(Java Transaction API)
Java管理事務的規範, Java EE自帶JTA, 方便管理事務
技術標準:JNDI(Java Naming and Directory Interface)
為應用中對象命名, 提供API讓EJB透過它查找目錄, 廣泛應用於J2EE, Spring框架獲取配置信息, 資源查找, 服務訪問等, 但也存在Log4j2中的JNDI注入漏洞
- JPA(Java Persistence API, javax.persistence): 5業務與 2資料層
Java物件和關聯式資料庫之間儲存資料, 有整個Java生態系, 但發展放緩, 只是個規範, 實現的ORM(Object-Relational Mapping)框架有開源的EclipseLink, Spring 中的Hibernate,Spring Data JPA簡化JPA開發的框架,不implemention接口的情況下, 直接對資料庫做CRUD,底層使用了Hibernate
- JPL(Jakarta Persistence Layer, jakarta.persistence)
JPL持續發展, 但較不成熟
Java持久化查詢語言,是JPA中使用的面向對象的查詢語言,語法可類似SQL, 但其查詢資料源是持久化物件(Entity)而非資料庫本身
implements Serializable 為了在不同JVM共享物件
Marven中位於/src/main/resources/META-INF/persistence.xml
- Data Access Object Pattern - 持久化使用抽象API, 隔離 7應用, 5業務層
- Web Service Broker Pattern - 使用XML, web協定讓不同服務交流
OSI Model
Steps to load class
- Application Class Loader
- Extension Class Loader
- BootStrap Class Loader
pdfBox
創建、解析和操作PDF的Java庫
* 加載pdf PDDocument.load()
* 取得頁面 PDPageTree
* 取得頁面字, 圖 PDResources
* 取文本 PDFTextStripper
* 取得頁面 PDDocument.getPages()
* 取得關鍵字 PDDocumentInformation
* 插入 PDPageContentStream
* 儲存 PDDocument.save()或PDDocument.saveIncremental()
如果你覺得這篇文章很棒,請你不吝點讚 (゚∀゚)