假设WAR布局如下:
foo.war -->/WEB-INF -->/classes (..) -->/js -->bar.js -->index.jsp -->web.xml
现在假设WAR的虚拟目录是服务器example.com上的/ blah(即http://example.com/blah)。
bar.js
的HTTP网址是什么,会在<script src="">
可能提供的index.jsp
代码中使用? http://example.com/blah/js/bar.js似乎无法正常工作。
答案 0 :(得分:3)
您必须从不将 JS 放在 WEB-INF 目录中。
正如Servlet规范中所写,无论你在 WEB-INF 目录中放置什么,都不会直接向外部世界提供。只有本地应用程序资源。
因此,如果您希望从外部访问某些 JS 文件,请将其直接放在WAR的ROOT上。像这样:
foo.war
-->/js/
-->bar.js
-->/WEB-INF
-->internal resources here
访问 JS 的网址如下:
http://YOUR_IP:8080/foo/js/bar.js
当然,这取决于您在应用程序服务器上设置war部署的方式。
你做但是将 JSP 文件放在 WEB-INF 目录中,只是从Servlets调用它们(你不能直接访问它们)要么像这样:
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("WEB-INF/index.jsp");
如果您不希望用户直接从外部访问您的 JSP 文件,这是一种常见做法。
答案 1 :(得分:2)
没有指向此的网址。 WEB-INF
内的所有内容都不会暴露给外界。
相反,如果您按如下方式组织WAR布局:
foo.war
-->/WEB-INF
-->/classes (..)
-->web.xml
-->/js
-->bar.js
-->index.jsp
然后您可以{J} http://example.com/blah/js/bar.js访问您的Javascript。
P.S。你也无法访问index.jsp,就像你现在设置的那样。