jsp页面主要由HTML、xml标记语言、脚本元素、注释、指令和动作组成。本章主要讲解JSP页面基本语法构成
本章主要内容
1.jsp基本页面结构
2.jsp的脚本元素
3.jsp注释
4.jsp指令
5.jsp常用动作
例5-1 页面结构实例:(pagestructure.jsp)
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP页面基本结构实例</title>
</head>
<body>
<%!int sum=0;
int x = 1;
%>
<%
while ( x <= 10 )
{
sum += x;
++x;
}
%>
<p>1加到10的结果是:<%=sum%></p>
<p>现在的时间是:<%=new java.util.Date()%></p>
</body>
</html>
5.2 jsp中的脚本元素
5.2.1 变量、方法的声明
在JSP页面中可以声明一个或者多个合法的变量和方法,声明后的变量和方法可以在本JSP页面的任何位置使用,并将在JSP页面初始化时被初始化。
JSP声明的语法格式如下:
<%! declaration; [ declaration; ] ... %>
其中declaration为声明的变量、方法的名称和内容。
声明变量和方法时,需要注意以下几点:
1.声明以“<%!”开头,以“%>”结尾。
2.变量声明必须以";"结尾。
3.变量和方法的命名规则与Java中的变量和方法的命名规则相同。
4.可以直接使用在<% @ page %>中被包含进来的已经声明的变量和方法,不需要对它们重新进行声明。
5.一个声明仅在一个页面中有效。如果想每个页面都用到一些声明,最好把它们写成一个单独的文件,然后用<%@ include %>或<jsp:include >元素包含进来。
例如:
<%! int i=0;%>
<%! int x ,y,z,a,b,c,sum;%>
<%! String str=“ 中国加油!我爱我的祖国”;%>
<%! Circle a=new circle(1.0);%>
<%! Date da=new Date();%>
例5-2 声明实例(declare.jsp)
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>变量与方法的声明</title>
</head>
<body>
<%! String str="JSP带你走进动态网页时代!"; %>
<%!String output()
{
return str;
}
%>
<%=output()%>
</body>
</html>
5.2.2 表达式
JSP表达式常用在以下几种情况:
1.向页面输出内容。
2.生成动态的链接地址。
3.动态指定Form表单处理页面。
JSP中的表达式可以将某个计算结果转换成一个字符串并直接在网页上输出。
表达式的语法格式如下:
<%= expression %>。
JSP的表达式中没有分号,只有在加引号的字符串部分才使用分号。
注意:
在“<%”与“=”之间不要有空格。
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>expression实例</title>
</head>
<body>
<%!String name="www.sohu.com";
String path="welcome.jsp";
String page="login.jsp";
%>
<br>
用户名:<%=name%>
<br>
<a href="<%=path%>">链接到welcome.jsp</a>
<br>
<form action="<%=page%>"></form>
</body>
</html>
5.2.3 脚本
JSP脚本即Scriptlet,也就是JSP中的代码部分,是一段Java代码。
脚本定义的变量和方法在当前整个页面内有效,当变量所在页面关闭该变量就会被销毁
<% scriptlet %>
例5-4 脚本实例(scriptlet.jsp)
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>scriptlet实例</title>
</head>
<body>
<%! int x=1;%>
<table>
<%if(x==1){%>
<tr><td>欢迎登录,您的权限是管理员!<td/></tr>
<%}
else{
%>
<tr><td>欢迎登录,您的权限是普通用户!<td/></tr>
<%}%>
</table>
</body>
</html>
5.3 jsp中的注释
5.3.1 隐藏注释
隐藏注释也是JSP的标准注释,写在JSP程序中,在发布网页时完全被忽略,不发给客户,当希望隐藏JSP程序的注释时是很有用的。
其语法格式为:<%-- comment --%>
comment为要添加的文本注释内容。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>隐藏注释实例</title>
</head>
<body>
<h1>JSP页面中隐藏注释演示!</h1>
<%--这一行注释在发布网页时不会被看到的--%>
</body>
</html>5.3.2 HTML注释
发布网页时可以在浏览器源文件窗口中看到HTML注释,在这种注释中也可以使用JSP的表达式。
其语法格式为:<!-- comment [ <%= expression %> ] -->
其中comment可以是文字说明,expression为JSP表达式。
5.3.3 Java注释
在JSP程序中,也可以遵循Java语言本身的注释规则对代码进行注释,这样的注释和隐藏注释相似,在发布网页时完全忽略,在浏览器的源文件窗口中看不到。
其语法格式为:<%/*comment*/%>
其中comment为要添加的注释文本
5.4 JSP的指令
指令(directive)描述jsp文件换换成jsp服务器所能执行的java代码的控制信息,用于指定整个jsp页面的相关信息,并设置jsp页面的相关属性
语法格式:
<%@ directivename attribute1=”value”,attribute2=“value”….%>
其中,directiveName是指令名称、include指令和taglib指令
5.4.1 page指令
page 指令用来定义JSP文件中的全局属性,它描述了与页面相关的一些信息,其作用域为它所在的JSP文件页面和其包含的文件。
页面指令一般位于JSP页面的顶端,但是可以放在JSP页面的任何地方,无论把<% @ page %>指令放在JSP的文件的哪个地方,它的作用范围都是整个JSP页面。为了JSP程序的可读性以及好的编程习惯,最好把它放在JSP文件的顶部。
在同一个JSP页面中可以有多个page指令。在使用多个page指令时,其中的属性除import属性外只能使用一次。
page 指令的语法格式如下:
1.<%@ page
2.[ language="java" ]
3.[ extends="package.class" ] 用于指定jsp编译器父类的完整限定名,此jsp页面产生的servlet将由该父类扩展而来
<%@page extends=”javax.servlet.http.httpservlet”%>
4.[ import="{package.class | package.*}, ..." ]
用于导入jsp页面使用的java api类库。import属性是所有page属姓可以多次设置的属性,用来指定jsp页面所用到的类。
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ page import="java.util.Date" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>page指令import属性实例</title>
</head>
<body>
<%
Date date = new Date();
%>
<h1> page指令的import属性实例演示!</h1>
<p>现在的时间是:<%=date%></p>
</body>
</html>5.[ session="true | false" ]
指定是否可以使用seesion对象,若充许页面参与http会话,就设置为true,否则设为false,其默认值为true
例5-9 seesion实例
6.[ buffer="none | 8kb | sizekb" ]
用于设定页面的缓冲区大小(字节数),属性值为none,表示禁用缓冲区大小,属性值为none表示禁用缓冲区为8kb
7.[ autoFlush="true | false" ]
用于指定jsp页面缓冲区是否自动刷新输出,其默认值为true.
8.[ isThreadSafe="true | false" ]
用于指定jsp页面是否能够处理一个以上的请求,如果为true,则该页面可同时收到jsp引擎发出的多个请求
9.[ info="text" ]
指定页面jsp页面的相关信息文本,无默认值
10.[ errorPage="relativeURL" ]
例5-10 错误处理实例
errorMake.jsp代码如下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>page指令errorPage属性实例</title>
</head>
<body>
<h1> page指令的errorPage属性实例演示!</h1>
<%!
int i=0;
%>
<%=6/0%>
</body>
</html>error.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@ page isErrorPage="true"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd"><html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
异 常:<%= exception %>
错误原因:<%= exception.getMessage()%>
</body>
</html>11.[ contentType="mimeType [ ;charset=characterSet ]" ]
用于指定内容mime类型和jsp页面的编码方式。默认为iso-8859-1
12.[pageEncoding=" pageEncoding "]
默认为iso-8859-1 支持UTF-8
13.[ isErrorPage="true | false" ]
14
5.4.2 include指令
include指令用于在JSP编译时,为页面插入一个静态文件,如JSP页面、HTML页面、文本文件或是一段Java程序。
include指令的语法格式如下:
<%@ include file=“filename” %>
其中filename指被包含的文件的名称。
include指令只有一个file 属性。
5.4.3 taglib指令
指定页面使用的标签库以及自定义标签的前缀。
taglib指令用来指定页面中使用的标签库以及其自定义标签的前缀。
taglib语法格式为:
<%@taglib uri=" tagLibraryURI" prefix=" tagPrefix" %>
uri属性:制定标签库相对路径
【功能说明】uri(Uniform Resource Identifier,统一资源标识符)属性用于指定标记库的存放位置,并告诉JSP引擎在编译JSP程序时如何处理指定标签库中的标签,无默认值。uri属性可以是在TLD (标记库描述符)文件或web.xml文件中定义的标记库的符号名,也可以是TLD文件或JAR文件的相对路径。
prefix属性:制定标记前缀
【功能说明】prefix属性用于指定标记库中所有动作元素名中使用的前缀,无默认值。
5.5 jsp中常用的动作
在客户请求jsp页面时,jsp动作利用xml语法格式的标记来控制servlet引擎的行为。利用jsp动作可以动态地插入文件,重用javabean组件,把用户重定向
到另外的页面,为java插件生成html代码
5.5.1 <jsp:param> 动作
1.name属性
不接收动态值
2.value属性
参数值,可以接收动态值
5.5.2 <jsp:include>动作
动作用来把指定文件插入正在生成的页面中
<jsp:include>动作语法:
<jsp:include page=”relativeURL” [flush=”true|false”]>
<%@ include file=“***”%>指令与<jsp:include page=“***”>动作区别
<%@ include %>指令是在主Jsp页面转换成Servlet时,将文件包含到文档中。而<jsp:include>动作在主Jsp页面被请求时,
将次级页面的输出包含进来,因此所包含文件变化总会被检查到,更适合包含动态文件。
使用include指令的页面要比使用jsp:include的页面难维护的多。因为相关规范要求服务器能够检测出主页面什么时候发生了更改,
并不要求它们能检测出包含文件什么时候发生了改变(并且重新编译Servlet),因此,大多数服务器中,包含文件发生更改时,
对于所有用到该文件的Jsp文件,我们都要更新它们的修改日期。
include指令更为强大。include指令允许所包含文件含有影响主页面的Jsp代码,比如响应报头设置和字段的定义。
hello.jsp
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>Hello World!</h1>
</body>
</html>htincludeaction1.jsp
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>include动作实例演示</title>
</head>
<body>
<h1> include动作实例演示!</h1>
以下是hello.jsp页面的内容:
<hr>
<jsp:include page="hello.jsp"/>
<hr>
</body>
</html>
5.5.3 <jsp:useBean> 动作
jsp:useBean>动作用来装载一个将在JSP页面中使用的JavaBean。这个功能非常有用,能够实现Java组件重用。
<jsp:useBean>语法格式如下:
<jsp:useBean id="beanInstanceName" scope="page | request | session | application"
1. id属性:引用该Bean的变量。
【功能说明】id属性指定该JavaBean的实例名称,不可接受动态值。如果能够找到id和scope相同的Bean实例,
<jsp:useBean>动作将使用已有的Bean实例而不是创建新的实例
2. scope属性:指定Bean的作用域
【功能说明】scope 指定Bean作用域范围,不可以接受动态值,可选作用域有:page,request,session和application。
默认值是page,表示该Bean只在当前页面内可用(保存在当前页面的PageContext内)。
request表示该Bean在当前的客户请求内有效(保存在ServletRequest对象内)。
session表示该Bean对当前HttpSession内的所有页面都有效,即会话作用域。
application表示该Bean在任何使用相同的application的JSP页面中使用都Bean,即应用作用域。
scope之所以很重要,是因为<jsp:useBean>只有在不存在具有相同id和scope的对象时才会实例化新的对象
;如果已有id和scope都相同的对象则直接使用已有的对象,此时<jsp:useBean>开始标记和结束标记之间的任何内容都将被忽略。
3.class="package.class"
class旨定bean的类路径和类名,不可接受动态值 ,这个class不能是抽象的
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>jsp:useBean动作实例演示</title>
</head>
<body>
<h1> jsp:useBean动作实例演示!</h1>
<jsp:useBean id="clock" class="java.util.Date" />
现在时间:${clock}
</body>
</html>4.type="package.class"
type属性:指定Bean的类型名称
【功能说明】type属性指定引用该对象的变量的类型,它必须是Bean类的名字、超类名字、该类所实现的接口名字之一。
变量的名字是由id属性指定的
5.beanName="package.class"/>
beanName属性:指定Bean的名字
【功能说明】beanName属性用于指定bean的名字,可以接受动态值。beanName属性必须与type属性结合使用,不能与class属性同时使用。
5.5.4 <jsp: setProperty> 动作
<jsp: setProperty>动作用来设置、修改已经实例化的Bean中的属性值。
<jsp: setProperty>语法格式如下:
<jsp:setProperty name="beanInstanceName" property= "*"
|property="propertyName" [ param="parameterName"| value="value"]/>
name属性:指定bean的名称。
【功能说明】name属性是必需的,它表示要设置属性的是哪个Bean,不可接受动态值。
property属性:指定bean的属性名
【功能说明】property属性是必需的。它表示要设置哪个属性。如果property的值是“*”,表示所有名字和Bean
属性名字匹配的请求参数都将被传递给相应属性的set方法。
param属性:指定请求参数名
【功能说明】param 是可选的。它指定用哪个请求参数作为Bean属性的值。如果当前请求没有参数,则什么事情也不做,
系统不会把null传递给Bean属性的set方法。因此,你可以让Bean自己提供默认属性值,只有当请求参数明确指定了新值时才修改默认属性值。
5.5.5 <jsp: getProperty> 动作
5.5.6 <jsp: forward> 动作
5.5.7 <jsp:plugin> 动作