JSP(Java Server Pages)JSP技术规范是JavaServlet技术的发展和自然扩展,将转化成Servlet。根据客户端请求创建动态Web页面的文本文件,是J2EE中的“视图”组件。
JSP与Servlet相比的优势:JSP可以分离动态和静态内容。
在Servlet中,静态内容与动态内容是一起产生的,所以关于页面的任意一点修改都需要重新编译Servlet。而JSP不同,JSP可以通过使用标签或是JavaBean技术把展现与内容相分离。JSP使用JavaBean产生动态内容,在JSP页面使用标签或脚本利用这些JavaBean。当页面设计人员修改静态内容后,JSP引擎会自动编译JSP页面。此外,JSP页面可以不经修改运行在不同的平台和Web服务器上。
二、 JSP语法基础
1、 指令
指令(Directive):该元素的作用是在将JSP源文件解析成Java文件时指示JSP引擎做出相应的操作,从而达到预期的目的 。JSP指令在整个页面范围内有效,且不在客户端产生任何输出。
基本格式为<%@directive attribute1=“”... attribute2=“”%>
常见的指令有:page、include、taglib
(1)、page指令
用来设定JSP页面的全局属性和相关功能。
作用于整个JSP文件,可以放到JSP页面的任何位置,但为了便于阅读和格式规范,通常放到JSP页面开始的位置。
一个JSP文件可以包含多个page指令,指令之间是独立的。
除了import和pageEncoding属性以外,每个属性只能定义一次。
Page指令的属性:
1) language属性:
指定JSP使用的脚本语言,默认值是java语言,目前JSP中只能使用java。可以不写,如果写必须写在声明、脚本片段和表达式的前面,例如:<%@ page language=“java” %>
2) info属性
通常用于定义JSP页面的描述信息。属性值使用getServletInfo()方法得到,此方法通常用于获得描述JSP文件的信息。
<%@ page info="你好jsp" contentType="text/html;charset=gb2312"%>
<% out.println(getServletInfo()); %>
3) import属性
import=”import_list”,import属性用来说明在后面代码中会用到的类和接口,这些类和接口可能是Sun JDK中的类,也可能是自己定义的类。在Java中,如要载入多个包,需用import分别指明,在JSP里,可用import指明多个包,之间用逗号隔开。<%@ page import=" java.text.*,java.util.*" %>,或者分多行写:
<%@ page import="java.text.*"%>
<%@ page import=" java.util.*"%>
有些类默认被载入JSP当前页面,不需要进行声明,这些类是:
– java.lang.*
– javax.servlet.*
– javax.servlet.jsp.*
– javax.servlet.http.*
4) session属性
session=”true|false”
session属性用来指定在当前页中是否允许session操作。默认值为true。
举例:session1.jsp
<%@ page session="false" %>
<%session.setAttribute("aa","bb"); //错误,不认识session对象,将false换成true即可 %>
5) contentType属性
用于设置返回浏览器网页的内容类型和字符编码格式。默认值是“text/html; charset=ISO-8859-1”。
如果需要在返回浏览器的HTML页面中显示中文,我们经常会用到字符集GBK,gbk,gb2312 。
<%@page contentType=“text/html;charset=GBK” %>
通常将该语句写到文件的最上面。
GB2312/GBK是汉字的国标码,专门用来表示汉字,是双字节编码,其中gbk编码能够用来同时表示繁体字和简体字,而gb2312只能表示简体字,gbk是兼容gb2312编码的。
6) pageEncoding属性
指定JSP页面的字符编码,默认为ISO-8859-1。
在JSP标准的语法中,如果pageEncoding属性存在,那么JSP页面的字符编码方式就由pageEncoding决定,否则就由contentType属性中的charset决定,如果charset也不存在,JSP页面的字符编码方式就采用默认的ISO-8859-1。
例如: <%@ page pageEncoding=“GBK”%>
7) errorPage属性
errorPage属性用来指定页面的URL。在JSP执行过程中有异常发生时,异常一般并不由此JSP页面处理,而由errorPage属性指定的页面处理。
例如,指定当前页面出错时,调用handleError.jsp页面处理错误的格式如下: <%@ page errorPage=“handleError.jsp”%>
8) isErrorPage属性
isErrorPage属性说明当前页面是否为异常处理页面。
isErrorPage属性指明该页面是否为另一页面的异常处理页面,默认值是“false”。若设定为“true”,则JSP容器会在当前的页面生成一个对象exception。
<%@ page isErrorPage=“true” %>
9) buffer属性
指定处理页面输出内容时的缓冲区大小,默认值是8kb。
如果buffer的取值为“none”,输出将不使用缓冲,所有输出都直接写到客户端。
置缓冲区的大小只能是kb的整数倍,页面的输出首先被写入指定大小的缓冲区内。当缓冲区变满时如何处理取决于autoFlush属性的值。
buffer指定的值只是缓冲区的最小值,JSP容器选择的缓冲区可能比指定的大。
例如:<%@ page buffer=“16kb”%>
10) autoFlush属性
autoFlush属性控制的是当页面输出进入缓冲区并且缓冲区变满的情况。
如果autoFlush属性取值“true”,那么缓冲区变满之后需要强制输出。
如果autoFlush属性取值“false”,那么缓冲区变满之后将引发一个异常。
autoFlush属性的默认值是“true”。
11) isELIgnored属性
JSP2.0中引入了表达式语言(Expression Language,EL),利用EL可以在不使用脚本的情况下构造动态网页。
isELIgnored属性值为”true”时,会禁止EL表达式的计算。
(2)taglib指令
标记库:开发人员可以使用标记库来定义自己的JSP标记,页面设计人员可以直接使用标记库中的自定义标记,而同时隐藏底层的实现细节。
taglib指令用于引入JSP页面中需要使用的标记库的定义。
语法:<%@ taglib prefix=“前缀名“ uri=“标记库的uri地址“ %>
举例:<%@ taglib uri=”http://myjsp.com.cn/exampleTags” prefix=”myTags” %>
<myTags:doSomething></myTags:doSomething>
(3) include指令
作用:用来向当前页面插入一个静态文件,这个静态文件可以是html文件、jsp文件或其他文本文件或者只是一段java代码。JSP编译器在碰到include指令时,就会读入包含的文件。
常见功能:通常当应用程序中所有的页面的某些部分(例如标题、页脚、导航栏或信息栏)都相同的时候,我们就可以考虑用include。
被包含文件中使用<html>、</html>和<body>、</body>等标签时,要防止与包含文件中的相应标签冲突而造成错误。
语法格式如下:<%@ include file=”URL” %> URL是要插入文件的URL
2、 脚本元素
脚本元素,用Java写的脚本代码,以<%开始,以%>结束,可以分为如下三类: 声明、脚本段、表达式 。
1) 声明
用来定义程序中使用的实体,可以声明变量、方法和类,以<%!开始,以%>结束。
语法:<%! 变量声明;方法声明; %>
变量声明<%! int a,b,c; String d;%>
方法声明<%! public int add(int a,int b){return a+b;} %>
在声明中定义的变量是页面内的全局变量;
注意:每个声明仅在一个JSP页面中有效,若想在多个JSP页面中有效,可以将声明写在一个JSP页面中,然后使用Include指令将其包含在每个JSP页面中。
2) 脚本段
以<%开始,以%>结束,中间包括一段合法的java代码(多个语句、方法、变量、表达式)。
格式: <% 合法的java代码; %>
一个jsp页面可以用任意数量的脚本片段,这些片段在请求处理时在服务器端按顺序执行
脚本段能够完成的功能:
– 声明将要用到的变量
– 显示输出信息
– 使用任何隐含对象和使用<jsp:useBean>声明过的对象。
– 当JSP页面受到客户端请求时,脚本段就会自动执行。
3) 表达式
以<%=开始,以%>结束,中间为一个合法的Java表达式,用来将中间表达式的内容输出到页面。
语法:<%=expression%>
表达式的执行结果会被自动转换为字符串,显示在JSP页面中;
表达式左边有“<%=”,右边有“%>”;
由于表达是不是完整的java语句,所以在表达式的后面不能放置“;”;
例如:输出计算结果
<%=1+2+3%>
<%=getDate()%>
3、 标准动作(JSP标记)
动作:主要在请求处理阶段起作用,能够影响输出流和对象的创建、使用修改等,它按照XML语法进行书写。
格式:
<prefix:tagName [attribute1=value1]…[attributen=valuen]/ >
或 <prefix:tagName [attribute1=value1]…[attributen=valuen] >
tagbody </prefix:tagName>
JSP使用“<jsp: >”表示动作,用来控制JSP引擎的动作。
注意:JSP行为元素遵循XML元素的语法格式。
语法三种形式:
<tag attr1=””……” ……>body</tag>
<tag attr1=””……” ……> </tag>
<tag attr1=””……” ……/>
1) include动作
作用:在当前的JSP页面中加入(包含)静态和动态的资源。
a) 静态网页:直接将内容加入到JSP网页中。
b) 动态网页:编译运行该文件加入到JSP网页中。
语法格式:
<jsp:include page=”URL或<%=expression%>” flush=”true”/>
或者
<jsp:include page=”URL或<%=expression%>” flush=”true”>
{<jsp:param name=”parameterName” alue=”parameterValue”/>}*
</jsp:include>
2) forward动作
作用:把当前的JSP页面重新定向到另一个页面上。
语法格式:
<jsp:forward page=”重定向的页面”>
{<jsp:param name=”name” value=”value”/>}*
</jsp:forward>
注意:<jsp:forward>标记后面的代码不会被执行。用户看到的地址是当前页面的地址,而内容则是另一个页面的。
3) plugin动作
必选属性:
a) type:bean,applet
b) code:待执行对象的类名,必须放到codebase指定的目录下
c) codebase:指定被包含对象的java类所在目录
4) param动作
jsp:param:用来提供key/value的信息,可以与<jsp:include><jsp:forward><jsp:plugin>一起搭配使用。
例如:
<jsp:forward page=”URL">
<jsp:param name=”parameterName1” alue=”parameterValue1”/>
<jsp:param name=”parameterName2” value=”parameterValue2”/>
</jsp:forward>