写JavaScript发现的问题

一、jsp页面代码的执行顺序,因为jsp页面被访问时会被编译成servlet,编译时会在服务器执行jsp中的Java代码,而JavaScript代码此时是不会被编译执行的,会被当做html一样直接输出,然后在浏览器端收到服务器响应发来的html之后,客户端才会将JavaScript代码解析执行,所以jsp>js

        例:

<html>

<head>

<title></title>

<script>

 function loading()

{ document.write("JavaScript输出"); }

</script>

</head>

<body onLoad="loading()">

 <%="jsp输出"%>

</body>

</html>

 

解答:

<%="jsp输出"%>这是jsp中的嵌入java程序,是在服务器端运行的
<script>
...
</script>这是页面脚本,是在浏览器里面执行的 
在访问页面时,首先在服务器端执行java程序,然后将结果
<html>
<head>

<title></title>

<script>
 function loading(){
     document.write("JavaScript输出");
 }

</script>
</head>

<body onLoad="loading()">
jsp输出

</body>
</html>
发送的浏览器中,然后浏览器在页面加载后执行onload事件,document.write("JavaScript输出")将页面内容更新为Javascript输出

如果你想在jsp输出后面追加内容,应该使用document.body.innerHTML += "<br/>JavaScript输出"
因为document.write会清空现有的页面内容

另外搜到的信息:先运行的是java代码,然后运行js。 jsp的代码是在 服务器端运行的   js是在客户端浏览器运行的

jsp要先被编译生成一个 servlet   也就说 最终输出到前台的 是一个 html的流

从而肯定是jsp的代码先执行



二、写JavaScript时可以不写分号,因为编译器会默认给你加分号,在绝大多数情况下,加与不加效果是完全一样的,但也有例外,当你使用el表达式的时候就要注意了,就如第一点执行顺序的原因,因为JavaScript里的el表达式的执行时间有些特殊,个人经验感觉:el表达式相当于jsp里面的java代码,会在编译成servlet时就被执行了,执行之后向浏览器响应回来的是执行之后的结果,即原先el表达式已经全部被运行结果所替代而直接输出到浏览器,所以原先的JavaScript代码中有el表达式的地方就有变化了,

      比如var x=${user.id};如果${user.id}在服务器执行结果为"",则服务器向浏览器直接输出的就是""(联想System.out.println(""),即什么都没有,那此行代码就变成var x=;浏览器就会直接给你报错,但是我们说了,JavaScript是可以不写逗号的,var x=;是错的但是var x=是对的,后者编译器会给你自动加上分号,前者自己加反而错了,因为var x=;不符合语法规则,所以var x=${user.id};建议把后面的分号去掉,这样当${user.id}在服务器执行结果为""时,jsp页面也不错报错,能正常运行   

      针对上面这种情况还有一种解决方法,那就是写成var x="${user.id}";  即将el表达式用括号括起来,这样当${user.id}在服务器执行结果为""时,语句变成var x=""; 这样也不会有错误,也能正常执行,而其类型也发生了变化,比如原本类型为数值类型,现在变成字符串类型了。







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值