JavaEE 项目的页面( html, jsp)引用资源时的路径真不好整,请问最佳实践是什么

2017-05-22 22:22:08 +08:00
 abcbuzhiming
javaee 项目都是部署在 Servlet 容器服务器里,典型的如 Tomcat 和 Jetty,这类项目有个特点,他们给你的访问地址都是带 app 路径的,比如
http://localhost/webapp/xxx/yyy/zzz
要死就死在这个 app 路径(上下文路径)上,搞的我的模板文件( jsp 或 html 或者别的什么)引用资源的时候,路径完全没法写,你写绝对路径 /assert/a.jpg。结果指向的是 http://localhost/assert/a.jpg,没有 webapp 路径,访问不到,你要搞个相对路径吧:assert/a.jpg,遇到什么 forword,还有 springmvc 之类的地址映射会不知道飞到哪里去。
我在网上找了半天,也就找到了一个针对 jsp 的方案,改成${pageContext.request.contextPath}/assets/a.jpg,但是问题是这${pageContext.request.contextPath}就只有模板是 jsp 的时候才认啊,换成 html 就不生效了了。

所以 javaee 项目的模板引用资源文件路径的最佳实践到底是啥?
5036 次点击
所在节点    Java
26 条回复
happy1993
2017-05-22 22:36:01 +08:00
上下文路径不能设置为空吗?
springmarker
2017-05-22 22:38:56 +08:00
你用的 eclipse 吧,rootpath 可以设置,idea 启动时默认是没有的
freestyleyooo
2017-05-22 22:45:57 +08:00
同问,这个论坛我发现大部分都是搞高科技的前端的,而范围广大的企业级 java 开发却很少有人讨论啊
colewp
2017-05-22 22:51:29 +08:00
dongdongkun
2017-05-22 23:06:13 +08:00
贴个我在 eclipse 中用 struts 写的小作业
![QQ 截图 20170522225539.png]( https://ooo.0o0.ooo/2017/05/22/5922fdac298bb.png)
感觉在 jsp 和 php 中引用资源并没什么毛病
将项目导出 WAR 文件,复制到 tomcat 的 webapps 下可以正常访问
dongdongkun
2017-05-22 23:07:38 +08:00
[接楼上]路径就是 http://localhost:8080/teacher
abcbuzhiming
2017-05-22 23:20:33 +08:00
@happy1993 部署的时候可以,调试的时候怎么做,而且你有没有遇到过调试时需要启动多个项目的情况呢? tomcat 不支持基于端口的虚拟主机部署,这是个大问题
abcbuzhiming
2017-05-22 23:21:09 +08:00
@springmarker rootpath ?你指的 eclipse 上的设置?我找了半天没找到这个配置
abcbuzhiming
2017-05-22 23:23:27 +08:00
@colewp 你说的方法就是我说的办法,但是只能针对 jsp,如果模板是 html 立马完蛋
abcbuzhiming
2017-05-22 23:24:05 +08:00
@dongdongkun 你设置什么呢吧,你贴出来的那张图片地址,项目路径怎么都没了
abcbuzhiming
2017-05-22 23:25:26 +08:00
@dongdongkun 我看到你的图了,你这种更糟好吗,你的项目路径你硬编码写 teacher 在路径里,万一你部署的时候服务器上有个和同名的 webapp 你就傻眼了呢,绝对不用用硬编码来描述( webapp )上下文路径
dongdongkun
2017-05-22 23:27:51 +08:00
贼尴尬!
SoloCompany
2017-05-23 00:02:39 +08:00
这你都搞不定,让你上个 CDN 再弄个资源路径分割啥的岂不是要疯掉?
Wetoria
2017-05-23 00:19:18 +08:00
我记得 HTML 有个 basepath?还是 jsp ?没折腾过
Lonely
2017-05-23 02:11:34 +08:00
jsp 可以用 c:url
abcbuzhiming
2017-05-23 08:56:34 +08:00
@SoloCompany 你有方案提出来啊
abcbuzhiming
2017-05-23 08:56:51 +08:00
@Lonely 不用 jsp 作为模板文件格式会怎么样?
sunsulei
2017-05-23 09:20:18 +08:00
找台机器放静态文件嘛,css,js 之类的全扔过去,路径写绝对的外链地址.
Sharuru
2017-05-23 09:24:56 +08:00
一般不都是相对路径引用么……

除此之外,contextPath 是可以设置的……
各类 template engine 也有不同的解决方案。
u5f20u98de
2017-05-23 10:37:56 +08:00
<head>
<script type="text/javascript">
var path=window.location.origin+'/'+window.location.pathname.split('/')[1]; //取到域名后的第一个目录的全路径
document.write('<script src="'+path+'/xx.js"><\/script>')
</script>
</head>

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/363068

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX