0

我一直在寻找这个问题的答案,但在任何地方都找不到。真的希望有人能帮忙

我的结构:

WebContent
 - resources
     - css
         - style.css
 - WEB-INF
     - web.xml
template.html

web.xml

 <servlet>
  <servlet-name>RestletServlet</servlet-name>
  <servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>RestletServlet</servlet-name>
  <url-pattern>/*</url-pattern>
 </servlet-mapping>

应用程序.java

String ROOT_URI = "C:/projects/testsite/WebContent/"
    try {
        configuration.setDirectoryForTemplateLoading(new File(ROOT_URI));
        configuration.setObjectWrapper(new BeansWrapper());
    } catch (IOException e) {
        e.printStackTrace();
    }

    router.attach("/resources", new Directory(getContext(), LocalReference.createFileReference(ROOT_URI)));
    router.attach("/index", IndexResource.class);

当我转到 URL: localhost:8080/testsite/index 时,我得到了模板文件,其中填充了正确的数据。但是没有加载 CSS。我可以在我的 Eclipse 控制台中看到 restlet 正在尝试获取它,但我得到了 404

127.0.0.1   8080    GET /testsite/resources/css/style.css   -   404

正如您在上面看到的,我正在尝试使用Directory该类来加载我的 css 目录,但没有任何效果。也许这是错的!?有没有办法让css不通过restlet?如果ROOT_URI是相对路径而不是绝对路径会很好。有没有更简单的方法来获取我的位置路径?

4

2 回答 2

2

我首先注意到,由于您的目录基于“文件”协议,因此应用程序的容器必须声明此客户端连接器。这是在 web.xml 配置文件中完成的:

<servlet>
    <servlet-name>RestletServlet</servlet-name>
    <servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>
    <init-param>
        <param-name>org.restlet.application</param-name>
        <param-value>test.MyApplication (actually the full name of your Application</param-value>
    </init-param>
    <init-param>
        <param-name>org.restlet.clients</param-name>
        <param-value>FILE</param-value>
    </init-param>
 </servlet>

如果没有此说明,我认为您的日志包含一些如下所示的条目:

ATTENTION: The protocol used by this request is not declared in the list of client connectors. (FILE)

话虽如此,使用“文件”协议来提供静态文件会将您的应用程序与文件系统联系起来。您可以在内部提供这些文件,也就是说让容器在应用程序 WAR 中查找您的静态资源(可能未压缩)。您可以简单地将目录基于“战争”协议,如下所示:

router.attach("/resources", new Directory(getContext(), "war:///"));

我希望这能帮到您。

最好的问候,蒂埃里·布瓦洛

于 2012-05-28T08:26:53.067 回答
0

我让它工作了我必须把这个映射放到我的 web.xml 文件中

 <servlet-mapping>
 <servlet-name>default</servlet-name>
 <url-pattern>/resources/*</url-pattern>
</servlet-mapping>
于 2012-05-19T11:34:51.967 回答