JSP语法
JSP概念
JSP 是 Sun Microsystems 公司的一种规范,它将 Java 与 HTML 相结合
JSP 是使用Java 开发基于 Web 的应用程序不可或缺的部分
JSP 可结合其他Java 组件一起使用
JSP的优点
 “编写一次,随处运行”
高品质工具支持
组件和标记库的重用
动态内容与静态内容的分离
对脚本和动作的支持
多层企业应用程序体系结构的 Web 访问层
表示与实现的分离
注释:
将文档字符串添加到 JSP 页面
类型:
HTML 注释
隐藏注释
HTML 注释
类似于在 HTML 中使用的那些注释
<!-- 注释 -->
可在其中包括动态内容
隐藏注释
只能通过查看原始 JSP 文件查看
<%-- 注释 --%>
JSP 容器忽略此注释的主体

JSP指令
将有关页面的特殊处理信息传送到JSP容器
   <%@ directive-name
  attribute-name=attribute-value
  attribute-name=attribute-value …
%>
类型:
include 指令
page 指令
taglib 指令
include 指令
使页面作者能将一个文件的内容包括在另一个文件中
语法:
<%@ include file="localURL" %>
出现在一个 JSP 页面中的 include 指令的数量不受限制
page 指令
page 指令将页面特定的信息传递给 JSP 引擎
语法:
<@ page attribute = "value1"
attribute2 = "value2" attribute3 =… %>
page 属性
info
language
contentType
extends
import
session
buffer
autoFlush
isThreadSafe
errorPage
isErrorPage
taglib指令
通知 JSP 容器,页面依赖于自定义标记库
标记库是扩展 JSP 的功能的自定义标记的集合
语法:
<%@ taglib uri =
"tagLibraryURI" prefix = "tagPrefix" %>

JSP脚本元素
使开发者能直接将代码嵌入 JSP 页面
类型:
声明
代码段
表达式

用于定义特定于 JSP 页面的变量和方法
语法:<%! declaration %>
声明的类型:
变量声明
方法声明
变量声明
定义为声明的变量成了 JSP 页面被转换和编译到的 servlet 类的实例变量
语法:
<%!private int x=0, y=0; private String
units = "ft"; %>
方法声明
定义的方法将编译成的 Servlet 类的方法
可以由页面上所有脚本元素访问
<%! public long fact (long x) {
     if (x == 0 )
        return 1 ;
     else
        return x * fact (x-1) ;
    }  %>
表达式:
包含任何语言表达式
语法: <%= expression %>
不以分号结束
用于输出单个变量或某个计算的结果
<%= Math.PI %>
代码段
包含一个或多个有效而完整的语句
语法: <% // 这里是 Java 代码 %>
 
<% 字符串名称 = null;
if(request.getParameter(“name”)==null) { %>
<%!、<%= 和 <%之间的区别
变量声明后面必须带分号
表达式可以包含任何语言表达式,并不以分号结束
代码段中,如果语言要求语句以分号结束,则必须提供分号
JSP隐式对象:
输入/输出对象
作用域通信和控制对象
Servlet 相关对象
错误处理
隐式对象 :
JSP 机制自动创建的 Java 类实例
与 Servlet 环境交互
功能:
从客户端获得数据
向客户端发回数据
控制传输数据的缓冲
隐式对象的类型:
输入/输出对象
作用域通信和控制对象
Servlet 相关对象
错误处理

输入/输出对象 :
用于 JSP 页面的输入和输出
可分为:
request 对象
response 对象
out 对象
request 对象
表示 HTTP 请求
是实现 javax.servlet.HttpServletRequest 接口的类的一个实例
重要方法:
String getParameter (name)
String getHeader (name)
response 对象
表示 HTTP 响应
是实现 javax.servlet.HttpServletResponse 接口的类的一个实例
重要方法:
void setContentType (type)
void sendRedirect (url)
out 对象
将内容写入输出流
javax.servlet.jsp.JspWriter 类的一个实例
重要方法:
print()
println()
作用域通信和控制对象
分为:
session 对象
application 对象
pageContext 对象
session 对象
在访问Web 站点时在多个页面间共享信息
是 javax.servlet.http.HttpSession 类的一个实例
存储有关会话的属性
重要方法:
String getId ()
void invalidate ()
application 对象
存储有关文档运行环境的信息
是 javax.servlet.ServletContext 类的一个实例
重要方法:
String GetServerInfo ()
String getRealPath (path)
pageContext 对象
描述 JSP 文档的运行环境
提供对所有其他隐式对象及其属性的访问
是 javax.servlet.jsp.PageContext 类的一个实例
重要方法:
HttpSession getSession ()
void forward (path)

Servlet相关对象
基于 JSP 页面作为 Servlet 的实现
可分为:
page 对象-表示 Servlet 本身
config 对象-存储 Servlet 的初始化参数
page 对象
表示 JSP 页面本身
是 Servlet 类的一个实例,就是转换后的类
config 对象
存储 Servlet 配置对象
是 javax.servlet.servletConfig 接口的一个实例
重要方法:
Enumeration getInitParameterNames()
String getInitParameter(name)

错误处理
只有一个对象,exception 对象
JSP 错误页面
在某个 JSP 页面抛出异常时,处理将被转发的页面
exception 对象
只适用于 JSP 错误页面
目的是在 JSP 内处理错误
是 java.lang.Throwable 类的一个实例
重要方法:
String getMessage ()
void printStackTrace (out)

JSP标准动作
JSP 标准动作
<jsp: useBean> 标记
<jsp: getProperty> 标记
<jsp: setProperty> 标记
<jsp: forward> 标记
<jsp: include> 标记
向其他服务器对象传输控制权或执行操作
包括:
<jsp:include>
<jsp:param>
<jsp:forward>
<jsp:plugin>
<jsp:useBean>
<jsp:setProperty>
<jsp:getProperty>
JSP 动作的作用
实例化对象
与服务器端资源进行通信
提高组件的可重用性,增强应用的可维护性
使 JSP 页面可与 JavaBean 对象进行交互
通过标记库定义自定义标记
JSP 动作的语法
JSP 动作标记遵循 XML 语言的语法
起始标记
结束标记
空标记
动作元素
具有一个名称
具有前缀 jsp:
用一对尖括号(< 和 >)括起来
在尖括号内定义标记:
起始标记 - 以元素的名称开头
结束标记 - 以正斜线开头,后面紧跟元素名称
空标记 - 以元素名称开头,以正斜线结束
JSP Bean标记
JSP 代码是 HTML 和 Java 代码的混合
要使 JSP 代码易于读取,要将 HTML 代码与 Java 代码分开
JSP Bean 标记将 JavaBean 加载至页面
JavaBean 组件是遵循定义明确的设计/命名模式的Java 对象,
与JavaBean交互的三个标记
<jsp:useBean>
<jsp:getProperty>
<jsp:setProperty>
<jsp:useBean>标记
创建Bean或从服务器获得现有Bean
语法:
<jsp:useBean  id="bean name" class="class name" />
或者
<jsp:useBean  id="bean name" class="class name ">
  初始化代码
</jsp:useBean>
id属性-在整个页面引用Bean的唯一值
Bean名称的规则:唯一
  区分大小写
  第一个字符必须为字母
  不允许有空格
可为同一 Bean 类指定不同的 id 值
class 属性-JavaBean 的类名
Count Bean不属于包
<jsp:useBean id="count" class="Count" />
Count Bean属于test包
<jsp:useBean id="count" class="test.Count" />
type属性-将引用此对象的变量的类型
beanName 属性-指定串行化Bean的名称
scope 属性-表明Bean应可用的环境
 page
 session
 request
 application
page 作用域
将 JavaBean 对象存储在当前页面的 javax.servlet.jsp.PageContext 中
JavaBean 对象仅可用于当前页面
session 作用域
将 JavaBean 对象存储在 HTTP 会话中
JavaBean 对象在当前 HttpSession 的生命周期内可用于所有页面

request 作用域
将 JavaBean 对象存储在当前 ServletRequest 中
JavaBean 对象可用于被包括的 JSP 页面
application 作用域
将 JavaBean 对象存储在 ServletContext 中
JavaBean 对象可用于共享同一 ServletContext 的所有页面
非空 useBean 标记仅在新建 Bean 实例时才会处理标记的内容
<jsp:useBean id="currentuser" class="CurrentUser" scope="session">
    Hello,new user!!!
</jsp:useBean>
<jsp:getProperty>标记
检索 Bean 属性的值,将此值转换成字符串,并插入输出结果中
name 属性-指定 Bean 的名称
property 属性-指定 Bean 的属性
<jsp:getProperty name="bean name" property="property name"/>
<jsp:setProperty>标记
设置 Bean 类的属性
name 属性-指定 Bean 的名称
property 属性-指定 Bean 的属性
value 属性-指定要设置的值
<jsp:setProperty name="bean name" property="property name" value="str" />
<jsp:forward>标记
将控制权传输至本地服务器上的另一地址
page 属性-指定替代地址
可为静态值,也可在请求时计算
语法:<jsp: forward page = "localURL" />
<jsp:param> 标记用于将附加 request 参数发送至转发的页面
可与 <jsp:include> 和 <jsp:forward> 标记一起使用
name 属性-指定参数的名称
value 属性-指定参数的值
<jsp:forward page ="localURL">
  <jsp:param name="parameterName1" value="parameterValue1" />
  <jsp:param name="parameterNameN" value="parameterValueN" />
</jsp:forward>
<jsp:include>标记
可将另一个页面生成的内容包括在当前页面的输出结果中
也可包括Servlet
page 属性-要插入当前页面的文档
flush 属性-是否刷新当前页面的缓冲器
<jsp:param> 标记指定附加的 request 参数
<jsp:include page="localURL" flush="true" />
include 指令和 include 动作的区别
动重新编译和类大小
静态或动态内容的包括
合并主页和包括的页面的时间
共享局部变量
修改的生效
变量的作用域

参考资料:
《JSP2_0技术手册》
《JSP语法详解》