JSP是一种建立在Servlet规范提供的功能之上的动态页面技术,JSP文件在用户第一次请求时,会被编译成Servlet,然后由这个Servlet处理用户的请求,所以JSP也可以看成是运行时的Servlet。JSP和Servlet的区别是什么呢?
Servlet是Java对CGI的回应,它们在服务器上执行和解释浏览器的请求,承担客户端和其他应用程序之间的中间层的角色。Servlet主要是把动态的内容混合到静态的内容中以产生HTML。
JSP页面在HTML元素中嵌入Java脚本代码和JSP标记,是得文件长度变短,格式更加清晰。JSP把静态和动态的内容分离开来,实现了内容和表示的分离。
使用JSP,不需要单独配置每一个文件,只要扩展名是.jsp,JSP容器(也是Servlet容器)就会自动识别,将其转换为Servlet为客户端服务。
JSP容器管理JSP页面生命周期的两个阶段:转换阶段和执行阶段。当有一个对JSP页面的客户请求到来时,JSP容器检验JSP页面的语法是否正确,将JSP页面转换成为Servlet源文件,然后调用javac工具编译Servlet源文件生成字节码文件,这一阶段是转换阶段。接下来,Servlet容器加载转换后的Servlet类,实例化一个对象处理客户端的请求,这一阶段是执行阶段。
JSP语法
一个JSP页面由元素和模板数据组成。元素是必须由JSP容器处理的部分,而模板是JSP容器不处理的部分,例如,JSP页面中的HTML内容,这些内容会直接发送到客户端。
元素有三种类型:指令元素、脚本元素和动作元素
指令元素主要用于为转换阶段提供整个JSP页面的相关信息,指令不会产生任何的输出到当前的输出流中。形式如下:<%@directive {attr="value"}* %>
page指令作用于整个JSP页面,定义了许多与页面相关的属性,这些属性将被用于和JSP容器通信。语法如下
<%@ page attr1="value1" attr2="value2"...%>
XML语法格式:<jsp:directive.page attr1="value1"attr2="value2".../>
include指令用于在JSP页面中静态包含一个文件,该文件可以是JSP页面、HTML页面、文本文件或一段Java代码。使用了include指令的JSP页面在转换时,JSP容器会在其中插入所包含文件的文本或代码。语法如下
<%@ include file="relativeURLspec"%>
XML语法格式:<jsp:directive.includefile="relativeURLspec"/>
taglib指令运行页面使用用户定制的标签,语法如下:
<%@ taglib(uri="tagLibraryURI" | tagdir="tagDir")prefix="tagPrefix" %>
XML语法格式:<jsp:directive.tablib(uri="tagLibraryURI"| tagdir="tagDir") prefix="tagPreFix"/>
脚本元素包括三个部分:声明、脚本段和表达式。声明脚本元素用于声明在其他脚本元素中可以使用的变量和方法,脚本段是一段Java代码,用于描述在对请求的响应中要执行的动作,表达式脚本元素是Java语言中完整的表达式,在响应请求时被计算,计算的结果被转换为字符串,插入到输出流中。
<%! declaration(s) %>
XML语句格式:<jsp:declaration>declaration(s)</jsp:declaration>
例如:<%! int i;%>
<%! int i=0;%>
<%! public String f(int i){ if(i<3) return ("true");}%>
可以在一个声明中声明多个变量和方法,也可以使用多个声明
脚本段是在请求处理期间要执行的Java代码段。脚本段可以产生输出,并将输出发送到客户端,也可以是一些流程控制语句<%scriptlet%>
XML语法格式如下:<jsp:scriptlet>scriptlet</jsp:scriptlet>
例子:
<%
if(Calendar.getInstance().get(Calendar.AM_PM)==Calendar.AM)
{
%>
Good Morning
<%
}
else
{
%>
GoodAfternon
<%
}
%>
<%和%>之间的部分是脚本段,“GoodMorning”和“Good Afternoon”是模板数据。
表达式脚本元素是Java语言中完整的表达式,在请求处理时计算这些表达式,计算的结果将被转换成字符串,插入到当前的输出流中。表达式以<%=开始,以%>结束
语法如下:<%= expression %>
XML语法格式:<jsp:expression>expression</jsp:expression>
动作元素为请求处理阶段提供信息。动作元素遵循XML元素的语法,有一个包含元素名的开始标签,可以由属性、可选的内容、与开始标签匹配的结束标签。