2010-01-25 236 views

回答

1

是的,您可以使用JSP生成JavaScript以发送到浏览器。只需将<script>标记指向一个导致JSP页面的URL,该页面将响应的MIME类型设置为“text/javascript”。

不,您不能在浏览器的JavaScript中使用JSP标签。 JSP是服务器端技术,这意味着处理必须在服务器上完成。

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有用。

2

当我在会话或上下文中想要暴露在客户端时,我对此有所了解。我创建了一个包含全局变量值的javascript mime类型的jsp文件。然后将其包含在我的页面顶部,并在必要时重新使用这些值。

为如:

**globalVar.jsp** 

var ctxPath = "<%=request.getContextPath()%>"; 

**script.js** 

ajaxURL = ctxPath + "/path/to/call?param=value"; 

,你甚至可以命名空间此为outlined here

0

您可以轻松地使用Java标签分配给稍后的JavaScript代码中调用Java变量。

<% String name="Peter" %>

,然后在JavaScript ..

<script type="text/javascript"> 

VAR _name = <%=名称%>

1

@BalusC答案解释的清楚什么是服务器端和客户端编程。但是我想强调一点,如果你真的想你javascript内得到运行jsp,那么你可以给它的文件扩展名.jsp而不是.js因为什么决定文件是否是一个javascript文件或者也不是什么MIME媒体类型。您可以使用JSP设置MIME:

<%@ page contentType="text/javascript" %> 

,现在你可以使用内的jspjavascript

var someMessage = "${someMessage}" 
var anotherMessage = "${anotherMessage}"/>" 

现在,您可以直接链接到它:

<script type="text/javascript" src="/script.jsp"></script> 
相关问题