如何在JavaScript文件中使用JSP标记?
有什么办法吗?
答案 0 :(得分:5)
JSP是一种在服务器端运行的视图技术,您可以使用它来编写HTML / CSS / JS等模板文本。您可以使用JSP taglibs和EL来控制页面流和使用Java代码动态输出。这也涉及JavaScript内容/输出。 JSP运行后,它基本上生成一个HTML页面并将其发送到客户端。您可以使用JSP动态输出后端数据,就好像它是JavaScript变量一样。例如:
<script>
var foo = '${someBean.someProperty}';
</script>
一旦HTML页面(内置CSS / JS)到达客户端(右键单击页面和视图源,您将看不到任何Java / JSP代码行),然后HTML将开始被解释, CSS将开始应用,JS将开始执行。客户端没有Java / JSP代码的方法。如果您在客户端中查看生成的源,上面的示例现在将如下所示:
<script>
var foo = 'somePropertyValue';
</script>
这样JavaScript就可以即时访问服务器端变量。
现在反过来了;让JavaScript访问/调用Java / JSP代码的唯一方法是实际向服务器端发送HTTP请求。这可以通过以下几种方式完成:执行window.location
执行同步GET请求,执行form.submit()
执行同步GET或POST请求,或执行XMLHttpRequest#send()
执行异步请求(也称为Ajax)。
或者您也可以让JavaScript设置表单的(隐藏)输入字段,以便在用户提交表单时“自动”使用表单提交。无论哪种方式,服务器端的Java / JSP代码都能够以通常的请求参数方式访问JavaScript控制的值。
要了解有关Java / JSP和JavaScript之间隔离墙的更多信息,您可能会发现this article非常有用。
答案 1 :(得分:2)
当我想在客户端暴露的会话或上下文中有值时,我想知道这一点。我用javascript mime类型创建一个jsp文件,它只包含全局变量值。然后我将其包含在页面顶部,并在必要时重用这些值。
例如:
**globalVar.jsp**
var ctxPath = "<%=request.getContextPath()%>";
**script.js**
ajaxURL = ctxPath + "/path/to/call?param=value";
您甚至可以将其命名为outlined here
答案 2 :(得分:1)
是的,您可以使用JSP生成JavaScript以发送到浏览器。只需将<script>
标记指向一个URL,该URL指向一个JSP页面,该页面将响应的MIME类型设置为“text / javascript”。
不,您不能在浏览器中使用JavaScript中的JSP标记。 JSP是一种服务器端技术,这意味着必须在服务器上完成处理。
答案 3 :(得分:1)
@BalusC回答解释什么是服务器端和客户端编程。但是,我想强调一点,如果你真的想在jsp
中运行javascript
,那么你可以给它文件扩展名.jsp
而不是.js
,因为确定文件是否是javascript
文件是MIME媒体类型。您可以使用以下命令从JSP设置MIME:
<%@ page contentType="text/javascript" %>
现在您可以在jsp
中使用javascript
,如:
var someMessage = "${someMessage}"
var anotherMessage = "${anotherMessage}"/>"
现在,您可以直接链接到它:
<script type="text/javascript" src="/script.jsp"></script>
答案 4 :(得分:0)
您可以轻松地使用java标记分配给稍后在javascript代码中调用的java变量。
<% String name="Peter" %>
然后在javascript ..
<script type="text/javascript">
var _name =&lt;%= name%&gt;