在发布此问题之前,我已经看了很多(相信我:),但我仍然感到困惑。场景如下:
使用 ReSTLet 2.0 在 glassfish v3 上托管 J2EE 网络应用程序 freemarker 模板文件位于/WEB-INF 文件夹中。这些模板使用相对 URL 链接到 jQuery/javascript 文件、一些静态图像和样式表。
由于将它们存储在/WEB-INF 中不是一个好习惯(如网络上许多地方所述)我将文件移动到 WebContent 文件夹
WebContent:
+--Images
-.jpg, .gif files
+--Styles
-myStyle.css
+--Scripts
+--jQLabel
+--mColorPicker
+--Images
+--javascripts
-.js files
我在 freemarker 模板/html 中将它们称为:
<link rel="stylesheet" type="text/css" href="${baseRef}/Styles/myStyle.css" />
其中 ${baseRef}
是站点的根引用。站点部署在/Winbook。所以 css 在本地主机上的 URL 如下所示:
http://localhost:8080/Winbook/Styles/winbookwall.css <-- 使用 GET 检索
问题:
对于上述每个资源,我都得到一个 404 :( 我不确定这是否真的是应该 存储 css、图像或脚本的方式,也不确定 WebContent 文件夹是否适合它被存储。
问题:
- 为什么以上不起作用?我的意思是一定有错误,我只是不知道 :)
- 将上述文件存储在网络服务器/glassfish 上的最佳位置是什么?
- 如果这些资源部署在 .war 中,我该如何引用它们(在 HTML/freemarker 模板中)? (如果它们被放置在 WebContent 中,它们将被部署在 war 文件中,对吗?这是“合法的”还是好的做法?似乎闻起来 :)
- 我们是否必须在 glassfish 中为所有此类资源创建备用文档根目录(或 ReSTLet 中的等效目录类?)
- 为基于 Intranet 的应用程序进行此类部署以无缝定位资源的“最佳”方式/地点是什么?基于 JNDI 的查找? (我不知道那是怎么回事,另一个问题可能是关于 SO ;)
我完全糊涂了!自从我必须编写一个完整的端到端 Web 应用程序以来已经有一段时间了,这通常由“其他人”处理:)
谢谢!
最佳答案
我可能迟到了才发布对此的答案,但在这里。正如我所提到的,ReSTLet 会拦截 URL,您必须使用 Directory 类返回静态内容 - 为每个文件夹使用路径“war:///”或“war:///images/”等进行初始化.
它不工作的原因是 ReSTLet 的路由问题——目录文件夹在 URL 的代码顺序中是“最后一个”。目录是使用 Template.MODE_STARTS_WITH 创建的,其他目录(即 ReSTLets 或其他资源)是 Template.MODE_EQUALS
您应该手动更改路由顺序,或者在路由时将其推到 URI 列表的顶部。
希望能帮助遇到同样问题的任何人。
这是杰罗姆回答的相关问题:Restlet Routing Nightmare
关于java - 在 glassfish 上的哪里存储图像、CSS 和 javascript 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5639791/