我一直在寻找这个问题的答案,并且无法在任何地方找到它。真的希望有人可以提供帮助
我的结构:
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
是相对而不是绝对路径,那将是件好事。是否有更简单的方法来获取我的位置路径?
答案 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>