在一个JSP页面中,主要分为3种元素: 编译指令、操作指令和JSP指令。
(1)编译指令告诉JSP的解析引擎(比如Tomcat),需要在编译时做什么动作,比如引入其他的类,设置JSP的页面用什么语言编码。
(2)操作指令则是在JSP页面被请求时,动态执行的,比如根据某个条件动态跳转到另外一个页面。
(3)JSP代码就是我们嵌入JSP页面的Java代码,这又分为两种: 一种是JSP页面中一些变量方法的声明,在声明时,使用"<!%"和"%>"
标记;另一种是用"<%"和%>"包含的JSP代码段。
编译指令:
可以通过一定的指令,让JSP容采取必要的动作。例如,可以指定一个专门的错误处理页面,当JSP页面出现错误时,可以由JSP
容器自动地调用处理页面。
page指令
page指令是针对当前页面的指令。page指令"<%@"和"%>"字符串构成的标记符来指定。在标记符中是代码体,包括指令的类型和值。
例如,“<%@page import="java.sql.*"%>”。告诉JSP容器将java.sql包中的所有类都引入当前的JSP页面。
常用的page指令标记有8个:language、extends、import、errorPage、isErrorPage、contentType、isThreadSafe和session。
(1)language设置JSP页面中用到的语言,默认值为"Java",也是目前唯一有效的设定值。使用的语法是"<%@ page language="java"%>"。
(2)extends设置目前JSP页面要继承的父类,一般情况下不需要进行设置。在默认情况下,JSP页面的默认父类是FttpIsBase。
例如当前JSP页面要继承mypackage包下的myclass 类,相应的声明语句为: <%@ page extends="mypackage.myclass" %> 。
(3)import设置当前JSP页面中要用到的Java类,这些Java类可能是SunJDK中的类,也可能是程序员自己自定义的类。
例如<%@ page import="java.sql.*,java.util.*"%>。 有些类在默认情况下已经加入到当前JSP页面,而不需要特殊声明,包括4个类:
java.lang.*; java.servlet.*; java.servlet.jsp.*; java.serlet.http.*。
(4)errorPage用来设定当JSP页面出现异常(Exception)时,所要转向的页面。如果没有设定,则JSP页面会用默认的页面来显示出错信息。
例如<%@ page errorPage="/error/error_page"%> 。
(5)isErrorPage用来设定当前的JSP页面是否作为传回错误页面的网页,默认值是"false"。如果设定为"true",则JSP容器会在当前的页面
中生成一个exception对象。
(6)contentType属性用来设定传回网页的文件格式和编码方式,一般使用"text/html;charset=GBK"。
(7)isThreadSafe定义JSP容器只想能够JSP程序的方式,默认值为"true",代表JSP容器会以多线程方式运行JSP页面。当设定值为"false"时, JSP容器会以单线程方式运行JSP页面。
(8)session定义当前JSP页面中是否要用到session默认值为"true"。
include指令 inlcude指令用户过来指定怎样把另一个文件包含到当前的JSP页面中,这个文件可以是普通的文本文件,也可以是一个JSP页面。
例如<%@ include file="logo.htm"%>。
采用include指令,可以实现JSP页面的模块化,使JSP的开发和维护变得非常简单。
taglib指令
taglib指令允许页面使用标记扩展(定制标记),命名了标记库。在JSP页面里遇到定制的标记时,引擎将找到在该标记库中的标记
并且找到要实施操作——实际上是执行Java代码。taglib指令的语法为: <%@ taglib uri="tagLibraryURI" prefix="tagPrefix"%>。
(1)uri是一个URI标识标记库描述器,一个标记库描述器用来唯一的命名一组定制的标记,并且告诉包容器如何处理特殊的标记。
(2)tagPrefix定义一个prefix:tagname形式的字符串前缀,用于定义定制的标记。所保留的前缀为jsp、jspx、java、servlet、sun和
sunw。
操作指令:
JSP编译指令是让JSP容器自动采取动作,但对于Web开发人员,有些时候想要自己控制JSP页面的运行,这时可以采用JSP 操作指令
操作指令包括:jsp:include指令、jsp:froward指令、jsp:param指令、jsp:useBean指令、jsp:setProperty指令和jsp:getProperty指令等。
(1)jsp:include指令
jsp:include标准工作用于在当前的JSP页面中叫爱如警惕啊和动态的资源。语法格式为:<jsp:include page="test.htm"/> 。
jsp:include指令必须以"/"结束,功能和include指令相同。
(2)jsp:forward操作指令用于把当前的JSP页面转发到另一个页面上。基本语法为:<jsp:forward page="test2.jsp"/> 。
使用该功能时,浏览器的地址栏中地址不会发生任何变化。 (3)jsp:param指令
使用jsp:param操作指令可以在执行jsp:forward操作动作时,追加参数,按照“名字/值”的方式进行传递。
jsp:param操作指令标记"<jsp:param>"开始,以"/>"结束。比如"<jsp:param name="oper" value="add"/>"。可以将jsp:forward操作指令
和jsp:param操作指令结合到一起来使用。
<jsp:forward page="mypage.jsp">
<jsp:param name="param1" value="value1"/>
<jsp:param name="param2" value="value2"/>
</jsp:forward>
跳转到的页面可以利用request对象来读取这些参数的值。jsp:useBean指令、jsp:setPropert指令和jsp:getProperty指令都是用来操作 JavaBean的。
JSP代码:
JSP代码包括两种: 一种是JSP页面中一些变量和方法的声明,在声明时,使用"<%!...%>"标记;另一种是常用到的"<%...%>"包含JSP代码块。
(1)变量和方法
在"<%!...%>"标记符号之间声明变量和方法,变量类型可以是Java语言允许的任何数据类型。在JSP页面被编译执行的是时候,整个页面被
编译成一个类,这些变量是JSP页面类的成员变量。
这些变量被共享的任何一个用户的操作都会影响到其他用户。
<%@ page contentType="text/html;charset=GBK"%>
<%! int i=0; %>
<%
i++;
out.print(i);
%>个人访问本站
也可以声明函数,一般会在函数前面就加上synchronized关键字,功能是当前一个用户在执行该方法时候,其他的用户必须等待,直到该
用户完成操作。
<%@ page contentType="text/html;charset=GBK" %>
<%!
int number=0;
synchronized void countPeople()
{
number++; }
%>
<%
countPeople();
%>
你是第<%out.print(number);%>个访问本站的客户
(2)代码块
可以在"<%...%>"之间插入Java程序片,一个JSP页面可以有许多程序片,这些代码将被JSP服务器按照顺序执行。在一个代码块中声明的变
量是JSP页面的局部变量,只在当前页面中有效。
<%@ page contentType="text/html;charset=GBK" %>
<% int i=0; %>
<%
i++;
out.print(i);
%>个人访问本站
|
|