5

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

src/main/webapp/WEB-INF/appengine-web.xml根据谷歌的文档

<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 发布的第一个问题,所以我不确定要提供哪些额外信息——请保持温和,所以。

4

4 回答 4

2

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

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

于 2013-10-18T17:09:05.440 回答
1

我终于找到了实际工作的解决方法!我用 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/

于 2014-01-16T21:59:42.143 回答
1

你可以很容易地做到这一点。同样在 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

于 2016-06-25T09:48:23.233 回答
0

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

于 2015-05-12T21:18:37.173 回答