防止css通过restlet

时间:2012-05-19 10:10:45

标签: java rest http-status-code-404 freemarker restlet

我一直在寻找这个问题的答案,并且无法在任何地方找到它。真的希望有人可以提供帮助

我的结构:

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>

Application.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是相对而不是绝对路径,那将是件好事。是否有更简单的方法来获取我的位置路径?

2 个答案:

答案 0 :(得分: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:///"));

我希望这会对你有所帮助。

祝你好运, 蒂埃里博伊洛

答案 1 :(得分:0)

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

 <servlet-mapping>
 <servlet-name>default</servlet-name>
 <url-pattern>/resources/*</url-pattern>
</servlet-mapping>