【问题标题】:How to use Google App Engine with Webjars?如何将 Google App Engine 与 Webjar 一起使用?
【发布时间】:2013-10-27 14:57:52
【问题描述】:

我有一个 Google App Engine (1.8.5) 项目。我想通过Webjars 提供静态 Javascript 和 CSS。但是,我不断收到HTTP 404 错误。如何使我的 Webjars 文件可访问?

我的 src/main/webapp/WEB-INF/appengine-web.xml 来自 Google 的 documentation

<appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
    ...
    <static-files>
        <include path="/resources/**" />
        <include path="/webjars/**" />
    </static-files>
</appengine-web-app> 

我的src/main/webapp/index.html,引用Webjars 提供的Bootstrap CSS 文件:

<html>
<head>
    <link rel="stylesheet" href="webjars/bootstrap/3.0.0/css/bootstrap.min.css">
</head>
...
</html>

pom.xml 的片段:

    <dependency>
        <groupId>com.google.appengine</groupId>
        <artifactId>(lots)</artifactId>
        <version>1.8.5</version>
    </dependency>
    <dependency>
        <groupId>com.google.inject</groupId>
        <artifactId>guice</artifactId>
        <version>4.0-beta</version>
    </dependency>
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <scope>provided</scope>
        <version>3.1.0</version>
    </dependency>
    <dependency>
        <groupId>org.webjars</groupId>
        <artifactId>bootstrap</artifactId>
        <version>3.0.0</version>
    </dependency>

这是我在 GAE 发布的第一个问题,所以我不确定要提供哪些额外信息——请保持温和,所以。

【问题讨论】:

    标签: java google-app-engine maven webjars


    【解决方案1】:

    不幸的是,Webjars 需要一个 Servlet 3.x 容器,但 Google App Engine 目前仍然只有 2.5 版。

    您可能希望在 GAE 问题列表中为 this issue 加注星标。

    【讨论】:

    • 我在某个地方看到了关于这个的注释,但我没有保留它;谢谢。这意味着我要采用的解决方案——既保持我的项目整洁又提供文件——将是我的&lt;script&gt;&lt;link&gt; 标签中的 CDN 链接。
    • 您能否提供有关您的解决方法的更多详细信息?在 GAE 中使用 webjars 真的很方便。
    【解决方案2】:

    我终于找到了实际工作的解决方法!我用 RESTlet 做到了。我认为您可以在非 restlet 应用程序中执行此操作,并为此使用 restlet。

    如果您使用 restlet,只需将其粘贴到您的路由器中:

    final Component component = new Component();
    component.getClients().add(Protocol.CLAP);
    final Directory dir = new Directory(component.getContext(), "clap://class/META-INF/resources/webjars");
    dir.setDeeplyAccessible(true);
    this.attach("/webjars", dir);
    //access via http://example.com/webjars/jquery/1.9.0/jquery.min.js
    

    如果你不使用restlet,你需要在你的web.xml中添加一个restlet servlet适配器,用上面的内容创建一个restlet应用程序和路由器。这只是几行额外的代码!

    我的博客上的更多信息:http://demeranville.com/using-webjars-without-servlet-3-on-google-app-engine-gae/

    【讨论】:

      【解决方案3】:

      看起来 webjars 现在为 servlet 2 提供了旧版支持 http://www.webjars.org/documentation#servlet2

      【讨论】:

        【解决方案4】:

        您可以轻松做到这一点。也在 Servlet 2.x 容器上。

        在您的 Web 应用程序中注册我们的 webjars-servlet-2.x Maven 依赖项:

        <dependency>
            <groupId>org.webjars</groupId>
            <artifactId>webjars-servlet-2.x</artifactId>
            <version>1.1</version>
        </dependency>
        

        在您的 web.xml 中注册 WebjarsServlet:

        <!--Webjars Servlet-->
        <servlet>
            <servlet-name>WebjarsServlet</servlet-name>
            <servlet-class>org.webjars.servlet.WebjarsServlet</servlet-class>
            <load-on-startup>2</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>WebjarsServlet</servlet-name>
            <url-pattern>/webjars/*</url-pattern>
        </servlet-mapping>
        

        默认情况下,Webjars 资源将被您的浏览器缓存。如果出于某种原因需要禁用缓存,您可以使用 disableCache 配置属性,如下所示:

        <!--Webjars Servlet-->
        <servlet>
            <servlet-name>WebjarsServlet</servlet-name>
            <servlet-class>org.webjars.servlet.WebjarsServlet</servlet-class>
            <init-param>
                <param-name>disableCache</param-name>
                <param-value>true</param-value>
            </init-param>
            <load-on-startup>2</load-on-startup>
        </servlet>
        <servlet-mapping>
            <servlet-name>WebjarsServlet</servlet-name>
            <url-pattern>/webjars/*</url-pattern>
        </servlet-mapping>
        

        更多信息请看http://www.webjars.org/documentation#servlet2

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-08-10
          • 1970-01-01
          • 2011-08-15
          • 2015-08-12
          • 1970-01-01
          • 2013-11-26
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多