概述
Java Server Pages(JSP)使得我们能够分离页面的静态HTML和动态部分HTML可以用任何通常使用的Web制作工具编写编写方式也和原来的一样动态部分的代码放入特殊标记之内大部分以<%开始以%>结束
例如下面是一个JSP页面的片断如果我们用/title=Core+Web+Programming这个URL打开该页面则结果显示Thanks for ordering Core Web Programming
Thanks for ordering
<I><%= requestgetParameter(title) %></I>
JSP页面文件通常以JSP为扩展名而且可以安装到任何能够存放普通Web页面的地方虽然从代码编写来看JSP页面更象普通Web页面而不象Servlet但实际上JSP最终会被转换成正规的Servlet静态HTML直接输出到和Servlet service方法关联的输出流
JSP到Servlet的转换过程一般在出现第一次页面请求时进行因此如果你希望第一个用户不会由于JSP页面转换成Servlet而等待太长的时间希望确保Servlet已经正确地编译并装载你可以在安装JSP页面之后自己请求一下这个页面
另外也请注意许多Web服务器允许定义别名所以一个看起来指向HTML文件的URL实际上可能指向Servlet或JSP页面
除了普通HTML代码之外嵌入JSP页面的其他成分主要有如下三种脚本元素(Scripting Element)指令(Directive)动作(Action)脚本元素用来嵌入Java代码这些Java代码将成为转换得到的Servlet的一部分JSP指令用来从整体上控制Servlet的结构动作用来引入现有的组件或者控制JSP引擎的行为为了简化脚本元素JSP定义了一组可以直接使用的变量(预定义变量)比如前面代码片断中的request就是其中一例
注意本文以JSP 规范为基础和版相比新版本的JSP作了许多重大的改动虽然这些改动只会使JSP变得更好但应注意的JSP页面几乎和早期的JSP引擎完全不兼容
JSP语法概要表
JSP表达式 <%= expression %> 计算表达式并输出结果 等价的XML表达是
<jsp:expression>
expression
</jsp:expression>
可以使用的预定义变量包括requestresponseoutsessionapplicationconfigpageContext这些预定义变量也可以在JSP Scriptlet中使用
JSP Scriptlet <% code %> 插入到service方法的代码 等价的XML表达是
<jsp:scriptlet>
code
</jsp:scriptlet>
JSP声明 <%! code %> 代码被插入到Servlet类(在service方法之外) 等价的XML表达是
<jsp:declaration>
code
</jsp:declaration>
page指令 <%@ page att=val %> 作用于Servlet引擎的全局性指令 等价的XML表达是
<jsp:directivepage att=val\>
合法的属性如下表其中粗体表示默认值
import=packageclass
contentType=MIMEType
isThreadSafe=true|false
session=true|false
buffer=size kb|none
autoflush=true|false
extends=packageclass
info=message
errorPage=url
isErrorPage=true|false
language=java
include指令 <%@ include file=url %> 当JSP转换成Servlet时应当包含本地系统上的指定文件 等价的XML表达是
<jsp:directiveincludefile=url\>
其中URL必须是相对URL
利用jsp:include动作可以在请求的时候(而不是JSP转换成Servlet时)引入文件
JSP注释 <% comment %> 注释JSP转换成Servlet时被忽略 如果要把注释嵌入结果HTML文档使用普通的HTML注释标记< comment >
jsp:include动作 <jsp:include page=relative URL flush=true/> 当Servlet被请求时引入指定的文件 如果你希望在页面转换的时候包含某个文件使用JSP include指令
注意在某些服务器上被包含文件必须是HTML文件或JSP文件具体由服务器决定(通常根据文件扩展名判断)
jsp:useBean动作 <jsp:useBean att=val*/>
或者
<jsp:useBean att=val*>
</jsp:useBean>
寻找或实例化一个Java Bean 可能的属性包括
id=name
scope=page|request
|session|application
class=packageclass
type=packageclass
beanName=packageclass
jsp:setProperty动作 <jsp:setProperty att=val*/>
设置Bean的属性既可以设置一个确定的值
也可以指定属性值来自请求参数
合法的属性包括
name=beanName
property=propertyName|*
param=parameterName
value=val
jsp:getProperty动作
<jsp:getProperty name=propertyName value=val/>
提取并输出Bean的属性
jsp:forward动作 <jsp:forward page=relative URL/>
把请求转到另外一个页面
jsp:plugin动作 <jsp:plugin attribute=value*>
</jsp:plugin>
根据浏览器类型生成OBJECT或者EMBED标记
以便通过Java Plugin运行Java Applet
关于模板文本(静态HTML)
许多时候JSP页面的很大一部分都由静态HTML构成这些静态HTML也称为模板文本模板文本和普通HTML几乎完全相同它们都遵从相同的语法规则而且模板文本也是被Servlet直接发送到客户端此外模板文本也可以用任何现有的页面制作工具来编写
唯一的例外在于如果要输出<%则模板文本中应该写成<\%