【问题标题】:Include javascript file from inside WEB-INF [duplicate]从 WEB-INF 中包含 javascript 文件 [重复]
【发布时间】:2017-02-07 13:54:29
【问题描述】:

我正在用struts 开发一个网站。我的文件夹结构如下:

现在,我有一个 jsp 页面 register.jsp,我想在其中添加 jquery.validate.js 文件。我已遵循以下链接的建议:

Can not include javascript file from WEB-INF directory in JSP.

我的代码如下:

<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<meta name="viewport" content="width=device-width, initial-scale=1">

<title>Insert title here</title>

<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<script src="https://use.fontawesome.com/0c2573c7d6.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script type="text/javascript"  src='<c:url value="/WEB-INF/scripts/jquery.validate.js"/>'></script>

以上代码生成如下html:

<script type="text/javascript"  src='/LoginApp/WEB-INF/scripts/jquery.validate.js'></script>

jsp 文件无法访问 javascript 文件 jquery.validate.js。如何从我的 jsp 文件中访问它?

问候, 坦维尔

【问题讨论】:

  • 你有什么理由把你的资源放在/WEB-INF/scripts而不是直接'/scripts'?
  • 你应该使用类似 src="${pageContext.request.contextPath}/scripts/jquery.validate.js"
  • @NicolasFilotto 我不知道。我是struts和java的新手。我已经开始了一个星期。你建议把javascript放在哪里?你能告诉我这种情况下的标准是什么吗?然后我将如何访问它?
  • 通常,所有的静态文件(JS,CSS,图像,...)都放在 WEB-INF 之外,而您的私有文件(JSP,Java 类,配置文件...)则放在 WEB-信息。
  • @DavidSN 谢谢。有价值的信息。从现在开始我会把静态文件放到WEB-INF之外。

标签: java jsp struts-1


【解决方案1】:

您应该将您的文件jquery.validate.js 移出WEB-INFwebapp/scripts,因为它在某种程度上是一个受保护的目录,因为该目录中的资源默认情况下是非公开的,那么您将能够使用以下方式访问它:

<script type="text/javascript" src='<c:url value="/scripts/jquery.validate.js"/>'></script>

【讨论】:

  • 谢谢。您的解决方案工作正常。我有一个问题。路径是否总是从 webapp.我的意思是为什么我们不使用 value="/webapp/scripts/jquery.validate.js />"
  • 是的,路径从 webapp 目录开始,或者更准确地说,从上下文路径的根目录开始
【解决方案2】:

WEB-INF 不可公开访问,您的 HTML 页面无法访问 WEB-INF 中的 JS 文件。

可能最好的方法是将您的 JS 文件移到 WEB-INF 之外并更改指向该位置的链接。

另一种选择,是在html中生成一个&lt;script&gt;标签,里面有JS文件的内容:

<script>
<%@include file="/WEB-INF/scripts/jquery.validate.js" %>
</script>

请注意,您正在失去浏览器缓存的好处,因为您每次都在 HTML 中包含 JS 文件的内容。

【讨论】:

  • 对问题的利弊进行准确而清晰的解释。我更喜欢这个作为正确答案。
  • 如果您的目标是在使用内容安全策略时将所有 JavaScript 移动到外部文件,则此解决方案将不起作用。
猜你喜欢
  • 2012-12-30
  • 1970-01-01
  • 2011-04-28
  • 1970-01-01
  • 1970-01-01
  • 2017-01-04
  • 1970-01-01
  • 2011-05-07
  • 1970-01-01
相关资源
最近更新 更多