378
一,JSP简介
JSP是建立在Servlet规范提供的功能之上的动态网页技术。
1,Servlet和JSP:servlet是含有HTML的Java代码,JSP是含有Java代码的HTML.
Servlet在服务器上执行和解释浏览器的请求,承担客户端和应用程序之间的中间层角色,把动态的内容混合到静态的内容中产生HTML.
JSP在HTML中嵌入Java脚本代码和JSP标记,将静态(HTML)和动态(java代码)内容分离,实现内容和表示的分离。
2,Servlet的不足:对表示(显示)的处理不足。
a,Servlet中HTML的编写和维护都比较困难。
b,不能使用标准的HTML工具。
c,非java开发人员难以处理HTML。
3,JSP的好处:便利性,生产效率和可维护性
JSP最终会转换成Servlet,JSP页面上能够执行的任务都可以用Servlet完成,但底层的等同性不代表Servlet和JSP页面对所有的情况都适用。
问题不在于技术,而在于便利性,生产效率和可维护性的不同。
a,JSP中的HTML可维护性好。
b,可以使用网站开发工具。
c,便于团队开发,将静态HTML和动态内容进行弱分离和强分离,提高生产效率。
二,JSP运行机制简介
1,JSP的生命周期
转换阶段
(1),客户端发送对JSP页面的请求,
(2),JSP容器(WEB容器)检查JSP页面的语法,将JSP页面转译为Servlet源文件(java文件)。
该类必须实现javax.servlet.jsp.JspPage接口。
而HttJspPage是应用于HTTP协议的请求和响应的JspPage扩展接口。
org.apache.jasper.runtime.HttpJspBase是Tomcat对HttJspPage接口的实现类。
源文件放在Tomcat的/work/Catalina/localhost目录下的相应的项目目录下.
执行阶段
(3),Servlet容器加载(编译成class文件)Servlet源文件,
(4),创建一个Servlet实例,将Servlet载入到服务器内存中来处理请求。
(5),初始化JSP页面,调用_jspInit方法。
(6),由容器自动定义调用_jspService方法,生成响应内容。
(7),销毁JSP页面,_jspDestroy。
2,第一次加载JSP页面和JSP页面被修改的情况
只有在第一次加载JSP页面和JSP页面被修改的时候,“JSP容器将JSP页面转换为Servlet源文件”。
对于以后的请求,JSP容器会检查JSP页面是否被修改。该JSP页面被修改后,JSP容器转译该JSP页面更新Servlet源文件。
3,之后的请求只会“由容器自动调用_jspService方法,生成响应内容”。
4,服务器重启后,容器从执行阶段开始“创建一个Servlet实例,将Servlet载入到服务器内存中来处理请求”。
三,JSP语法简介
一个JSP页面由元素和模板数据组成。
元素是必须由JSP容器进行处理,而模板数据是JSP容器不处理的,将原封不动直接传递给客户端。
1,模板数据的构成:
静态内容:一般由HTML构成。
注释:
2,元素的构成:
指令(directive): page指令,include指令,tiglib指令。
脚本: 表达式,Scriptlet,声明;
动作:
* <jsp:userBean>,<jsp:setProperty>和<jsp:getProperty>以及<jsp:param>
* <jsp:include>和<jsp:forward>
* 其他与定义jsp文档有关动作。
四,JSP隐含对象
1,输入输出对象 : HttpServletRequest的request, HttpServletResponse的response, JspWriter的out;
2,作用域通信对象 : HttpSession的session, ServletContext的application, PageContext的pageContext;
3,servlet对象 : Object的page, ServletConfig的config;
4,错误对象 : Throwable的exception;