JSP 网页主要由两部分组成,一部分是 需要在服务器端处理 的(如Java代码段),另一部分是 直接发送回客户端 的(如HTML部分)。
一个较完整的JSP网页通常由以下几部分组成。
· HTML注释 :在客户端显示的注释。
· JSP隐藏注释 :不发送给客户端,但保留在JSP页面中的注释。
· HTML页面元素 :普通的HTML页面组成元素
· 声明 :用于声明JSP中的合法变量和方法。
· 表达式 :符合JSP语法的表达式。
· 代码段 :符合JSP语法的代码段。
· JSP指令 :JSP为我们提供的预定义指令。
· JSP行为标签 :JSP为我们提供的action标签。
下面对JSP的组成部分分别进行讲解。
在客户端显示一个注释。
这种注释和HTML中的注释很相似,唯一不同的就是可以在这个注释中用表达式,以便动态生成不同内容的注释。
语法格式:
<!-- 注释内容 [ <%= 表达式 %> ] -->
用法举例:
<!-- 本文件创建于 2006 年 4 月16日 -->
<!-- 现在时间为:<%=(new java.util.Date()).toLocaleString( )%> -->
不发送给客户端,但保留在JSP页面中的注释。JSP编译时将忽略掉<%-- 和 --%>之间的内容,因此在客户端看不到这部分内容。
语法格式:
<%-- 注释内容 --%>
用法举例:
用于声明JSP中的合法变量和方法。
在<%! 和 %> 中可定义一个或多个变量或方法,凡是在<%! 和 %>之间定义的变量为该页面级别的共享变量,可被访问此网页的所有用户共享,使用不当可能会有某些意想不到的副作用。因此建议读者定义变量时,可在后面将讲到的<% 和 %>中定义。
一个声明仅在一个页面中有效。如果每个页面都需要用到的一些声明,最好把它们写成一个单独的文件,然后用<%@ include %>或<jsp:include >元素包含进来。
语法格式:
<%! 变量或方法声明 %>
用法举例:
在JSP中表达式经常被用到,在<%= 和 %> 中间可包含任何一个有效的Java表达式。表达式在服务器端经过计算后,将计算结果转化成字符串插入到该表达式在JSP文件中的位置上。
表达式后不能加分号,这是一个需要特别注意的地方。
语法格式:
<%= Java表达式 %>
用法举例:
<%@ page language='java' contentType='text/html; charset=gb2312'%>
<html>
<head><title>测试页面</title></head>
<body>
<h1>现在的时间是:<%=(new java.util.Date()).toLocaleString()%></h1>
</body>
</html>
在<% 和 %> 中间可以包含任何符合Java语言语法的程序片段。JSP中的主要程序也就写在<% 和 %>的中间。
<% 和 %> 中间的代码段在服务器端被执行,产生与代码段功能对应的输出结果,真正实现动态网页的功能。
语法格式:
用法举例:
JSP指令主要用来提供整个JSP页面的相关信息和设定JSP页面的相关属性,如设定网页的编码方式、脚本语言,以及包含外部文件等。
语法格式:
<%@ 指令名 属性名='属性值' %>
用法举例:
<%@ page language='java' contentType='text/html; charset=gb2312'%>
平时常用的有3条指令:page、include 和taglib,下面逐一讲解。
1.page指令
page指令用于定义JSP文件中的全局属性,主要用来设定整个JSP 文件的属性和相关功能。
语法格式:
<%@ page 属性 1='值 1' 属性 2= '值 2' …… %>
page指令的常用属性见表3-4。
表3-4 page指令的常用属性
用法举例:
<%@ page language='java' contentType='text/html; charset=gb2312'%>
<%@ page import='java.util.*, java.sql.*' %>
<%@ page buffer='30kb' autoFlush='true' %>
<%@ page errorPage='errors.jsp' %>
2.Include 指令
在JSP中Include指令用来包含一个静态的文件(如JSP网页文件、HTML网页文件等),不能包含用<%= 和 %> 表示的表达式代表的文件。如果某部分的代码在众多地方需要用到的话,可以将这部分代码单独存放到一个文件中,所有需要用到该文件的页面使用Include指令将它包含进来,这样就大大提高了代码的可复用性,而且也便于日后维护升级。
为了使整个页面的标签结构体系不发生冲突,建议最好不要在被包含的文件中出现诸如<html>、</html>、<body>、</body>等的标签。
语法格式:
<%@ include file='被包含文件URL' %>
用法举例:
header.inc文件
<%@ page language='java' contentType='text/html; charset=gb2312'%>
<%@ page import='java.util.*, java.sql.*' %>
<%@ page buffer='30kb' autoFlush='true' %>
<%@ page errorPage='errors.jsp' %>
index.jsp文件
<%@ include file='header.inc' %>
3.taglib指令
在JSP中taglib指令用来声明此JSP文件使用的自定义标签,同时引用标签库,并指定标签的前缀。
语法格式:
<%@ taglib uri = 'tagLibraryURI' prefix='tagPrefix' %>
taglib指令有两个属性值:
· uri = 'tagLibraryURI':指明标签库文件的存放位置。
· prefix ='tagPrefix':指明该自定义标签使用时的前缀。
用法举例:
注:该示例只是想说明自定义标签的使用语法,对示例中所使用的标签的具体含义不需要明白,这是一个使用了Struts标签的示例,标签的含义在后续章节将有讲解。
JSP行为标签即Action标签。属于服务器端的JSP元素,它执行服务器端的任务而不需我们编写Java代码,大大提高了开发效率。
常用的JSP Action标签见表3-5。
表3-5 JSP行为标签列表
1.<jsp:include>、<jsp:param>标签
使用<jsp:include>标签实现在JSP中包含一个静态的或者动态的文件,而<jsp:param>标签通常用来传递参数。
语法格式一:
<jsp:include page='{静态URL | <%= 表达式%>}' flush='true | false' />
语法格式二:
<jsp:include page='{静态URL | <%= 表达式%>}' flush=' true | false ' >
<jsp:param name='参数名' value='{参数值 | <%= 表达式 %>}' />
</jsp:include>
用法举例:
<jsp:include page='common/header.jsp' />
<jsp:include page='common/menu.htm' />
<jsp:include page='login.jsp'>
<jsp:param name='username' value='admin' />
</jsp:include>
<jsp:include page='common/footer.jsp' />
2.<jsp:forward>标签
该标签可以把请求转发给同一Web应用中的其他组件。
语法格式一:
<jsp:forward page='{静态URL | <%= 表达式%>}' />
语法格式二:
<jsp:forward page='{静态URL | <%= 表达式%>}' >
<jsp:param name='参数名' value='{参数值 | <%= 表达式 %>}' />
</jsp:forward>
用法举例:
<jsp:forward page='login.jsp'>
3.< jsp:plugin >和<jsp:fallback>标签
使用< jsp:plugin >标签在浏览器中执行一个Applet或Bean。
语法格式:
用法举例:
4.<jsp:useBean>标签
该标签用来在JSP页面中创建一个Bean实例并指定其名字及作用范围。
语法格式:
<jsp:useBean id='name' scope='page | request | session | application' typeSpec />
其中typeSpec有以下几种情况:
·class='package.class'
·type='typeName'
·class='package.class' type='typeName'
·beanName='beanName' type='typeName'
用法举例:
<jsp:useBean id='service' class='autocomplete.Department' scope='page' />
5.<jsp:setProperty>标签
<jsp:setProperty>元素使用Bean给定的setter方法,在Bean中设置一个或多个属性值。我们在使用这个元素之前必须使用<jsp:useBean>声明此Bean。
<jsp:useBean>和<jsp:setProperty>是联系在一起的,在<jsp:setProperty>中的name的值应当和<jsp:useBean>中id的值相同。
语法格式:
<jsp:setProperty name='beanName' propertyExpression/>
其中propertyExpression有以下几种情况:
·property='*'
·property='propertyName'
·property='propertyName' param='parameterName'
·property='propertyName' value='propertyValue'
用法举例:
<jsp:setProperty name='mybean' property='*' />
<jsp:setProperty name='mybean' property='username' />
<jsp:setProperty name='mybean' property='username' value='admin' />
6.<jsp: getProperty >标签
获取Bean的属性值,用于显示在页面中。
语法格式:
<jsp:getProperty name=' beanName ' property='propertyName' />
用法举例:
<jsp: getProperty name='mybean' property='username' />