目前,有很多初学开发者对理解JSP代码的执行顺序上还比较混乱,经常有同事不清楚为什么有些js要写在下面。
首先,你要了解JSP的执行过程。
所有的JSP都会在客户端发出请求后被容器转译成servlet的源代码(java),然后再将源码(java)编译成servlet的类(class),放入到内存里面。
?
下面列举几个容易让人混淆的问题:
?????1、JSP中onload,或者jquery的document.ready,或者简写的$(function),是不是就相当于servlet中的初始化init()方法;
???????????答案肯定是否定的,所有的jsp中的代码都是在service方法中执行的。这个你可以直接看jsp编译后的文件就一目了然了。
?
?????2、onload和jquery的document.ready到底哪个先执行;
??????????onload指示页面包含图片等文件在内的所有元素都加载完成。
????????? document.ready表示文档结构已经加载完成(不包含图片等非文字媒体文件)。
????????? 所以说:document.ready在onload 前加载。
?
?????3、写在下面的js和document.ready哪个先执行;
??????????jsp就相当于java,所以执行顺序一样是从上往下,而ready是要在文档结构加载完成的情况下才执行,
????????? 所以说,下面的js肯定是先执行。
????????? 那如果把ready也写在下面呢,道理一样,也肯定是下面的js先执行。
?
?????4、前几天有同事问我,为什么上面的js代码还没执行完,怎么就开始执行下面的代码了;
??????????我一看,原来他用到了好几个$.post方法,也就是ajax,
????????? ajax大家都知道是异步刷新机制,所以他肯定不会去等上面代码执行完,
????????? 当然如果你功能需要ajax从上往下一步步执行,你可以给全局加个默认不异步的属性$.