js文件中调用jsp变量的问题

两个相似的js方法都调用jsp变量,一个直接写在jsp文件中,另一个写成js文件,并在jsp中引入。
test.js文件:
function f1() {
alert("<%=str %>");
}

Myjsp.jsp文件:
<% String str = "yes" %>
...
<br> function f2() {<br> alert(&quot;&lt;%=str %&gt;&quot;);<br> }</p> <pre><code> window.onload=function(){ f1(); f2(); } &lt;/script&gt; </code></pre> <p>f1()方法输出不正确:&lt;%=str %&gt;<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可以模拟所有的输出,你引用一个文件

在jsp设置头为application/x-javascript 当然,你也可以使用其他任何模板工具进行输出。 其2,在js文件引用前,设置一个变量,如 Myjsp.jsp var a = <%=str%>;

test.js
alert(a);

看你愿用那个吧