JavaScript EE,第 3 部分: 结合使用 Java Scripting API 和 JSP
2009-07-31 00:00:00 来源:WEB开发网在处理 HTTP 请求的过程中,您需要使用一个脚本上下文,以便 JavaScript 片段能够使用上次执行的脚本中定义的变量和函数。满足该请求的简单方式是将脚本上下文存储为 request 对象的属性。getScriptContext() 方法(见清单 3)使用 jsee.ScriptContext 作为属性名称。
清单 3. JSUtil 的 getScriptContext() 方法
public class JSUtil {
...
public static ScriptContext getScriptContext(PageContext pageContext)
throws IOException {
ServletRequest request = pageContext.getRequest();
synchronized (request) {
ScriptContext scriptContext
= (ScriptContext) request.getAttribute("jsee.ScriptContext");
if (scriptContext == null) {
scriptContext = createScriptContext(pageContext);
request.setAttribute("jsee.ScriptContext", scriptContext);
}
return scriptContext;
}
}
...
}
runScript() 方法(见清单 4)在当前 HTTP 请求的上下文中执行给定的 JavaScript 片段,它使用脚本引擎中的 eval() 方法。如果抛出脚本异常,runScript() 将输出源代码,其后是堆栈跟踪,然后抛出 ServletException 终止执行 JSP 页面。
清单 4. JSUtil 的 runScript() 方法
public class JSUtil {
...
public static void runScript(String source, PageContext pageContext)
throws ServletException, IOException {
try {
getScriptEngine().eval(source, getScriptContext(pageContext));
} catch (ScriptException x) {
((HttpServletResponse) pageContext.getResponse()).setStatus(500);
PrintWriter out = new PrintWriter(pageContext.getOut());
out.println("<pre>" + source + "</pre>");
out.println("<pre>");
x.printStackTrace(out);
out.println("</pre>");
out.flush();
throw new ServletException(x);
}
}
}
编缉推荐阅读以下文章
- 暂无相关文章
Tags:JavaScript EE 部分
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接