JSP 的技术原理
JSP 是Servlet 的扩展,在没有JSP 之前,就已经出现了Servlet 技术。Servlet 是利用输出流动态生成HTML 页面,包括每一个HTML 标签和每个在HTML 页面中出现的内容。
由于包括大量的HTML 标签、大量的静态文本及格式等,导致Servlet 的开发效率极为低下。所有的表现逻辑,包括布局、色彩及图像等,都必须耦合在Java 代码中,这的确让人不胜其烦。JSP 的出现弥补了这种不足, JSP 通过在标准的HTML 页面中插入Java 代码,其静态的部分无须Java 程序控制,只有那些需要从数据库读取并根据程序动态生成信息时,才使用Java 脚本控制。从表面上看, JSP 页面已经不再需要Java 类,似乎完全脱离了Java 面向对象的特征。
事实上, JSP 是Servlet 的一种特殊形式,每个JSP 页面就是一个Servlet 实例一-JSP 页面由系统编译成Servlet , Servlet 再负责响应用户请求。JSP 其实也是Servlet 的一种简化,使用JSP 时,其实还是使用Servlet ,因为Web 应用中的每个JSP 页面都会由Servlet 容器生成对应的Servlet 。对于Tomcat 而言, JSP 页面生成的Servlet 放在work 路径对应的Web 应用下。
某个测试jsp页面代码:
<%
public int count;
out.println(count ++ );
%>
public int count;
out.println(count ++ );
%>
打开多个浏览器,甚至可以在不同的机器上打开浏览器刷新该页面,发现每个客户端count 值是完全连续的,所有的客户端共享了同一个count 变量。这是因为: JSP 页面
会编译成一个Servlet 类,每个Servlet 在容器中只有一个实例:而在JSP 中声明的变量是类的成员变量,成员变量只在创建实例时初始化,该变量的值将一直保存,直到实例销毁。