【问题标题】:Webjars not reachable on Weblogic Server在 Weblogic Server 上无法访问 Webjar
【发布时间】:2017-09-06 09:07:02
【问题描述】:

我应该怎么做才能从 Weblogic Server 上的 Angular 应用程序访问 Webjar?

我收到了基本的临时项目,它在 Tomcat 上运行,但在 Weblogic 上却不能正常工作。经过一些修改,我能够部署应用程序,但我无法正常运行它。 webjars 仍然不可见。更何况我还发现,对于Weblogic 12C,我应该在Gradle使用这个依赖:

compile 'org.webjars:webjars-locator-weblogic:0.9'

但在那之后,我无法部署应用程序,因为我收到错误“URI 不是分层的”。如果没有这种依赖关系,我可以部署应用程序并查看index.html,但它指向其他js 文件,如下所示:

<script data-main="js/configImport" src="webjars/requirejs/require.min.js"></script>

其中包含类似这样的内容:

require.config({

    map: {
        '*': {
            'css': 'webjars/require-css/css'
        }
    },

    paths: {
        'angular': 'webjars/angularjs/angular.min',
        'myApp': 'js/app',
        'cssCore': 'js/cssCore'
    },

    shim: {
        'angular': {exports: 'angular'},
    },

    baseUrl: '.'
});

require(['angular', 'myApp', 'cssCore', 'js/controllers/MainCtrl'], function (angular) {
    angular.bootstrap(document, ['myApp']);
});

我也尝试将此行添加到servlet.xml 文件:

<mvc:resources mapping="/webjars/**" location="classpath:/META-INF/resources/webjars/"/>

但没有成功。

所有的 webjars 都由Gradle 添加为依赖项。 spring-bootwebjars-locator 处于编译级别,其余的类似于 angularjs 在运行时级别。

我错过了什么?在这种情况下我应该怎么做才能让它发挥作用?

更新:

我正在使用webjars-locator-weblogic 从部署中添加stack trace。问题是我是否需要同时输入:webjars-locatorwebjars-locator-weblogic 还是只需要 weblogic 版本? 我尝试了这两种情况,在这两种情况下我都遇到了同样的错误。我试图通过添加WebConfig 类来解决这个问题,就像它完成的here 一样,甚至在Main 类中添加代码,就像它在同一个链接下但在主题Enhanced support for RequireJS 下完成的一样。不幸的是,它对我不起作用。我仍然无法访问 webjars。

【问题讨论】:

  • 为什么是 xml 文件?看起来部署到 tomcat 的应用程序的启动方式与 weblogic 上的应用程序不同,导致配置不同。
  • @M.Deinum 原始应用程序适用于 Tomcat。为了在 Weblogic 上部署它,我提供了一些更改。我已将servletservlet-mapping 添加到web.xml 以访问资源,由于某些原因,没有它就无法工作。所以它还需要servlet.xml 文件。最初它只是带有&lt;beans&gt; 的空文件,但我发现了这个&lt;mvc:resouces&gt;,所以我认为应该将它添加到那里以使其工作。问题是我应该怎么做才能在 Weblogic 上正确运行它?我不在乎 Tomcat...
  • 您不应该需要/拥有带有 Spring Boot 的 xml 文件...所以我将还原这些更改并按照此处的 Spring Boot 参考指南中所述进行操作 docs.spring.io/spring-boot/docs/current/reference/htmlsingle/…
  • 好吧,但它并没有改变任何东西......仍然是 webjars 无法访问的相同问题。
  • 你添加了webjars-locator-weblogic 依赖吗?

标签: angularjs spring-boot gradle weblogic12c webjars


【解决方案1】:

不知道您是否已经开始使用它,但对我来说使用 weblogic 12.2.1.3 的方法是:

<mvc:resources mapping="/webjars/**" location="classpath:META-INF/resources/webjars/"/>

然后所有 js/css 都被正确解析。 示例:&lt;script type="text/javascript" src="/app-name/webjars/angular/1.6.6/angular.js"&gt;&lt;/script&gt;

另一方面,我使用的是“标准”弹簧,而不是引导。不过应该没什么区别。 Webjar 被打包在 war 中(在 WEB-INF\lib 中),而其余的依赖项(spring、aspectj、其他应用程序模块等)被打包在 ear 包中。 构建归结为包含以下内容的 ear 包:

  • 所有项目依赖项(在 /lib 文件夹中)
  • war 文件仅包含 webapp 和 (WEB-INF\lib) 中的 webjars

我无法使用 weblogic 的是与版本无关的定位器。已尝试使用标准 webjars-locator 和 webjars-locator-weblogic,但没有成功。

[编辑] 附带说明一下,当我错误地将 webjar 依赖项放在 ear 模块而不是 war 模块上时,我确实遇到了同样的错误(URI 不是分层的)。 在将它们置于战争中之后,我发现 weblogic 对 servlet 映射相当“敏感”。我有标准的servlet映射模式到root(就像我通常在其他服务器上一样),这在某种程度上弄乱了剩余的映射(包括webjars)。最后,我必须指定一个 url 模式,然后由 Spring 单独处理。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 2014-04-27
    • 2012-04-10
    • 1970-01-01
    相关资源
    最近更新 更多