内部部署的EAR

时间:2016-09-06 18:45:41

标签: weblogic atg

您可以使用<virtual-directory-mapping>引用已部署的EAR中的静态内容吗?它会提供任何好处吗?

免责声明:理想情况下,静态资源(如字体,javascript和css)应由网络服务器而非应用程序容器提供。

有关SO的一些关于Weblogic中<virtual-directory-mapping>的文章。它也有详细记录herehere

我的应用程序部署在以下位置:

c:\weblogic\deploy\ACME.ear

ACME.ear内,CSSFontsJS

存在以下文件夹结构
store.war\include\js\script.js
store.war\include\js\function.js
store.war\include\fonts\font.woff
store.war\include\fonts\font.woff2
store.war\include\css\css-output\ie.css
store.war\include\css\css-output\interactive\large.css
store.war\include\css\css-output\interactive\small.css

我的上下文根被指定为/store

在正常操作中,我可以访问网站中的script.js,如下所示:

http://www.acme.com/store/include/js/script.js

然后,此请求将通过我的应用程序请求管道传递。我想要实现的是简单地将/include/文件夹的内容作为静态文档提供在.war内,而不必通过整个请求管道(在我的案例中为ATG)。

我已将以下行添加到weblogic.xml

<virtual-directory-mapping>
    <local-path>C:/weblogic/deploy/ACME.ear/store.war/include</local-path>
    <url-pattern>/include/css/*</url-pattern>
    <url-pattern>/include/fonts/*</url-pattern>
    <url-pattern>/include/js/*</url-pattern>
    <url-pattern>/include/lib/*</url-pattern>
</virtual-directory-mapping>    

希望这样做,而不是通过整个管道传递请求,只需将其渲染为静态资源。

根据文档,在尝试从容器文档根目录渲染之前,它将首先尝试通过<virtual-directory-mapping>进行渲染。

即使使用上述配置,/include/文件夹中的静态内容仍由容器呈现,而不是通过Weblogic作为静态资源呈现。我有以下问题:

  1. 这甚至是一种有效的方法吗?即使静态资产存在于.war中,我是否可以使用上述配置将其呈现为“外部”静态资产?
  2. <url-pattern>是否应包含context-root<local-path>是否应包含context-root? (我尝试了包括和排除但无效的各种组合)
  3. 如何使用<url-pattern>访问文件夹和子文件夹中的文件。我是否需要指定每个子文件夹?

1 个答案:

答案 0 :(得分:0)

上面的<virtual-mapping-directory>配置不正确。因为它不正确,Weblogic将尝试在该文件夹中找到内容,如果不这样做,请恢复为从默认doc-root提供内容。正确的配置是:

<virtual-directory-mapping>
    <local-path>C:/weblogic/deploy/ACME.ear/store.war</local-path>
    <url-pattern>/include/*</url-pattern>
    <url-pattern>*.js</url-pattern>
    <url-pattern>*.css</url-pattern>
    <url-pattern>*.woff</url-pattern>
</virtual-directory-mapping>

重要的是要注意必须存在一个名为:

的文件夹
C:/weblogic/deploy/ACME.ear/store.war/include

以便将其作为虚拟目录找到。

如果它能提供任何实际的运行时间好处,那么它仍然没有成功。