ActFramework 1.8.32 發布 - 高質量的 Java Web 應用框架

2020-12-18 開源中國

1. ActFramework 1.8.32

ActFramework 是一款高質量的 Java Web 應用框架. 最新的 1.8.32 版本帶來了 20 項錯誤修復和更新. 其中值得關注的有:

1.1 通過 HTTP 訪問 CLI 命令 #1305

熟悉 Act 的用戶都知道在 Act 提供了大量的內置 CLI 命令, 也提供了非常方便的 CLI 命令創建機制. 如果需要在後端創建一個用戶, 只需寫出這樣的代碼即可:

@PropertySpec("id")@Command(name = "user.create", help = "create user")  public User create(          @Required("specify user email") String email,          @Required("specify user password") char[] password,          @Optional("specify user role") Role role  ) {    User user = findByEmail(email);    badRequestIf(null != user, "email[%s] registered already", email);    user = new User(email);    user.setPassword(password);    user.role = null == role ? Role.SUPER_USER : Role.RESTRICTED_USER;    return save(user);  }

使用這個命令則需要在後臺通過 telnet 或者 nc 等工具訪問伺服器的 CLI 服務埠:

這個機制非常方便但在開發時連結 CLI 服務埠會有個問題, 就是伺服器在代碼更新觸發熱加載的時候斷開 TCP 連結, 因此調試命令需要重新連上 CLI 服務埠, 有點小麻煩. 在 1.8.32 中我們帶來了方便的 CLI Over Http 服務機制, 讓開發人員在開發時通過 /~/cmd 來訪問命令:

這樣開發人員無需在後臺不停連結 CLI 埠即可隨時通過 HTTP 網頁來調試 CLI 命令.

1.2 增強 SampleData API, 允許在創建 List/Set 的時候指定創建 Mock 數據的數量 #1301

ActFramework 的 SampleData 提供了強大的 Mock 數據生成 API, 在這個版本中我們進一步增強了這個特性, 可以指定創建 Mock 數據的條目了.

示例代碼:

public static class User {    public String firstName;    public String lastName;    public String email;  }@GetAction("users/mock")public List<User> test() {    return SampleData.generateList(User.class, 7);  }

測試:

1.3 從瀏覽器直接訪問返回 Iterable 類型數據的端點, 自動以 HTML table 形式生成響應 #1298

這個增強的結果在上面已經顯示出來了. 以前的版本從瀏覽器訪問直接數據返回端點都是以 JSON 形式顯示結果的. 看官可能會提問題了, 如果我通過 ajax 形式訪問數據端點也會拿到 HTML table 形式的響應嗎? 答案是在 ajax 請求中設定好 Accept=application/json ActFramework 會以 JSON 形式發回數據的. 拿剛剛上面的例子來測試:

較真的看官可能又要問了, 如果我就想在瀏覽器中看 JSON 數據而不是 HTML table 數據怎麼辦. 這個也不是問題, 使用 _accept=json 請求參數即可:

1.4 HTML-Table 增強 - 表頭始終處於頁面頂部

1.5 IStorageService 對錯誤處理的增強 #1295

以前當 IStorageService 發生存儲項目未找到, 或者訪問受限的錯誤, 都會導致發出 500 伺服器錯響應. 現在 ActFramework 能更好地處理這些錯誤情況, 當發生資源未找到時, 會處理為 404 響應. 訪問受限會處理為 403 響應.

1.6 異步結果處理增強 - 使用最初指定的 Content-Type 來生成異步處理結果 #1286

在 ActFramework 中如果有工作是耗時較長的, 比如某些數據報表生成, 可以採用異步處理方式. 

示例代碼:

@Async  @ReportProgress  @GetAction("/users/async")  public List<User> simulateLongTimeOperation(ProgressGauge gauge) {    final int sz = 100;    List<User\> userList = new ArrayList<>(sz);    gauge.updateMaxHint(sz);    for (int i = 0; i < sz; ++i) {    $.sleep(50);    userList.add(SampleData.generate(User.class));    }    return userList;  }

訪問該接口:

以前的版本無論用那種請求類型訪問最後都只能看到上面的結果 - JSON 形式生成的響應. 在這個版本裡我們緩存了最初的請求響應類型, 並在最後生成結果響應的時候應用請求的響應類型. 下面是演示:

用 html-table 方式訪問 /users/async:

用 xlsx 方式訪問 /users/async:

2. Act-Beetl 1.7.2

更新 beetl 至 3.0.19.RELEASE

3. Act-BeetlSQL 1.8.2

更新 beetlsql 至 2.12.20.RELEASE

4. Act-Morphia 1.9.0

Act-morphia 是轉為 ActFramework 應用程式設計的 MongoDB 訪問庫. v1.9.0 帶來的改進有:

4.1 Dao.update API 改進:

下面的情況如果 firstName 為 null, 則會調用 mongodb 的 $unset 操作刪掉 firstName 欄位:

4.2 加載 Entity 的時候自動初始化集合類型欄位

假設你有下面的 Model 類型:

@Entity("emp")public class Employee extends MorphiaModel<Employee> {    public String firstName;    public String lastName;    public List<AuditRecord> auditRecords;}

從資料庫中 load 一個 Employee 實例, 假設該記錄沒有 auditRecords 數據, 以前該欄位會是 null, 現在則自動將 auditRecords 欄位設置為空 List. 這樣做的好處是避免對 auditRecord 欄位進行操作的時候還需要進行空值檢查.

5. Act-Excel 1.9.0, Act-Excel-java7 1.9.0

5.1 支持不同的輸出主題

示例代碼:

默認主題:

春意盎然:

五十度灰:

金秋:

5.2 提供幫助方法讓應用自己控制 Excel 文檔生成

群裡有人提出需要定時生成 Excel 文檔, 不希望還需要從 HTTP 走一遍, 於是將內部的邏輯抽取出來提供了下面的靜態方法方便程式設計師使用:

ExcelDirectRender.generateExcelFile(Object data, File targetFile);

6. OSGL-Tool 1.24.0 

osgl-tool 是一套 Java 工具庫, ActFramework 中大量使用了 osgl-tool 來簡化開發. v1.24.0 版本帶來一下改變:

6.1 UserAgent 使用 LFU Cache 來替代 HashMap #234

UserAgent 字串解析是一件耗時的工作. 因此我們總是希望將結果緩存下來. 以前的版本採用簡單的 HashMap 來緩存 UserAgent 解析結果. 這個速度當然很快,  然而帶來的麻煩是 UserAgent 的種類基本上是一個開發的數量, 根據 whatismybrowser 的統計, 有超過 2400 萬的不同的 UserAgent 字串. 隨著時間的推移, HashMap 的 UserAgent 緩存將吃光伺服器上的堆空間.

這個版本中我們使用了 LFU (最低訪問次數) 緩存來存儲 1000 個 UserAgent 解析結果, 這樣大多數常用的 UserAgent 會被緩存起來, 既滿足了性能的要求, 也不會對伺服器堆空間帶來長期的壓力.

6.2 Crypto 增加 RSA 方法 #233

在 Crypto 工具類上增加 RSA 的方法:

public static KeyPair generateKeyPair();public static KeyPair generateKeyPair(int keysize);public static String encryptRSA(String value, byte[] publicKey);public static String encryptRSA(String value, String urlSafeBase64EncodedPublicKey);public static String decryptRSA(String value, byte[] privateKey);public static String decryptRSA(String value, String urlSafeBase64EncodedPrivateKey);

6.3 UserAgent - 支持 Microsoft Edge #230

6.4 添加 S.acronym(CharSequence) 靜態方法

String a = S.acronym("OpenSourceGeneralLibrary"); // a = 'OSGL'

7. 總結

以上就是本次更新中值得關注的部分. 最後給自己的博客做一個友情連結, 請大家觀賞一下 如何用不到 70 行 Java 代碼擼一個簡單的文件上傳服務

相關焦點

  • Web應用程式開發的前5位Java框架
    Java於1996年1月23日發布,並在2020年慶祝了它的24周年。根據TIOBE指數,它一直排在第一位。在其24年的歷程中,Java已經證明自己是定製軟體開發的最高通用程式語言,134861個網站,如espn、Snapdeal、Alibaba等,使用Java作為他們的主要語言。
  • Go+iris吊打Java+SpringBoot,是Java老了嗎?且慢,Vert.x有話說
    Java界的性能擔當根本就不是Spring,只是因為國內用java的web框架主要是Spring,我們才拿它來測……本次我們就請出java界的性能擔當——Vert.x,跟Iris再比一次這次的結果會比較有說服力因為iris在官網自稱自己是
  • SSM框架-SpringMVC詳解
    xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  • MiniFramework 2.6.0 發布,PHP 開源框架
    MiniFramework 是一款遵循 Apache2 開源協議發布的,支持 MVC 和 RESTful 的超輕量級 PHP 開發框架,在滿足開發者最基礎的 MVC 分層開發、資料庫和緩存訪問等少量功能基礎上
  • Java 第一大框架:Spring 的 IoC 跟 AOP 雛形如何實現?
    SpringSpring make java more simple;Spring make java more modern;Spring make java more reactive;Spring make java more productive;Spring make java more cloud-ready。
  • 如何在Web應用中實現Velocity 與Struts2框架相互集成的應用實例
    軟體項目實訓及課程設計指導——如何在Web應用系統中實現Velocity 與Struts2框架相互集成的應用實例1、Struts 2應用框架提供對 Velocity 和 FreeMarker 模板引擎的支持在Struts 2應用框架中不僅繼續保留有對Velocity
  • 五大框架之SpringMVC
    在DispatcherServlet的初始化過程中,框架會在web應用的 WEB-INF文件夾下尋找名為[servlet-name]-servlet.xml 的配置文件,生成文件中定義的bean。四、Servlet攔截匹配規則可以自已定義,Servlet攔截哪種URL合適?
  • pacebox-springboot 1.1.5 發布,java 生態框架
    pacebox-springboot 融合封裝已發布,旨在提供快速開發腳手架、打造更好的開源生態環境。
  • SpringBoot:搭建第一個Web程序
    本文簡單介紹一下spingBoot搭建web程序的流程,希望對入門學習spingBoot的朋友有所幫助。本文採用的開發工具是IDEA。1、打開IDEA,創建項目。8、新建controller package包9、新建HomeController Java類文件,引入 @Controller 註解。
  • 如何應用Web頁面靜態化技術以提高J2EE Web應用系統的響應性能
    3、在Web應用系統的表示層開發中應用FreeMarker模板技術(1)FreeMarker模板是什麼、怎麼理解「模板引擎」的概念FreeMarker 和Velocity都屬於「模板引擎」(作者註:「模板引擎」在J2EE平臺中一般為框架形式的系統程序和相關的系統庫
  • JavaMelody v1.57.0 發布,系統監控工具
    JavaMelody v1.57.0 發布,此版本更新內容如下:fix: check if async before flushing the response (ee87b4b
  • 2020 年最棒的 9 個 Java 框架,哪個最香?
    來自:實驗樓 | 責編:樂樂  連結:medium.com/@patricianeil248/9-top-java-frameworks-for-2020-1cc9d3c21f4c?及時的更新和新版本發布使 Java 保持著活躍和競爭力。當然,僅為你的下一個 Web 應用開發選擇 Java 是不夠的,你還要選擇正確的 Java Web 框架。無疑,這並不容易,你需要深入了解這些 java 框架的利弊,然後為企業或項目開發選擇一個最合適的。下面,就讓我們詳細探討一下 2020 年的頂級 Java 框架。  1:Spring
  • 2020 Rust Web框架大比拼
    需要有開發者手動自定義構建API,並需要引入所需的功能庫,自己處理圖片樣式等;rocket則更接近於Python的Django或PHP的Symphony框架:擁有一個穩定而強大的核心,附帶一組高質量組件,可滿足構建堅固的Web應用程式時的日常需求。rocket要在寬度和範圍上與同行匹敵,還有很長的路要走,但這絕對是一個良好的開端。
  • 五款優秀Web應用開發的Java框架
    從1996年1月23日的首發到現在,Java已經走過了24個年頭了。根據TIOBE指數(譯者註:該排行榜是根據網際網路上有經驗的程式設計師、課程和第三方廠商的數量,使用搜尋引擎統計出各類排名)的顯示:Java持續排名第一。Java已證明了自己配得上用於定製軟體開發的優秀通用程式語言。
  • 如何應用EhCache緩存框架提高J2EE Web應用系統持久層的響應性能
    軟體項目實訓及課程設計指導——如何應用EhCache緩存框架提高應用系統持久層響應性能1、在Web應用系統中應用持久層相關的緩存框架在Java應用程式開發實現和J2EE Web應用系統的設計和開發實現中,軟體應用系統的設計和開發實現人員可以在系統的表示層和系統的持久層中充分地應用緩存機制和相應實現技術能夠大大地提高
  • 6 大主流 Web前端框架優缺點對比
    當我們開始寫這個系列博客的時候,我們知道 JavaScript/web 應用框架並不太好總結。我們努力對這個不可回答的問題作出回答:我該用什麼樣的框架?在這篇文章中,我們將對這個系列中所提到的每款框架做一個總結,包括我們所認為的強項和弱項。另外,我們為你留下了一些值得思考的問題。我是否需要使用框架?