jsp三⼤指令标记,七⼤动作标记、详解。
JSP的基本构成
JSP页⾯主要由指令标签,注释,嵌⼊Java代码,JSP动作标签,HTML标记语⾔等五个元素组成。
3个指令标签
1 、page指令
page指令⽤户定义JSP页⾯中的全局属性 ,Eg:<%@ page attr1=”value1” atrr2=”value2”.......%>
page指令对整个页⾯有效,包括静态的包含⽂件,但page指令不能⽤于被动态包含的⽂件,例如使⽤<jsp:include>包含的⽂件。在⼀个JSP页⾯中可以使⽤多个page指令,但page指令中的属性只能出现⼀次(import属性除外)。
page指令的常⽤属性如下:
(1) language属性 该属性⽤于设置JSP页⾯使⽤的语⾔,⽬前只⽀持Java语⾔。例:<%@ page language=”java” %>
(2) extends属性 该属性⽤于设置JSP页⾯所继承的Java类,JSP和Servlet都可以继承指定的⽗类,但该属性并不常⽤.
(3) import属性 该属性⽤于设置JSP所导⼊的类包,JSP页⾯可以嵌⼊Java代码⽚段,这些Java代码在调⽤API时需要导⼊相应的类包。例:<%@page import=”java.util.*” %>
(4) pageEncoding属性 该属性⽤于定义JSP页⾯的编码格式,指定的⽂件编码格式。例:<%@ page pageEncoding=”UTF-8” %>
(5) contentType属性 该属性⽤于设置JSP页⾯的MIME类型和字符编码,浏览器会根据些解释页⾯。 例:<%@ page
contentType=”text/html;charset=utf-8” %>
(6) session属性 该属性⽤于定义JSP页⾯是否使⽤session会话对象,其值是boolean类型,默认值为true. Eg:<%@ page session=”true” %>
(7) buffer属性 该属性⽤于设置out对象所使⽤的缓冲区⼤⼩,默认⼤⼩是8KB,单位只能是8的倍数。 Eg:<%@ page buffer=”128KB” %>
(8) autoFlush属性 该属性⽤于定义JSP页⾯缓冲存满时是否⾃动刷新缓存。默认值为true,如果设置为false,则缓存填满时可能会发⽣异常. Eg:<%@ page autoFlush=”true” %>
(9) info属性 该属性⽤于设置JSP页⾯的⼀些相关信息,信息可以在Servlet接⼝的getServletInfo()⽅法中获取得到。Eg:<%@page info=”This is a JSP” %>
(10) isErrorPage属性 该属性可以将当前页⾯定义为错误页⾯来处理另⼀个页⾯转发⽽来的错误,即异常处理。设置为true以后可以使⽤exception对象.
(11)errorPage属性 该属性⽤于定义此JSP页⾯发⽣错误时所转发到的另外⼀个JSP页⾯,⽤于处理此页⾯所发⽣的错误。 Eg:<%@page
errorPage=”error.jsp” %>
(12)isELIgnored属性 该属性⽤于定义些页⾯是否忽略EL表达式的使⽤。
2 、include指令
Include指令⽤于⽂件包含,该指令可以在⼀个JSP页⾯中包含另外⼀个⽂件中的内容,并且只能⽀持静态包含,意思是被包含⽂件的所有内容都被原样包含到时该JSP页⾯中,被包含的⽂件可以是⼀段Java代码,HTML代码,或者是另⼀个JSP页⾯。Eg:<%@include file=”other.jsp” %>
3 、taglib指令
taglib指令允许⽤户使⽤标签库⾃定义新的标签,
Eg:<% taglib uri="taglibURI" prefix="tabPrefix"%>
taglib指令中的uri属性⽤于根据标签的前缀对⾃定义的标签进⾏唯⼀的命名,其值可以⾷相对路径,绝对路径或标签库描述⽂件。属性prefix制定了标签的前缀。
7个动作指令
动作指令与编译指令不间,编译指令是通知 Servlet 引擎的处理消息,⽽动作指令只是运⾏时的脚本动作。编译指令在将JSP 编译成 Servlet 时起作⽤:处理指令通常可替换成 Java脚本,是 JSP脚本的标准化写法。
JSP7 个 动作指令如下 :
1. jsp:forward: 执⾏页⾯转向,将请求的处理转发到下⼀个页⾯。
2. jsp:param: ⽤于传递参数,必须与其他⽀持参数曲标签⼀起使⽤。
3. jsp:include: ⽤于动态引⼊⼀个 JSP 页⾯。
4. jsp:p1ugin: ⽤于下载 JavaBean 或 Applet 到客户端执⾏。
5. jsp:useBean: 使⽤ JavaBean。
6. jsp:setProperty: 修改 JavaBean 实例的属性值。
7. jsp:getProperty: 获取 JavaBean 实例的属性值。
下⾯依次讲解这些动作指令。
1..jsp:forward动作(拿⽬标页⾯代替原有页⾯)
jsp:forward动作把请求转到另外的页⾯。可以转发静态的HTML页⾯,也可以转发动态的JSP页⾯,或者转发到容器中的servlet jsp:forward标记只有⼀个属性page。 page属性包含的是⼀个相对URL。 page的值既可以直接给出,也可以在请求的时候动态计算
获得上个页⾯传个来的参数值。
2.jsp:include动作 (拿⽬标页⾯插⼊原有页⾯)
该动作是⼀个动态的include指令,也⽤于带⼊某个页⾯,他不会导⼊被include页⾯的编译指令,仅仅导⼊页⾯的body内容插⼊到本页⾯,该动作把指定⽂件插⼊正在⽣成的页⾯。
其语法如下: flush:⽤于指定输出缓存是否转移到被导⼊的⽂件中, true:包含在被导⼊的⽂件中 false:包含在源⽂件中。
前⾯已经介绍过include指令,它是在JSP⽂件被转换成Servlet的时候引⼊⽂件,⽽这⾥的jsp:include动作不同,插⼊⽂件的时间是在页⾯被请求的时候。jsp:include动作的⽂件引⼊时间决定了它的效率要稍微差⼀点,⽽且被引⽤⽂件不能包含某些JSP代码(例如不能设置HTTP头),但它的灵活性却要好得多。 例如,下⾯的JSP页⾯把4则新闻摘要插⼊⼀个“What''s New ?”页⾯。改变新闻摘要时只需改变这四个⽂件,⽽主JSP页⾯却可以不作修改:
<P>
java和jsp Here is a summary of our four most recent news stories:
<OL>
<LI><jsp:include page="news/Item1.html" flush="true"/>
<LI><jsp:include page="news/Item2.html" flush="true"/>
<LI><jsp:include page="news/Item3.html" flush="true"/>
<LI><jsp:include page="news/Item4.html" flush="true"/>
</OL>
3..jsp:useBean动作
useBean:⽤于在jsp页⾯中初始化⼀个java实例(如果多个jsp中需要重复使⽤某段代码,可以把这段代码定义成java类在页⾯中引⽤)
jsp:useBean动作⽤来装载⼀个将在JSP页⾯中使⽤的JavaBean。这个功能⾮常有⽤,因为它使得我们既可以发挥Java组件重⽤的优势,同时也避免了损失JSP区别于Servlet的⽅便性。
jsp:useBean动作最简单的语法为:<jsp:useBean id="JavaBean的名称" class="package.class"包名.类名" scope="有效范围"/>
这⾏代码的含义是:“创建⼀个由class属性指定的类的实例,然后把它绑定到其名字由id属性给出的变量上”。不过,就象我们接下来会看到的,定义⼀个scope属性可以让Bean关联到更多的页⾯,它可接受四个值:request、session、page、application。此时,jsp:useBean动作只有在不存在同样id和scope的Bean时才创建新的对象实例,同时,获得现有Bean的引⽤就变得很有必要。
获得Bean实例之后,要修改Bean的属性既可以通过jsp:setProperty动作进⾏,也可以在Scriptlet中利⽤id属性所命名的对象变量,通过调⽤该对象的⽅法显式地修改其属性。这使我们想起,当我们说“某个Bean有⼀个类型为X的属性foo”时,就意味着“这个类有⼀个返回值类型为X的getFoo⽅法,还有⼀个setFoo⽅法以X类型的值为参数”。 有关jsp:setProperty动作的详细情况在后⾯讨论。但现在必须了解的是,我们既可以通过jsp:setProperty动作的value属性直接提供⼀个值,也可以通过param属性声明Bean的属性值来⾃指定的请求参数,还可以列出Bean属性表明它的值应该来⾃请求参数中的同名变量。
在JSP表达式或Scriptlet中读取Bean属性通过调⽤相应的getXXX⽅法实现,或者更⼀般地,使⽤jsp:getProperty动作。
注意,包含Bean的类⽂件应该放到服务器正式存放Java类的⽬录下,⽽不是保留给修改后能够⾃动装载的类的⽬录。例如,对于Java Web Server来
说,Bean和所有Bean⽤到的类都应该放⼊classes⽬录,或者封装进jar⽂件后放⼊lib⽬录,但不应该放到servlets下。 id:javaBean的实例名 class:javaBean的实现类 scope:指定javaBean实例的⽣存范围 page:javaBean仅在该页⾯有效 request:javaBean在本次请求中有效 session: javaBean 在本次session内有效 application: javaBean在本应⽤内⼀直有效 下⾯是⼀个很简单的例⼦,它的功能是装载⼀个Bean,然后设置/读取它的message 属性。
3.1关于jsp:useBean的进⼀步说明
使⽤Bean最简单的⽅法是先⽤下⾯的代码装载Bean:
<jsp:useBean id="name" class="package.class" />
然后通过jsp:setProperty和jsp:getProperty修改和提取Bean的属性。
不过有两点必须注意。
第⼀,我们还可以⽤下⾯这种格式实例化Bean:
<jsp:useBean ...>
Body
</jsp:useBean>
它的意思是,只有当第⼀次实例化Bean时才执⾏Body部分,如果是利⽤现有的Bean实例则不执⾏Body部分。正如下⾯将要介绍的,jsp:useBean并⾮总是意味着创建⼀个新的Bean实例。
第⼆,除了id和class外,jsp:useBean还有其他三个属性,即:scope、type、beanName。
id:命名引⽤该Bean的变量。如果能够到id和scope相同的Bean实例,jsp:useBean动作将使⽤已有的Bean实例⽽不是创建新的实例。
class:指定Bean的完整包名。
scope:指定Bean在哪种上下⽂内可⽤,可以取下⾯的四个值之⼀:page、request、session和application。 默认值是page,表⽰该Bean只在当前页⾯内可⽤(保存在当前页⾯的PageContext内)。
request表⽰该Bean在当前的客户请求内有效(保存在ServletRequest对象内)。
session表⽰该Bean对当前HttpSession内的所有页⾯都有效。
最后,如果取值application,则表⽰该Bean对所有具有相同ServletContext的页⾯都有效。
scope之所以很重要,是因为jsp:useBean只有在不存在具有相同id和scope的对象时才会实例化新的对象;
如果已有id和scope都相同的对象则直接使⽤已有的对象,此时jsp:useBean开始标记和结束标记之间的任何内容都将被忽略。
type:指定引⽤该对象的变量的类型,它必须是Bean类的名字、超类名字、该类所实现的接⼝名字之⼀。请记住变量的名字是由id属性指定的。 beanName:指定Bean的名字。如果提供了type属性和beanName属性,允许省略class属性。
4.jsp:setProperty动作
jsp:setProperty⽤来设置已经实例化的Bean对象的属性,有两种⽤法。⾸先,你可以在jsp:useBean元素的外⾯(后⾯)使⽤jsp:setProperty,如下所⽰: 此时,不管jsp:useBean是到了⼀个现有的Bean,还是新创建了⼀个Bean实例,jsp:setProperty都会执⾏。第⼆种⽤法是把jsp:setProperty放⼊jsp:useBean元素的内部,如下所⽰: 此时,jsp:setProperty只有在新建Bean实例时才会执⾏,如果是使⽤现有实例则不执⾏jsp:setProperty。
jsp:setProperty动作有下⾯四个属性
name:表⽰要设置属性的是哪个Bean。
property:表⽰要设置哪个属性。有⼀个特殊⽤法:如果property的值是"*",表⽰所有名字和Bean属性名字匹配的请求参数都将被传递给相应的属性set ⽅法。
value:value属性是可选的。该属性⽤来指定Bean属性的值。字符串数据会在⽬标类中通过标准的v
alueOf⽅法⾃动转换成数字、boolean、Boolean、byte、Byte、char、Character。例如,boolean和Boolean类型的属性值(⽐如“true”)通过Boolean.valueOf转换,int和Integer类型的属性值(⽐如"42")通过Integer.valueOf转换。 value和param不能同时使⽤,但可以使⽤其中任意⼀个。
Param:param是可选的。它指定⽤哪个请求参数作为Bean属性的值。如果当前请求没有参数,则什么事情也不做,系统不会把null传递给Bean属性的set⽅法。因此,你可以让Bean⾃⼰提供默认属性值,只有当请求参数明确指定了新值时才修改默认属性值。 例如,下⾯的代码⽚断表⽰:如果存在numItems请求参数的话,把numberOfItems属性的值设置为请求参数numItems的值;否则什么也不做。
如果同时省略value和param,其效果相当于提供⼀个param且其值等于property的值。进⼀步利⽤这种借助请求参数和属性名字相同进⾏⾃动赋值的思想,你还可以在property(Bean属性的名字)中指定“*”,然后省略value和param。此时,服务器会查看所有的Bean属性和请求参数,如果两者名字相同则⾃动赋值。
下⾯是⼀个利⽤JavaBean计算素数的例⼦。如果请求中有⼀个numDigits参数,则该值被传递给Bean的numDigits属性;numPrimes也类似。
JspPrimes.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>在JSP中使⽤JavaBean</TITLE>
</HEAD>
<BODY>
<CENTER>
<TABLE BORDER=5>
<TR><TH CLASS="TITLE">
在JSP中使⽤JavaBean</TABLE>
</CENTER>
<P>
<jsp:useBean id="primeTable" class="hall.NumberedPrimes" />
<jsp:setProperty name="primeTable" property="numDigits" />
<jsp:setProperty name="primeTable" property="numPrimes" />
Some <jsp:getProperty name="primeTable" property= "numDigits" />
digit primes:
<jsp:getProperty name="primeTable" property="numbered List" />
</BODY>
</HTML>
5.jsp:getProperty动作
jsp:getProperty动作提取指定Bean属性的值,转换成字符串,然后输出。jsp:getProperty有两个必需
的属性,即:name,表⽰Bean的名字;property,表⽰要提取哪个属性的值。下⾯是⼀个例⼦,更多的例⼦可以在前⽂到。 ...
<jsp:useBean id="itemBean" ... />
...
<UL>
<LI>Number of items:
<jsp:getProperty name="itemBean" property="numItems" />
<LI>Cost of each:
<jsp:getProperty name="itemBean" property="unitCost" />
</UL>
6.jsp:plugin动作(⽤于下载服务器端的javaBean或applet到客户端)
jsp:plugin动作⽤来根据浏览器的类型,插⼊通过Java插件运⾏Java Applet所必需的OBJECT或EMBED元素。
<jsp:plugin
type="bean | applet" : 被执⾏的java程序的类型
code="classFileName" :被执⾏的⽂件名,必须以 .class 结尾
codebase="classFileDirectoryName" :被执⾏⽂件的所在⽬录
[ name="instanceName" ] :给程序起⼀个名字⽤来标识该程序
[ archive="URIToArchive, ..." ] :指向⼀些要预先载⼊的将要使⽤到的类
[ align="bottom | top | middle | left | right" ] :
[ height="displayPixels" ]
[ width="displayPixels" ]
[ hspace="leftRightPixels" ]
[ vspace="topBottomPixels" ]
[ jreversion="JREVersionNumber | 1.1" ] :能正确运⾏改程序必须的JRE的版本
[ nspluginurl="URLToPlugin" ]
[ iepluginurl="URLToPlugin" ] >
[ <jsp:params>
[ <jsp:param name="parameterName" value="{parameterValue | <%= expression %>}" /> ]+
</jsp:params> ]
[ <jsp:fallback> text message for user </jsp:fallback> ] :当不能正确显⽰该Applet时,显⽰该指令中的⽂本提⽰
<jsp:plugin>
7.jsp:param
⽤于设定参数值,这个指令不能单独使⽤ 可以与以下三个指令结合使⽤:
jsp:include :⽤于将参数值出⼊被导⼊页⾯
jsp:forword : ⽤于将参数值传⼊被转向页⾯
jsp:plugin : ⽤于将参数值传⼊页⾯中javaBean的实例
9个内置对象
JSP中的内置对象(9个)
对象名 对象的类型 范围
pageContext Javax.servlet.jsp.PageContext Page
page Javax.servlet.jsp.HttpJspPage Page
request Javasx.servlet.jsp.HttpServletRequest Request
response Javax.servlet.jsp.HttpServletResponse Page
session Javax.servlet.HttpSessio Session
application Javax.servlet.ServletContext Application
out Javax.servlet.jsp.JspWriter Page
config Javax.servlet.ServletConfig Page
exception Java.lang.ThrowAble page
内置对象是不需要声明,直接可以在JSP中使⽤的对象,JSP有以下⼏种内置对象:
request表⽰HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了⼏个⽤于获取cookie, header, 和session数据的有⽤的⽅法。客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。
1 Object getAttribute(String name) 返回指定属性的属性值,该属性不存在时返回null。
2 Enumeration getAttributeNames() 返回所有可⽤属性名的枚举
3 String getAuthType() ;返回⽤来保护servlet的认证⽅法的名称,未受保护时返回null。
4 String getCharacterEncoding() 返回字符编码⽅式
5 int getContentLength() 返回请求体的长度(以字节数),不能确定长度时返回-1。
6 String getContentType() 得到请求体的MIME类型
7 String getContentPath() 返回请求的路径。
8 Cookie[] getCookies() 返回客户端所有的Cookie的数组。
9 Enumeration getHeaderNames() 返回所有HTTP头的名称的集合。
10 Enumeration getHeaders( String name ) 返回指定HTTP头的所有值的集合。
11 String getHeader( String name ) 返回指定名称的HTTP头的信息。
12 long getDateHeader( String name ) 返回指定名称的Data类型的HTTP头的信息。
13 int getIntHeader( String name ) 返回指定名称的Int类型的HTTP头的信息。
14 ServletInputStream getInputStream() 得到请求体中⼀⾏的⼆进制流
15 Locale getLocale() 返回当前页的Locale对象,可以在response中设定。
16 Enumeration getLocales() 返回请求中所有的Locale对象的集合。
17 String getLocalName() 获取响应请求的服务器端主机名。
18 String getLocalAddr() 获取响应请求的服务器端地址。
19 int getLocalPort() 获取响应请求的服务器端端⼝
20 String getMethod() 获取客户端向服务器端发送请求的⽅法(GET、POST)。
21 String getParameter(String name) 返回name指定参数的参数值
22 Map getParameterMap() 该⽅法返回包含请求中所有参数的⼀个Map对象。
23 Enumeration getParameterNames() 返回请求中所有参数的集合。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论