JSP页⾯的构成
JSP页⾯就是带有JSP元素的常规Web页⾯,它由静态内容和动态内容构成。其中,静态内容指HTML元素,动态内容(JSP元素)包括指令元素、脚本元素、动作元素、注释等内容。
1、指令元素
指令元素主要⽤于为转换阶段提供JSP页⾯的相关信息,指令不会产⽣任何输出到当前的输出流中,它指定了有关页⾯本⾝的信息,这些信息在请求之间⼀直保持不变。指令元素语法为<%@ directive{attr="value"}%>。指令元素有三种:page、include、taglib。
1)page
该指令⽤于整个页⾯,定义与页⾯相关的属性,它是JSP页⾯和容器的通信员,⼀般放在JSP页⾯的第⼀⾏。与page相关的属性如下:属性描述
buffer指定out对象使⽤缓冲区的⼤⼩
autoFlush控制out对象的缓存区
contentType指定当前JSP页⾯的MIME类型和字符编码
errorPage指定当JSP页⾯发⽣异常时需要转向的错误处理页⾯
isErrorPage指定当前页⾯是否可以作为另⼀个JSP页⾯的错误处理页⾯
extends指定servlet从哪⼀个类继承
import导⼊要使⽤的Java类
info定义JSP页⾯的描述信息
isThreadSafe指定对JSP页⾯的访问是否为线程安全
language定义JSP页⾯所⽤的脚本语⾔,默认是Java
session指定JSP页⾯是否使⽤session
isELIgnored指定是否执⾏EL表达式
isScriptingEnabled确定脚本元素能否被使⽤
a、import="导包列表",可以多次导⼊,也可以⽤逗号分隔开。
b、language=“scriptingLangeuage”,指定在脚本元素使⽤的脚本语⾔,默认是Java。
c、contentType="cinfo",指定HTTP响应的头部的Content-Type值。客户端的浏览器会根据我们在contentType中指定的MIME类型和字符集代码来显⽰Servlet输出的内容。
常见的MIME类型有:
MIME类型⽂件格式
application/msword Microsoft Word⽂档
application/pdf Acrobat PDF⽂件
application/vnd.ms-excel Microsoft Excel表格
audio/x-wav WAV格式的⾳频⽂件
text/html HTML格式的⽂本⽂档
text/css HTML层叠样式表
text/plain普通⽂本⽂档
image/jpeg JPEG格式图⽚
video/mpeg MPEG格式视频⽂件
d、pageEncoding="peingo",指定页⾯的字符编码,如果设置了这个属性,则JSP页⾯的字符编码就是它指定的字符集,如果没有则默认的是ISO-8859-1。
2)include
该指令⽤于在JSP页⾯中包含⼀个⽂件,该⽂件可以是JSP页⾯、HTML⽹页、⽂本⽂件或⼀段Java代码。
<%@ include file="相对于当前⽂件的" %>
3)taglib
该指令允许页⾯使⽤⽤户定制的标签。
<%@taglib prefix="前缀" uri="具有唯⼀标识和前缀相关的标签描述符地址" %>
2、脚本元素
使⽤JSP脚本元素可以将Java代码嵌⼊到JSP页⾯⾥,这些Java代码将出现在由当前JSP页⾯⽣成的Servelt中,使JSP将静态内容与动态内容分离出来。脚本元素包含表达式、脚本和声明等。
1)表达式
表达式是对数据的表⽰,系统将其作为⼀个值进⾏计算。
<%= expression%>
例如<%= Name()%>在将JSP转换成Servlet后,使⽤out.print()将表达式的值输出。所以如果表达式是调⽤⼀个⽅法的话,那⽅法必须要有返回值,⽽且在⽅法的后⾯不能有分号。
2)脚本
脚本是在<% ... %>⾥嵌⼊的Java代码,这⾥的Java代码与⼀般的Java代码没有什么区别,所以每⼀条语句同样要以分号“;”结束,这和表达式是不同的。
<%  code  %>
3)声明
声明就是允许⽤户定义Servlet中的变量、⽅法。
<%! code %>
例如:<%! String getName(){return name; }%>,声明的本质其实就是将声明的变量加⼊到Servlet类(在任何⽅法之外)中,⽅法就成了Servlet的⽅法。
例⼦:九九乘法表
index.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD//XHTML 1.0 Transitional//EN"
"/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="/1999/xhtml">当前页面脚本发生错误
<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8"/>
<title>九九乘法表</title>
</head>
<body>
<br/>
<form id="form1" name="form1" method="post" action="result.jsp">
<p align="center">请输⼊两个⾃然数给您打印乘法表</p>
<p align="center">要求:startNumber <endNumber <br/></p>
<table width="350" border="1" align="center" cellpadding="0"
cellspacing="0" bgcolor="#aaccdd" bordercolor="#cccccc">
<tr>
<td width="101">startNumber:</td>
<td width="113">
<label>
<input name="s" type="text" id="textfield" size="15" maxlength="8" height="20"/>
</label>
</td>
<td width="68"> <br/></td>
</tr>
<tr>
<td>endNumber</td>
<td>
<label>
<input name="e" type="text" id="textfield2" size="15" maxlength="8" height="20"/>
</label>
</td>
<td> <br/></td>
</tr>
<tr>
<td> </td>
<td>
<label>
<input type="submit" name="button" id="button" value="submit"/>
<input name="button2" type="reset" id="button2" value="reset"/>
</label>
</td>
<td> </td>
</tr>
</table>
</form>
</body>
</html>
result.jsp:
<%@ page import="java.io.PrintWriter" %>
<%@ page contentType="text/html;charset=UTF-8" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="/1999/xhtml">
<html>
<head>
<meta content="text/html;charset=utf-8" http-equiv="Content-Type"/>
<title>表单提交</title>
</head>
<body>
<%
PrintWriter pw = Writer();
int s = Integer.Parameter("s"));
int e = Integer.Parameter("e"));
for (int i = s; i <= e; i++) {
for (int j = s; j <= i; j++) {
pw.print(j + "*" + i + "=" + (j * i) + "\t");
}
pw.println("<br />");
}
%>
<br />
<a href="index.jsp">返回</a>
</body>
</html>
启动Tomcat,输⼊,输⼊2和8,提交:
结果输出:
3、JSP的动作
JSP的动作元素⽤来控制JSP容器的动作,可以动态插⼊⽂件、重⽤JavaBean组件、导向另⼀个页⾯等。动作元素和指令元素不同,动作元素是在客户端请求时动态执⾏的,每次有客户端请求时,可能都会被执⾏⼀次,⽽指令元素是在编译时被编译执⾏,它只会被编译⼀次。
1)<jsp:useBean>
useBean动作⽤于创建引⽤,并将现有的Bean组件嵌⼊JSP。JavaBean实际上是⼀个类,这个类可以重复使⽤。在JSP程序
中,JavaBean常⽤来封装事务逻辑、数据库操作等。
<jsp:useBean id = "BeanName" class="BeanClass" scope="page/request/session/application">
2)<jsp:setProperty>
setProperty动作⽤于设置useBean中指定的Bean的属性的值。setProperty动作指定名称、属性、值和参数,⽤于赋给Bean的属性。        <jsp:setProperty name="BeanAlias" property="PropertyName" value="Value" param="parameter">,其中name为useBean中使⽤的Bean的ID,property是指定为之设
置的Bean的属性名称,value为设置的显⽰值,param指定⽤于输⼊并给属性赋值的HTML标签。param属性不能与value属性⼀起使⽤。
3)<jsp:getProperty>
getProperty动作⽤于获取Bean中指定的属性中的值,系统先将收到的值转换成字符串,然后再将其作为输出结果发送。
<jsp:getProperty name = "BeanAlias" property="PropertyName">,其中name为useBean中使⽤的Bean的ID,property指定要从中检索的属性名称。
4)<jsp:include>
include动作⽤于将其他HTML页⾯或JSP页⾯中的内容合并到当前页⾯,或将其中的⽂件插⼊到当前页⾯。
a、不带参数的include动作:
<jsp:include page="weburl" flush="true">,其中page指定要嵌⼊当前页⾯的页⾯的⽹址,flush⽤于在嵌⼊其他响应前清空存储在缓冲区中的数据。
b、带参数的include动作:
<jsp:include page="weburl" flush="true">
<jsp:param name="ParamName" value="ParamValue"/>
</jsp:include>
其中name指定被嵌⼊到页⾯中的参数的名称,value指定参数的值。
5)<jsp:forward>
forward动作⽤来把当前的JSP页⾯重定向到另⼀个页⾯(HTML⽂件、JSP页⾯、Servelt)。地址还是当前页⾯的地址,内容则是另⼀个页的内容。
<jsp:forward page="url"/>
6)<jsp:param>
param提供其他JSP动作的名称/值信息。
<jsp:param name="ParamName" value="ParamValue"/>
7)<jsp:plugin>
plugin⽤于连接客户端的Applet和Bean插件。plugin动作为Web开发⼈员提供了⼀种在JSP⽂件中嵌⼊客户端运⾏的Java程序(如Applet、JavaBean)的⽅法。在处理这个动作的时候,根据客户端浏览器的不同,JSP在执⾏以后将分别输出为OBJECT或MEBED这两个不同的HTML元素。
4、注释
1)<!--...-->:在客户端查看源代码时能看到的注释
2)<%-- ... --%>:在客户端查看源代码时⽆法看到的注释。