两个相似的js方法都调用jsp变量,一个直接写在jsp文件中,另一个写成js文件,并在jsp中引入。
test.js文件:
function f1() {
alert("<%=str %>");
}
Myjsp.jsp文件:
<% String str = "yes" %>
...
<br> function f2() {<br> alert("<%=str %>");<br> }</p> <pre><code> window.onload=function(){ f1(); f2(); } </script> </code></pre> <p>f1()方法输出不正确:<%=str %><br> f2()方法输出正确: yes</p> <p>说明js文件中调用jsp变量会有问题,请高手稍微指点一下啊,到底是什么原理</p>
js是否会被当作jsp解析,是看你的web.xml配置。
如果你将js映射为default Servlet。那么就会当jsp解析,当然输出也是jsp。
否则就使用默认的,根据MINE TYPE解析
至于输出是否是js,也不是看后缀,而是Response的ContentType
说白了,输入输出的只是流而已。
原理就是js中的表达式是不会被解析的。只会原样输出。
办法有2:
其1,使用模板输出js,例如,jsp可以模拟所有的输出,你引用一个文件
test.js
alert(a);
看你愿用那个吧