网站织梦宜宾 网站建设
web/
2025/10/8 20:04:58/
文章来源:
网站织梦,宜宾 网站建设,建数据库的网站多少钱,登陆网站怎么做web应用插件开发我们需要制作多个具有很多共享功能的基于Web的项目。 为此#xff0c;某种插件系统将是一个不错的选择#xff08;作为粘贴粘贴内容的替代方法#xff09;。 有些框架#xff08;例如grails#xff09;可以选择制作Web插件#xff0c;但大多数没有#x… web应用插件开发 我们需要制作多个具有很多共享功能的基于Web的项目。 为此某种插件系统将是一个不错的选择作为粘贴粘贴内容的替代方法。 有些框架例如grails可以选择制作Web插件但大多数没有因此需要实现定制的东西。 首先让我们定义所需的功能。 “插件” 应该通过通过maven / ivy导入简单地包括在内 如果使用了一个类则应在依赖项注入容器中注册所有类自动或通过单行配置 应该是垂直的–即包含所有文件从javascriptcss和模板到控制器再到服务层类 不需要需要在项目之间复制粘贴的复杂配置 应该允许容易的开发和调试而无需重新部署 将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 : (ListFileHeader) 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.htmlweb应用插件开发
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/89237.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!