问题描述
两个相似的js方法都调用jsp变量,一个直接写在jsp文件中,另一个写成js文件,并在jsp中引入。test.js文件: function f1() { alert("<%=str %>"); }Myjsp.jsp文件: <% String str = "yes" %> ... <script type="text/javascript" src="<%=path %>/js/test.js"></script> <script type="text/javascript"> function f2() { alert("<%=str %>"); } window.onload=function(){ f1(); f2(); } </script>f1()方法输出不正确:<%=str %>f2()方法输出正确: yes说明js文件中调用jsp变量会有问题,请高手稍微指点一下啊,到底是什么原理 问题补充:蔡华江 写道
解决方案
js是否会被当作jsp解析,是看你的web.xml配置。如果你将js映射为default Servlet。那么就会当jsp解析,当然输出也是jsp。否则就使用默认的,根据MINE TYPE解析至于输出是否是js,也不是看后缀,而是Response的ContentType说白了,输入输出的只是流而已。
解决方案二:
原理就是js中的表达式是不会被解析的。只会原样输出。办法有2:其1,使用模板输出js,例如,jsp可以模拟所有的输出,你引用一个文件<script souce="test.js.jsp"/>在jsp设置头为application/x-javascript当然,你也可以使用其他任何模板工具进行输出。其2,在js文件引用前,设置一个变量,如Myjsp.jsp<script> var a = <%=str%>;</script><script source="test.js"/>test.js alert(a);看你愿用那个吧