一、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=""; 这样也不会有错误,也能正常执行,而其类型也发生了变化,比如原本类型为数值类型,现在变成字符串类型了。