日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

web应用插件开发_Web应用程序的简单插件系统

發布時間:2023/12/3 windows 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 web应用插件开发_Web应用程序的简单插件系统 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

web應用插件開發

我們需要制作多個具有很多共享功能的基于Web的項目。 為此,某種插件系統將是一個不錯的選擇(作為粘貼粘貼內容的替代方法)。 有些框架(例如grails)可以選擇制作Web插件,但大多數沒有,因此需要實現定制的東西。

首先,讓我們定義所需的功能。 “插件”:

  • 應該通過通過maven / ivy導入簡單地包括在內
  • 如果使用了一個類,則應在依賴項注入容器中注冊所有類(自動或通過單行配置)
  • 應該是垂直的–即包含所有文件,從javascript,css和模板到控制器,再到服務層類
  • 不需要需要在項目之間復制粘貼的復雜配置
  • 應該允許容易的開發和調試而無需重新部署

將Java類放入jar文件中,然后添加到lib目錄中,因此也添加到了類路徑中,這是簡單的部分。 但是我們需要將Web資源提取到各個位置,其余的代碼可以在這些位置使用它們。 可以使用三種通用方法:構建時提取,運行時提取和從類路徑加載運行時。

最后一種方法將需要一個控制器(或servlet),該控制器從類路徑(相應的jar)中加載資源,對其進行緩存并提供服務。 這有兩個明顯的缺點,其中之一就是放在罐子里,在開發過程中不容易更換它們。 使用類路徑資源也很棘手,因為您事先不知道文件名。

其他兩種方法非常相似。 例如,Grails使用構建時提取–插件是一個zip文件,其中包含所有必需的資源,并且在構建項目時將它們提取到各自的位置。 很好,但是需要更多的配置(在我們的例子中是Maven),可能還需要在項目之間復制。

因此,我們選擇了運行時提取方法。 它在啟動時發生–加載應用程序時,某種啟動偵聽器(在我們的示例中為帶有@PostConstruct的spring組件)會遍歷lib文件夾中的所有jar文件,并從特定文件夾中提取文件(例如,“ web ”)。 因此,jar文件的結構如下所示:

comcompanypkgFoo.classBar.class webplugin-namecssmain.cssjsfoo.jsbar.jsimageslogo.pngviewsfoo.jspbar.jsp

最終結果是在啟動應用程序后,您可以從應用程序訪問所有必需的Web資源,因此可以將它們包含在主應用程序的頁面(視圖)中。

而且提取的代碼非常簡單(將zip4j用于zip部分)。 這可以是servlet上下文偵聽器,而不是spring bean –沒什么區別。

/*** Component that locates modules (in the form of jar files) and extracts their web elements, if any, on startup** @author Bozhidar*/ @Component public class ModuleExtractor {private static final Logger logger = LoggerFactory.getLogger(ModuleExtractor.class);@Injectprivate ServletContext ctx;@SuppressWarnings("unchecked")@PostConstructpublic void init() {File lib = new File(ctx.getRealPath("/WEB-INF/lib"));File[] jars = lib.listFiles();String targetPath = ctx.getRealPath("/");String viewPath = "/WEB-INF/views"; //that can be made configurablefor (File jar : jars) {try {ZipFile file = new ZipFile(jar);for (FileHeader header : (List<FileHeader>) file.getFileHeaders()) {if (header.getFileName().startsWith("web/") && !fileExists(header)) {// extract views in WEB-INF (inaccessible to the outside world)// all other files are extracted in the root of the applicationif (header.getFileName().contains("/views/")) {file.extractFile(header, targetPath + viewPath);} else {file.extractFile(header, targetPath);}}}} catch (ZipException ex) {logger.warn("Error opening jar file and looking for a web-module in: " + jar, ex);}}}private boolean fileExists(FileHeader header) {return new File(ctx.getRealPath(header.getFileName())).exists();} }

因此,為了制作插件,您只需制作一個帶有jar包裝的Maven項目,并將其作為依賴項添加到您的主項目中,其他所有工作都將得到處理。 如果未啟用對bean的類路徑掃描(或選擇使其成為偵聽器),則可能需要注冊ModuleExtractor 。

注意:此解決方案并非旨在成為能夠解決所有問題的功能齊全的插件系統。 它不支持版本控制,子模塊等。這就是標題為何“簡單”的原因。 但是您可以用它做很多事情,而且它的復雜性非常低。

參考: Bozho的技術博客博客中的JCG合作伙伴 Bozhidar Bozhanov的 Web應用程序簡單插件系統 。

翻譯自: https://www.javacodegeeks.com/2013/08/a-simple-plugin-system-for-web-applications.html

web應用插件開發

總結

以上是生活随笔為你收集整理的web应用插件开发_Web应用程序的简单插件系统的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。