9

我正在尝试编写一个 webapp,其中服务器端仅提供 json/REST 服务,并且 gui 使用异步 XHR 以 html5、主干、木偶等编写。html、js、css 等是静态且可缓存的(部署到生产环境时)。

我需要将它部署到 JBoss EAP6(对于这个问题,大致相当于 AS7)。在开发过程中,我希望能够编辑我的 javascript 和 html 模板,并让结果立即在浏览器中可见。在生产中,我需要分解我的静态内容(前端),而不是部署在任何类型的 Java EE 结构中(因此,没有战争或耳朵(或 sar))。

所以,基本上,我需要像往常一样将战争部署到 jboss,并且我还需要 jboss 作为应用程序静态部分的 http 服务器。

我曾想过将我的内容复制到welcome-contentEAP6 根目录中的目录中。虽然这可以毫无问题地提供内容,但我无法使用这种结构进行开发,因为我无法忍受将更改复制到不同目录的时间开销。我还在welcome-content开发环境中尝试了从静态内容到我的静态内容的符号链接,但这在这个版本的 jboss 中不起作用。

编辑:我有答案告诉我如何解决这个问题,但我并没有真正陷入解决方法——这很容易。我真的在专门寻找如何配置 jboss 来提供静态内容。

TIA。

4

3 回答 3

0

可以像往常一样部署静态 html/css/js,并使用工具为您实时将更改注入 DOM。我现在正在使用grunt-contrib-watch使用 GruntJS 执行此操作,并且效果很好。

于 2014-02-26T21:36:12.070 回答
0

JBoss EAP 7.x 的更新


为了补充 Zach Lysobey 的回答,JBoss EAP 7.x 让 Undertow 强调了 https/2 服务器。因此,它具有自己的属性,并具有以下基本属性:

<subsystem xmlns="urn:jboss:domain:undertow:1.0">
        <buffer-caches>
            <buffer-cache name="default" buffer-size="1024" buffers-per-region="1024" max-regions="10"/>
        </buffer-caches>
        <server name="default-server">
            <http-listener name="default" socket-binding="http" />
            <host name="default-host" alias="localhost">
                <location name="/" handler="welcome-content" />
            </host>
        </server>
        <servlet-container name="default" default-buffer-cache="default" stack-trace-on-error="local-only" >
            <jsp-config/>
            <persistent-sessions/>
        </servlet-container>
        <handlers>
            <file name="welcome-content" path="${jboss.home.dir}/welcome-content" directory-listing="true"/>
        </handlers>
    </subsystem>

参考:Undertow.io

命令行命令

因此,您可以使用 CLI 命令和 subsystem=undertow 更改属性:

/subsystem=undertow/server=default-server/http-listener=default:write-attribute(name=url-charset,value="utf-8")

Undertow 中的静态内容

This other question描述了类似的情况,官方文档描述了用于提供静态文件的文件处理程序。

用于创建文件处理程序的 Cli 命令:

/subsystem=undertow/configuration=handler/file=new-file-handler:add(path="${jboss.home.dir}/welcome-content")
于 2019-08-31T04:30:34.107 回答
-1

更新
TL;DR 我认为最初的问题在被问到 5 年多之后现在早就解决了。如果有人真的坚持使用 JBoss 作为静态文件 web 服务器,那么问题中提到的解决方案就是解决方案 - 使用welcome-content目录。使用 EAP6,您必须从 RedHat 获得有效的付费订阅才能在生产中使用它,并且他们的知识库确实提供了相同的答案
由于它不再是 2013 年,因此复制一堆静态文件确实不应该成为问题,并且大多数 IDE 可以很好地处理这个问题(仅复制更改的文件等)。
对于从谷歌来到这里的其他人,恕我直言,为这项工作指出正确的工具并分离后端和前端部署更有益(顺便说一句,Nginx 早在 2013 年之前就已经可用,而 Apache 一直在这里,好吧,从永远 :) ) .

尽管可以通过 JBoss 托管您的静态 Web 资产,但使用 Java Web 服务器是一种相当低效的方法。由于您的前端与您的 java 后端完全分离,为什么不将其部署到专用的 Web 服务器 - 例如 Nginx 或 Apache,这将大大提高效率并适合提供静态内容。(或者如果是带有 Undertow 的专用 Wildfly你必须)

您没有指定,如果您只有一个 JBoss 实例或更复杂的部署,但是像您这样的用例的一个常见场景是这样的:

 [Nginx server:80]           <-->      [JBoss server:8080]
    - location / {                        |- your-backend.war
        root /path/to/frontend              (web context /myapp/api)
      }
    - location /api {
         proxy_pass http://backend
      }

前往Nginx 文档了解更多信息。

使用专用 Web 服务器的优点:

  • 您可以同时将其用作负载均衡器,只需添加更多 Jboss 实例,更新上游配置,您就拥有可扩展的后端,是的
  • 部署前端只是将静态文件复制到相应文件夹 - 无需重新启动,您可以配置路径以适合您的文件夹结构。
  • Nginx(或配置良好的 Apache)可以轻松处理极端负载,它使用事件机制而不是线程,+ 你可以摆弄缓存策略等
  • 您可以从提供静态 Web 资产的开销中减轻您的 Java Web 服务器,并且您可以调整它以使其最擅长 - 为您的 Java Web 服务提供服务
  • 您可以使用不同的主机名部署多个 Web 前端或多个项目,因此您可以在同一物理服务器上托管应用程序的开发和测试版本,并将它们绑定到例如https://dev.myapp.comhttps:// test.myapp.com
  • 您可以使用 Web 服务器进行 SSL 卸载 - 再次将您的 JBoss 应用服务器从 SSL 处理的负担中解脱出来。
于 2018-04-01T07:15:11.947 回答