最近在开发一个小项目的过程中遇到了一些问题,在这里做个小小的总结,做个记录,同时也是分享给需要的人。
在JS文件中是否能够获取到session的内容?
我们知道,通过单独的JS编写JavaScript代码有利于代码的可读性和可维护性。因此,本人很不习惯地把JavaScript代码写在Jsp页面中,而是通过单独的JS文件编写然后通过导入资源的方法来使用js方法。但是在前台实现验证码验证功能时却遇到了第一个问题,无法在js文件中通过EL获取到session里面的值(本人把验证码在后台产生并值存在session中)。在网上找到了些相关的资料,为了更好的了解其中的机制,在此将几种版本的说法罗列一下,它们本质是一样。
版本一
JSP是由服务端执行的,EL表达式自然也由服务端解析执行,因此,如果EL所在的脚本在JSP页面内,它是可以获取到值的,这个值在服务器端返回到浏览器端时已经解析完毕,浏览器端只是呈现而已,如果在单独的JS文件中写EL是无法获取的,因为javascript是客户端执行,单独的JS文件不在服务器的解析执行之中,EL是不起任何作用的,这个时候它就等同于普通的字符串
版本二
所有的jsp文件在响应给用户时都会编译成servlet,执行其中所有的JSP脚本或EL表达式,并由java输出流转化成HTML文本代码response响应给客户端,所以浏览器接收到的只是html页面。而外部js文件与HTML一起响应给客户端,并在本地组装在一起,所以< script src=”xxx.js”>这样的外部引用JS,是无法执行服务端脚本的。
版本三
javascript是客户端执行,EL是在服务端执行,而服务端比客户端先执行,所以取不到值