??xml version="1.0" encoding="utf-8" standalone="yes"?> 在客L(fng)昄一个注? JSP 语法 <!-- comment [ <%= expression %> ] --> 例子 1 <!-- This file displays the user login screen --> 在客L(fng)的HTML源代码中产生和上面一L(fng)数据Q? <!-- This file displays the user login screen --> 例子 2 <!-- This page was loaded on <%= (new java.util.Date()).toLocaleString() %> --> 在客L(fng)的HTML源代码中昄? <!-- This page was loaded on January 1, 2000 --> 描述 q种注释和HTML中很像,也就是它可以?查看源代?中看到?/p>
唯一有些不同的就是,你可以在q个注释中用表达式(例子2所C?。这个表辄是不定的Q由面不同而不同,你能够用各U表辑ּQ只要是合法的就行?/p>
写在JSPE序中,但不是发l客戗? JSP 语法 <%-- comment --%> 例子Q?/p>
<%@ page language="java" %> 描述 用隐藏注释标记的字符?x)在JSP~译时被忽略掉。这个注释在你希望隐藏或注释你的JSPE序时是很有用的?/p>
JSP~译器不是会(x)?lt;%--and--%>之间的语句进行编译的Q它不会(x)昄在客L(fng)览器中Q也不会(x)在源代码中看到在<%-- --%>之间Q你可以L写注释语句,但是不能使用 "--%>",如果你非要用请?--%\>". 在JSPE序中声明合法的变量和方? JSP 语法 <%! declaration; [ declaration; ]+ ... %> 例子 <%! int i = 0; %> 描述 声明你将要在JSPE序中用到的变量和方法。你也必这样做Q不然会(x)出错. 你可以一ơ性声明多个变量和Ҏ(gu)Q只要以";"l尾pQ当然这些声明在Java中要是合法的? 当你声明Ҏ(gu)或变量时Q请注意以下的一些规? 声明必须?;"l尾(Scriptlet有同L(fng)规则Q但?表达式就不同?. 一个声明仅在一个页面中有效。如果你x个页面都用到一些声明,最好把它们写成一个单独的文gQ然后用<%@ include %>?lt;jsp:include >元素包含q来?/p>
包含一个符合JSP语法的表辑ּ JSP 语法 <%= expression %> 例子 <font color="blue"><%= map.size() %></font> 描述 表达式元素表C的是一个在脚本语言中被定义的表辑ּQ在q行后被自动转化为字W串Q然后插入到q个表达C在JSP文g的位|显C。因个表辑ּ的值已l被转化为字W串Q所以你能在一行文本中插入q个表达式(形式和ASP完全一?. 当你在JSP中用表辑ּ时请C以下几点Q? 你不能用一个分P"Q?Q来作ؓ(f)表达式的l束W?但是同样的表辑ּ用在scriptlet中就需要以分号来结了(jin)Q查看Scriptlet q个表达式元素能够包括Q何在Java Language Specification中有效的表达? 有时候表辑ּ也能做ؓ(f)其它JSP元素的属性?一个表辑ּ能够变得很复杂,它可能由一个或多个表达式组成,q些表达式的序是从左到叟?/p>
包含一个有效的E序D? JSP 语法 <% code fragment %> 例子 <% 描述 一个scriptlet能够包含多个jsp语句Q方法,变量Q表辑ּ 因ؓ(f)scriptlet,我们便能做以下的? 声明要用到的变量或Ҏ(gu)Q参?声明). 定义JSP文g中的全局属?
你可以在一个页面中用上多个<% @ page %>指o(h)Q但是其中的属性只能用一ơ,不过也有个例外,那就是import属性。因为import属性和Java中的import语句差不?参照Java Language)Q所以你p多用此属性几ơ了(jin). 无论你把<% @ page %>指o(h)攑֜JSP的文件的哪个地方Q它的作用范围都是整个JSP面。不q,Z(jin)JSPE序的可L,以及(qing)好的~程?fn)惯Q最好还是把它放在JSP文g的顶? 定义一个标{ֺ以及(qing)其自定义标签的前~. JSP 语法 <%@ taglib uri="URIToTagLibrary" prefix="tagPrefix" %> 例子 <%@ taglib uri="http://www.jspcentral.com/tags" prefix="public" %> 描述 <% @ taglib %>指o(h)声明此JSP文g使用?jin)自定义的标{,同时引用标签库,也指定了(jin)他们的标{前缀? q里自定义的标签含有标签和元素之分。因为JSP文g能够转化为XML,所以了(jin)解标{֒元素之间的联pd重要。标{֏不过是一个在意义上被抬高?jin)点的标讎ͼ是JSP元素的一部分。JSP元素是JSP语法的一部分Q和XML一h开始标记和l束标记。元素也可以包含其它的文本,标记Q元素。比如,一个jsp:plugin元素?lt;jsp:plugin>开始标记和</jsp:plugin>l束标记Q同样也可以?lt;jsp:params>?lt;jsp:fallback>元素. 你必d使用自定义标{之前?lt;% @ taglib %>指o(h)Q而且你可以在一个页面中多次使用Q但是前~只能使用一? 属?/p>
uri="URIToTagLibrary" Uniform Resource Locator (URL), ?RFC 2396 定义, 查看 http://www.hut.fi/u/jkorpela/rfc/2396/full.html 重定向一个HTML文gQJSP文gQ或者是一个程序段. 获取Bean的属性|用于昄在页面中 JSP 语法 <jsp:getProperty name="beanInstanceName" property="propertyName" /> <h2> Calendar of <jsp:getProperty name="calendar" property="username" /> </h2> Bean一起用? 属?/p>
name="beanInstanceName" property="propertyName" 技? 包含一个静(rn)态或动态文? or <jsp:include page="{relativeURL | <%= expression %>}"flush="true" > <jsp:param name="parameterName" value="{parameterValue | <%= expression %>}" />+ </jsp:include> Examples
<jsp:include page="copyright.html" /> <jsp:include page="/index.html" /> <jsp:include page="scripts/login.jsp"> <jsp:param name="username" value="jsmith" /> </jsp:include> 描述 有可能只是包含一些信息而已Q而不需要执行?lt;jsp:include>能够同时处理q两U文Ӟ因此你就不需要包含时q要判断此文件是动态的q是?rn)态的. flush="true" <jsp:param name="parameterName" value="{parameterValue | <%= expression %> }" />+ 执行一个applet或Bean,有可能的话还要下载一个Java插g用于执行? JSP 语法
value="{parameterValue | <%= expression %>}" /> ]+
<jsp:plugin type=applet code="Molecule.class" codebase="/html"> <jsp:params> <jsp:param name="molecule" value="molecules/benzene.mol" /> </jsp:params> <jsp:fallback> <p>Unable to load applet</p> </jsp:fallback> </jsp:plugin>
<jsp:plugin>元素用于在浏览器中播放或昄一个对象(典型的就是applet和Bean),而这U显C需要在览器的java插g? 当Jsp文g被编译,送往览器时Q?lt;jsp:plugin>元素会(x)Ҏ(gu)览器的版本替换?lt;object>或?lt;embed>元素。注意,<object>用于HTML 4.0 Q?lt;embed>用于HTML 3.2. 一般来_(d)<jsp:plugin>元素?x)指定对象是Appletq是Bean,同样也会(x)指定class的名字,q有位置Q另外还?x)指定将从哪里下载这个Java插g。具体如?
code="classFileName" codebase="classFileDirectoryName" name="instanceName" archive="URIToArchive, ..." align="bottom | top | middle | left | right" bottom hspace="leftRightPixels" vspace="topBottomPixels" jreversion="JREVersionNumber | 1.1" Applet或Beanq行所需的Java Runtime Environment (JRE) 的版? ~省值是 1.1. nspluginurl="URLToPlugin" Netscape Navigator用户能够使用的JRE的下载地址Q此gؓ(f)一个标准的URLQ如http://www.aspcn.com/jsp iepluginurl="URLToPlugin"
你需要向applet或Bean传送的参数或参数倹{? <jsp:fallback> text message for user </jsp:fallback> 插g不能启动时显C给用户的,如果插g能够启动而applet或Bean不能Q那么浏览器?x)有一个出错信息弹? 创徏一个Bean实例q指定它的名字和作用范围.
id="beanInstanceName" scope="page | request | session | application" { class="package.class" | type="package.class" | class="package.class" type="package.class" | beanName="{package.class | <%= expression %>}" type="package.class" } { /> | > other elements </jsp:useBean> } 例子 <jsp:useBean id="cart" scope="session" class="session.Carts" /> <jsp:setProperty name="cart" property="*" /> <jsp:useBean id="checking" scope="session" class="bank.Checking" > <jsp:setProperty name="checking" property="balance" value="0.0" /> </jsp:useBean> 创徏一个Bean实例q指定它的名字和作用范围.
<jsp:useBean id="beanInstanceName" scope="page | request | session | application" { class="package.class" | type="package.class" | class="package.class" type="package.class" | beanName="{package.class | <%= expression %>}" type="package.class" } { /> | > other elements </jsp:useBean> } 例子 <jsp:useBean id="cart" scope="session" class="session.Carts" /> <jsp:setProperty name="cart" property="*" />
<jsp:setProperty name="checking" property="balance" value="0.0" /> </jsp:useBean>
<jsp:useBean>用于定位或示例一个JavaBeanslg?lt;jsp:useBean>首先?x)试囑֮位一个Bean实例Q如果这个Bean不存在,那么<jsp:useBean>׃(x)从一个class或模版中q行CZ? Z(jin)定位或示例一个BeanQ?lt;jsp:useBean>?x)进行以下步聚,序如? 通过l定名字和范围试囑֮位一个Bean. <jsp:useBean>元素的主体通常包含?lt;jsp:setProperty>元素Q用于设|Bean的属性倹{正如上面第五步所说的Q?lt;jsp:useBean>的主体仅仅只有在<jsp:useBean>CZBean时才?x)被执行Q如果这个Bean已经存在Q?lt;jsp:useBean>能够定位它,那么M中的内容不?x)v作用
q个变量名对大小写敏感,必须W合你所使用的脚本语a的规定,在Java Programming Language中,q个规定在Java Language 规范已经写明。如果这个Bean已经在别?lt;jsp:useBean>中创建,那么q个id的值必M原来的那个idg? scope="page | request | session | application" page - 你能在包?lt;jsp:useBean>元素的JSP文g以及(qing)此文件中的所有静(rn)态包含文件中使用Bean,直到面执行完毕向客L(fng)发回响应或{到另一个文件ؓ(f)止? application - 从创建Bean开始,你就能在M使用相同application的Jsp文g中用Bean.q个Bean存在于整个application生存周期内,M在分享此application的Jsp文g都能使用同一Bean. type="package.class" 。如果你没有使用class或beanName指定typeQBean不?x)被CZ.package和class的名字,区分大小? beanName="{package.class | <%= expression %>}" type="package.class" beanName可以是package和class也可以是表达?它的g(x)传给Beans.instantiate.tupe的值可以和Bean相同? package ?class 名字区分大小? 内置对象是不需要声明,直接可以在JSP中用的对象QJSP有以下几U内|对象:(x)
Servlet API中的几个对象
]]>
<html>
<head><title>A Comment Test</title></head>
<body>
<h2>A Test of Comments</h2>
<%-- This comment will not be visible in the page source --%>
</body>
</html>
<%! int a, b, c; %>
<%! Circle a = new Circle(2.0); %>
你可以直接用在<% @ page %>中被包含q来的已l声明的变量和方法,不需要对它们重新q行声明.
<b><%= numguess.getHint() %></b>.
String name = null;
if (request.getParameter("name") == null) {
%>
<%@ include file="error.html" %>
<%
} else {
foo.setName(request.getParameter("name"));
if (foo.getName().equalsIgnoreCase("integra"))
name = "acura";
if (name.equalsIgnoreCase( "acura" )) {
%>
~写JSP表达式(参?表达?.
使用M隐含的对象和M?lt;jsp:useBean>声明q的对象
~写JSP语句 (如果你在使用Java语言Q这些语句必遵从Java Language Specification,).
M文本QHTML标记QJSP元素必须在scriptlet之外
当JSP收到客户的请求时Qscriptlet׃(x)被执行,如果scriptlet有显C的内容Q这些显C的内容p存在out对象中?/p>
JSP 语法
<%@ page
[ language="java" ]
[ extends="package.class" ]
[ import="{package.class | package.*}, ..." ]
[ session="true | false" ]
[ buffer="none | 8kb | sizekb" ]
[ autoFlush="true | false" ]
[ isThreadSafe="true | false" ]
[ info="text" ]
[ errorPage="relativeURL" ]
[ contentType="mimeType [ ;charset=characterSet ]" | "text/html ; charset=ISO-8859-1" ]
[ isErrorPage="true | false" ]
%>
例子
<%@ page import="java.util.*, java.lang.*" %>
<%@ page buffer="5kb" autoFlush="false" %>
<%@ page errorPage="error.jsp" %>
描述
<%@ page %>指o(h)作用于整个JSP面Q同样包括静(rn)态的包含文g。但?lt;% @ page %>指o(h)不能作用于动态的包含文gQ比?<jsp:include>
<public:loop>
.
.
</public:loop>
Uniform Resource Identifier (URI)Ҏ(gu)标签的前~对自定义的标{进行唯一的命名,URI可以是以下的内容:
Uniform Resource Name (URN), ?RFC 2396定义
一个相Ҏ(gu)l对的\?
prefix="tagPrefix"
在自定义标签之前的前~Q比如,?lt;public:loop>中的publicQ如果这里不写publicQ那么这是不合法的。请不要用jsp, jspx, java, javax, servlet, sun, 和sunw做ؓ(f)你的前缀
JSP语法
<jsp:forwardpage={"relativeURL"|"<%=expression%>"}/>
or
<jsp:forwardpage={"relativeURL"|"<%=expression%>"}>
<jsp:paramname="parameterName"
value="{parameterValue|<%=expression%>}"/>+
</jsp:forward>
例子<jsp:forwardpage="/servlet/login"/>
<jsp:forwardpage="/servlet/login">
<jsp:paramname="username"value="jsmith"/>
</jsp:forward>
描述
<jsp:forward>标签从一个JSP文g向另一个文件传递一个包含用戯求的request对象.<jsp:forward>标签以下的代码,不能执?
你能够向目标文g传送参数和|在这个例子中我们传递的参数名ؓ(f)username,gؓ(f)scott,如果你用了(jin)<jsp:param>标签的话Q目标文件必L一个动态的文gQ能够处理参?
如果你用了(jin)非缓冲输出的话,那么使用<jsp:forward>时就要小?j)。如果在你?lt;jsp:forward>之前Qjsp文g已经有了(jin)数据Q那么文件执行就?x)出?
属?
page="{relativeURL|<%=expression%>}"
q里是一个表辑ּ或是一个字W串用于说明你将要定向的文g或URL.q个文g可以是JSP,E序D,或者其它能够处理request对象的文?如asp,cgi,php).
<jsp:paramname="parameterName"value="{parameterValue|<%=expression%>}"/>+
向一个动态文件发送一个或多个参数Q这个文件一定是动态文?
如果你想传递多个参敎ͼ你可以在一个JSP文g中用多?lt;jsp:param>。name指定参数名,value指定参数?
例子
<jsp:useBean id="calendar" scope="page" class="employee.Calendar" />
描述
q个<jsp:getProperty>元素获得Bean的属性|q可以将其用或昄在JSP面?在你使用<jsp:getProperty>之前Q你必须?lt;jsp:useBean>创徏?
<jsp:getProperty>元素有一些限?
你不能?lt;jsp:getProperty>来检索一个已l被索引?jin)的属?
你能够和JavaBeanslg一起?lt;jsp:getProperty>,但是不能与Enterprise
bean的名??lt;jsp:useBean>指定
所指定的Bean的属性名?
在sun的JSP参考中提到Q如果你使用<jsp:getProperty>来检索的值是I|那么NullPointerException会(x)出现Q同时如果用程序段或表辑ּ来检索其|那么在浏览器上出现的是nullQ空).
JSP 语法
<jsp:include page="{relativeURL | <%= expression%>}" flush="true" />
<jsp:include page="scripts/login.jsp" />
<jsp:include>元素允许你包含动态文件和?rn)态,q两U包含文件的l果是不同的。如果文件仅是静(rn)态文Ӟ那么q种包含仅仅是把包含文g的内容加到jsp文g中去Q而如果这个文件动态的Q那么这个被包含文g也会(x)被Jsp~译器执?q一切与asp怼)
你不能从文g名上判断一个文件是动态的q是?rn)态的Q比如aspcn.asp
如果q个包含文g是动态的Q那么你q可以用<jsp:param>q传递参数名和参数倹{?
属?br />
page="{relativeURL | <%= expression %>}"
参数Z相对路径Q或者是代表相对路径的表辑ּ.
q里你必M用flush="true",你不能用false?~省gؓ(f)false
<jsp:param>子句能让你传递一个或多个参数l动态文?
你能在一个页面中使用多个<jsp:param>来传递多个参数?/p>
<jsp:plugin
type="bean | applet"
code="classFileName"
codebase="classFileDirectoryName"
[ name="instanceName" ]
[ archive="URIToArchive, ..." ]
[ align="bottom | top | middle | left | right" ]
[ height="displayPixels" ]
[ width="displayPixels" ]
[ hspace="leftRightPixels" ]
[ vspace="topBottomPixels" ]
[ jreversion="JREVersionNumber | 1.1" ]
[ nspluginurl="URLToPlugin" ]
[ iepluginurl="URLToPlugin" ] >
[ <jsp:params>
[ <jsp:param name="parameterName"
</jsp:params> ]
[ <jsp:fallback> text message for user </jsp:fallback> ]
</jsp:plugin>
例子
描述
属?/p>
type="bean | applet"
.被执行的插件对象的cdQ你必须得指定这个是Beanq是applet,因ؓ(f)q个属性没有缺省?
会(x)被Java插g执行的Java Class的名字,必须?classl尾。这个文件必d在于codebase属性指定的目录?
会(x)被执行的Java Class文g的目录(或者是路径)Q如果你没有提供此属性,那么使用<jsp:plugin>的jsp文g的目录将?x)被使?
q个Bean或applet实例的名字,它将?x)在Jsp其它的地方调?
一些由逗号分开的\径名Q这些\径名用于预装一些将要用的class,q会(x)提高applet的性能.
囑ŞQ对象,Applet的位|?有以下?
topmiddleleftrightheight="displayPixels" width="displayPixels"
Applet或Bean要昄的长宽的|此gؓ(f)数字Q单位ؓ(f)象素.
Applet或Bean昄时在屏幕左右Q上下所需留下的空_(d)单位?
IE用户能够使用的JRE的下载地址Q此gؓ(f)一个标准的URLQ如http://www.aspcn.com/jsp
<jsp:params>[ <jsp:param name="parameterName"
value="{parameterValue | <%= expression %>}" /> ]+ </jsp:params>
一D|字用于Java
JSP 语法
<jsp:useBean
JSP 语法
<jsp:useBean id="checking" scope="session" class="bank.Checking" >
描述
对这个Bean对象引用变量以你指定的名字命?
如果发现?jin)这个Bean,会(x)在这个变量中储存q个引用。如果你也指定了(jin)cdQ那么这个Bean也设|ؓ(f)相应的类?
如果没有发现q个Bean,会(x)从你指定的class中示例,q将此引用储存到一个新的变量中厅R如果这个class的名字代表的是一个模版,那么q个Bean被java.beans.Beans.instantiateCZ.
如果<jsp:useBean>已经CZQ不是定位)(j)?jin)Bean,同时<jsp:useBean>?lt;/jsp:useBean>中有元素Q那么将?x)执行其中的代?
属性以?qing)用?/p>
id="beanInstanceName"
在你所定义的范围中认Bean的变量,你能在后面的E序中用此变量名来分L不同的Bean
Bean存在的范围以?qing)id变量名的有效范围。缺省值是page,以下是详l说明:(x)
request - 你在M执行相同h的Jsp文g中用Bean,直到面执行完毕向客L(fng)发回响应或{到另一个文件ؓ(f)止。你能够使用Request对象讉KBean,比如request.getAttribute(beanInstanceName)
session - 从创建Bean开始,你就能在M使用相同session的Jsp文g中用Bean.q个Bean存在于整个Session生存周期内,M在分享此Session的Jsp文g都能使用同一Bean.注意在你创徏Bean的Jsp文g?lt;%
@ page %>指o(h)中必L定session=true
class="package.class"
使用new关键字以?qing)class构造器从一个class中示例一个bean.q个class不能是抽象的Q必L一个公用的Q没有参数的构造器.q个package的名字区别大写?
如果q个Bean已经在指定的范围中存在,那么写这个Bean一个新的数据库cd
使用java.beans.Beans.instantiateҎ(gu)来从一个class或连l模版中CZ一个Bean,同时指定Bean的类型?
request request表示HttpServletRequest对象。它包含?jin)有x览器h的信息,q且提供?jin)几个用于获取cookie, header, 和session数据的有用的Ҏ(gu)?
response response表示HttpServletResponse对象Qƈ提供?jin)几个用于设|送回 览器的响应的方法(如cookies,头信息等Q?
out out 对象是javax.jsp.JspWriter的一个实例,q提供了(jin)几个Ҏ(gu)使你能用于向览器回送输出结果?
pageContext pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各U范围的名字I间、servlet相关的对象的APIQƈ且包装了(jin)通用的servlet相关功能的方法?
session session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信?
application applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信?
config config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数?
page page表示从该面产生的一个servlet实例?
JSP提供?jin)八个内部对象,而其中的五个内部对象对应于Servlet API中的七个对象Q这也就使得我们正常理解q熟l用Servlet中的q七个对象显得尤光要。这五个JSP的内部对象和Servlet API中的对象的对应关pLQ?br />
request对象对应于:(x)javax.servlet.http.HttpServletRequest和javax.servlet.ServletRequest
response对象对应于:(x)javax.servlet.http.HttpServletResponse和javax.servlet.ServletResponse
session对象对应于:(x)javax.servlet.http.HttpSession
application对象对应于:(x)javax.servlet.ServletContext
config对象对应于:(x)javax.servlet.ServletConfig
javax.servlet.http.HttpServletRequest
q是一个接口,在我们提到接口之前,q是让我们来复习(fn)一下Java中接口的一个初步的解释Q?br />
接口在语法上与类怼Q但是接口没有实例,使用接口Q只是指定类必须做什么而不是如何做?br />
HttpServletRequest接口用来处理一个对Servlet的HTTP格式的请求信息?br />
javax.servlet.ServletRequest
q也是一个接口,q个接口定义一个Servlet引擎产生的对象,通过q个对象QServlet可以获得客户端请求的数据。这个对象通过dh体的数据提供包括参数的名U、值和属性以?qing)输入流的所有数据。而javax.servlet.http.HttpServletRequest也只是该接口的一个扩展,也就是说Q该接口的所有方法也可以被javax.servlet.http.HttpServletRequest所使用?br />
javax.servlet.http.HttpServletResponse接口
该接口用来描qC个返回到客户端的HTTP回应?br />
javax.servlet.ServletResponse接口
该接口用来定义一个Servlet引擎产生的对象,通过q个对象QServlet对客L(fng)的请求作出响应。这个响应应该是一个MIME实体Q可能是一个HTMLc(din)图象数据或其他MIME的格式。javax.servlet.http.HttpServletResponse接口是该接口的扩展?br />
javax.servlet.http.HttpSession接口
该接口用来描qC个sessionQ至于什么是session我想在这里就没必要说?jin)吧?br />
javax.servlet.ServletContext接口
该接口用来定义了(jin)一个Servlet的环境对象。也可是认ؓ(f)q是多个客户端共享的信息Q它与session的区别在于应用范围的不同Qsession只对应于一个用戗?br />
javax.servlet.ServletConfig接口
该接口定义了(jin)一个对象,通过q个对象QServlet引擎配置一个Servlet。每一个ServletConfig对象对应着一个唯一的Servlet?br />
javax.servlet.http.Cookiec?br />
q个cLqC(jin)一个cookieQcookie的作用其实与session很类|只是cookie保存在客L(fng)Qsession保存在服务器端?/p>
]]>
1>E序使用UTF-8
2>~码q虑为UTF-8 //影响post提交
3>server.xml加URIEncoding="UTF-8" //影响get提交
4>jsp面?lt;%@ page pageEncoding="UTF-8"%>
5>htm面?lt;meta http-equiv="content-type" content="text/html; charset=UTF-8">
注意Qget提交不能直接在地址栏输入测试,要在面里{?
用到的配|:(x)