JSP自定义标签(详细)

JSP自定义标签(详细)
JSP自定义标签(详细)

JSP标签库

在这篇文章中,我们主要讨论:

·什么是自定义tag标签?

·怎么使用tag标签?

o 声明要使用的tag库

o 找到与之对应的tag处理类

o tag标签的类型

·自定义tag标签

o tag处理类

o tag库描述

o tag标签示例

o 带属性的tag

o 带body的tag

o 定义了脚本变量的tag

o 具有协作关系的tag

·自定义tag标签

o 一个迭代tag的例子

o 一个模板tag库

o tag处理类到底是怎样被调用的?

什么是自定义的tag?

一个自定义的tag标签是用户定义的一种JSP标记。当一个含有自定义的tag标签的JSP页面被jsp 引擎编译成servlet时,tag标签被转化成了对一个称为tag处理类的对象进行的操作。于是当JSP页面被jsp引擎转化为servlet后,实际上tag标签被转化成为了对tag处理类的操作。

自定义tag标签有很多特色,诸如:

·可以在JSP页面中自定义tag标签的属性

·访问JSP页面中的所有对象

·可以动态地修改页面输出

·彼此这间可以相互通信。你可以先创建一个JavaBeans组件,然后在一个tag中调用此JavaBeans 组件,同时可以在另一个tag中调用它。

·tag允许相互嵌套,可以在一个JSP页面中完成一些复杂的交互。

使用tag标签

本节主要描述怎样在JSP页面中使用tag标签,以及tag标签的不同类型。

要使用tag标签,JSP程序员必须做2件事:

·声明此tag标签的tag库

·实现此tag标签

声明tag标签所在的tag库

如果要使用tag标签,则应用JSP的taglib指示符来指定其tag库(注意:taglib要在在使用此tag标

签之前声明)

<%@ taglib uri=”/WEB-INF/tutorial-template.tld” prefix=”tt” %>

uri属性定义了唯一的标签库描述(以下简称TLD),它可以是直接是tld文件名或一个独一无二的名字。prefix是用来区别其它TLD中和本TLD中有重名的tag的一种手段。

TLD必须以.tld作为扩展名,并且存放在当前应用的WEB-INF目录或其子目录下。你可以通过它的文件名直接引用它,也可以通过别的方式间接地引用它。

以下taglib指示符直接引用一个TLD:

<%@ taglib uri=”/WEB-INF/tutorial-template.tld” prefix=”tt” %>

以下的taglib指示符通过一个逻辑名称间接地引用一个TLD:

<%@ taglib uri=”/tutorial-template” prefix=”tt” %>

如果是间接引用TLD的话,那你必须还要在web.xml中定义此逻辑名称与tld文件之间的映射,具体做法是在web.xml中加入一个名为taglib的元素:

/tutorial-template

/WEB-INF/tutorial-template.tld

实现此tag标签

为了实现tag标签,你有2种方法来存放tag处理类。一、让tag处理类以.class的方式存放于当前应用的WEB-INF/class子目录下,二、如果tag处理类是以JAR包的形式存在的话,那可以放在当前应用的WEB-INF/lib目录下,如果tag处理类要在多个应用中共享,那么它就应放在jsp服务器上的common/lib 目录下,对于tomcat来说,就是tomcat/common/lib目录下。

tag标签类型

自定义的tag标签遵循XML语法。它有一个开始标记和一个结束标记,有的还有body(即文本节点):

body

一个不带body的tag标签如下:

简单的tag标签

一个没有body和属性的tag标签如下:

带属性的tag标签

自定义标签可以有自己的属性。属性一般在开始标记中定义,语法为attr=”value”。属性的作用相当于自定义标签的一个参数,它影响着tag处理类的行为。你可以在TLD中详细定义它。

你可以用一个String常量给一个属性赋值,也可以通过表达式给它赋值,如<%= ...%>。以struts为例,它的logic:present标签就是用的String常量来给属性赋值:

而另一个标签logic:iterate是用表达式来给属性赋值:

id=”book” type=”database.BookDetails”>

带body的tag标签

一个自定义标签可以包含其它自定义标签、脚本变量、HTML标记或其它内容。

在下述例子中,此JSP页面使用了struts的logic:present标签,如果些标签定义了parameter=”Clear”的属性,则将清除购物车的内容,然后打印出一条信息:

<% cart.clear(); %>

你选择了清除购物车!

到底是用属性还是用body来传递信息?

如上所述,我们既可以通过属性,也可以通过body来传递信息。但一般来说,比较简单的类型,如字符串或简单表达式最好采用属性来传递信息。

定义脚本变量的tag标签

所谓脚本变量,是指JSP中可以调用的变量或对象。它可由tag标签产生。以下示例阐述了一个tag 标签定义了一个名为tx的由JNDI所定义的事务处理对象。脚本变量可以是ejb对象、事务、数据库连接等等:

<% tx.begin(); %>

...

具有协作关系的tag标签

自定义tag标签之间可以通过共享对象来实现协作。在下述例子中,标签tag1创建了一个名为obj1的对象,在标签tag2仍可以重复使用obj。

在以下这个例子当中,如果外层的tag标签创建了一个对象,那么其内层的所有tag标签都可以使用这个对象。由于这样产生的对象没有一个指定的名字,那么就可以将少重名的冲突。这个例子阐述了一系列协作的嵌套对象。

Tag处理类

Tag处理类必须实现Tag接口或BodyTag接口,不过现在一般都流行从TagSupport或BodyTagSupport 类中继承,这些类或接口都可以在javax.servlet.jsp.tagext包中找到。

当JSP引擎看到自己的JSP页面中包含有tag标签时,它会调用doStartTag方法来处理tag标签的开头,调用doEndTag方法来处理tag标签的结束。

下表说明不同类型的tag所需要不同的处理过程:

Tag处理类的方法

Tag标签类型

所调用的方法

基本标签

doStartTag, doEndTag, release

带属性的标签

doStartTag, doEndTag, set/getAttribute1...N, release

带内容的标签

doStartTag, doEndTag, release

带内容的标签,且内容重复循环

doStartTag, doAfterBody, doEndTag, release

带内容的标签,且内容与JSP交互

doStartTag, doEndTag, release, doInitBody, doAfterBody, release

一个tag处理类可以通过javax.servlet.jsp.PageContext来与JSP交互,通过javax.servlet.jsp.PageContext类,tag处理类可以访问JSP中的request、session和application对像。

如果tag标签是互相嵌套的,那内层的tag处理类可以通过它的parent属性来访问上层的tag处理类。

一般情况都将所有的tag处理类打成了JAR的包,以便于发布。

Tag库描述(简称TLD)

Tag库是用xml语言描述的,TLD包括了tag库中所有tag标签的描述,它一般用来被jsp服务器用来校验tag的语法正确性,或者被jsp开发者用来开发新的标签。

TLD的文件扩展名必须为.tld,而且必须放在当前WEB应用的WEB-INF目录或其子目录中。

一个TLD的内容的开头必须遵守标准的XML开头,用于描述DTD和xml的版本,例如:

TLD必须以来作为它的根元素,的子元素如下表:

的子元素

Element Description

tlib-version Tag库的版本

jsp-version Tag库所需要的jsp的版本

short-name 助记符,tag的一个别名(可选)

uri 用于确定一个唯一的tag库

display-name 被可视化工具(诸如Jbuilder)用

来显示的名称(可选)

small-icon 被可视化工具(诸如Jbuilder)用

来显示的小图标(可选)

large-icon 被可视化工具(诸如Jbuilder)用

来显示的大图标(可选)

description 对tag库的描述(可选)

listener 参见下面listener元素

tag 参见下面tag 元素

Listener元素

一个tag库可能定义一些类做为它的事件侦听类,这些类在TLD中被称为listener 元素,jsp服务器将会实例化这些侦听类,并且注册它们。Listener元素中有一个叫listener-class的子元素,这个元素的值必须是该侦听类的完整类名。

Tag元素

每个tag元素在tag库中都要指出它的名字、类名、脚本变量、tag的属性。其中脚本变量的值可以直接在TLD中定义或通过tag附加信息的类来取得。每个属性描述了这个属性是否可以省略,它的值是否可以通过<%= …%>这样的JSP语法来获得,以及属性的类型。

每一个tag在TLD中对应一个tag元素,下表是tag元素的子元素:

Tag元素的子元素

元素名称描述

name 独一无二的元素名

tag-class Tag标签对应的tag处理类

tei-class javax.servlet.jsp.tagext.TagExtraInfo的子类,用于表达脚

本变量(可选)

body-content Tag标签body的类型

display-name 被可视化工具(诸如Jbuilder)用来显示的名称(可选)

small-icon 被可视化工具(诸如Jbuilder)用来显示的小图标(可选)

large-icon 被可视化工具(诸如Jbuilder)用来显示的大图标(可选)

description 此tag标签的描述

variable 提供脚本变量的信息(同tei-class)(可选)

attribute Tag标签的属性名

以下章节介绍对于不同类型的tag,如何具体地实现它们。

简单的tag

tag处理类

简单的tag处理类必须实现Tag接口的doStartTag和doEndTag方法。当jsp引擎碰到tag标签的开头时,doStartTag被调用,因为简单的tag没有body,所以此方法将返回SKIP_BODY。当jsp引擎碰到tag标签的结尾时,doEndTag被调用,如果余下的页面还要被计算,那它将返回EVAL_PAGE,否则将会返回SKIP_PAGE。

以下是例子:对于标签 ,它的tag处理类实现如下:

public SimpleTag extends TagSupport

{

public int doStartTag() throws JspException

{

try{

pageContext.getOut().print(“Hello.”);

}catch(Exception e){

throw new JspTagException(“SimpleTag: “ + e.getMessage());

}

return SKIP_BODY;

}

public int doEndTag()

{

return EVAL_PAGE;

}

}

注意:如果tag标签没有内容的话,那必须定义body-content元素为空,例如

empty

带属性的tag标签

tag处理类

对于tag标签的每个属性,你必须依照JavaBeans规范来定义其属性,以及get和set方法。以struts 的logic:present 标签为例,

与此相应,此tag处理类应有如下方法和定义:

protected String parameter = null;

public String getParameter()

{

return this.parameter;

}

public void setParameter(String parameter)

{

this.parameter = parameter;

}

注意:如果你的属性名为id,而且你的tag处理类是从TagSupport类继承的,那你就不需要定义它的属性和set和get方法,因为他们早已在TagSupport被定义过了。

Attribute元素

对于tag标签的每个属性,你必须定义它是否必须的,它的值是否可以用诸如<%= …%>的表达式来获得,以及它的类型(可选),如果不指定它的类型,那就默认为是https://www.360docs.net/doc/025839633.html,ng.String类型。如果rtexprvalue 元素被定义为true或yes,那么在type元素中就定义了attribute的返回类型。

attr1

true|false|yes|no

true|false|yes|no

attribute的返回类型(只用当rtexprvalue为真是才有效)

如果tag的某个属性不是必须的,那tag处理类会自动提供一个缺省值。

例如,在logic:present这个tag标签中定义了一个属性叫parameter,但它不是必须的,而且它可以被诸如<%= …%>的表达式来赋值。

present

org.apache.struts.taglib.logic.PresentTag

JSP

parameter

false

true

属性元素的校验

有关于tag标签的有效值可以从tag库的说明文档中获得,当JSP页面被编译时,jsp引擎会强制性地参照TLD中定义的规则进行检查。

还有一个方法也可以进行属性元素的校验,就是先继承类TagExtraInfo,然后调用它的isValid方法。这个类同时也起到提供tag中定义的脚本变量信息的作用。

IsValid方法通过TagData对象来传递属性信息,它包括着tag的所有的属性名-值的信息。由于校验发生在运行时刻,因此这个属性的值将被赋值为TagData.REQUEST_TIME_VALUE。

例如tag标签在TLD中定义如下:

attr1

true

true

这个定义说明了attr1能在运行期间被赋值。

以下的isValid方法检查attr1属性的值是否属于Boolean类型。注意由于attr1能在运行刻被赋值,那么isValid方法必须检查tag用户是否对此tag进行了运行时刻赋值。

Public class TwaTEI extends T agExtraInfo

{

public boolean isValid(Tagdata data)

{

Object o = data.getAttribute(“attr1”);

If(o != null && o != TagData.REQUEST_TIME_VALUE)

{

if( ( (String)o).toLowerCase().equals(“true”) ||

((String)o).toLowerCase().equals(“false”) )

return true;

else

return false;

}

else

return true;

}

}

带body的tag

tag处理类

如果tag标签含有内容,那处理方式会略微有些不同,而且还要视tag处理类是否要与body交互的情况而定。如果要与body交互,那我们认为tag处理类要可能要对body进行操作。

Tag处理类不与body交互

如果tag处理类不与body交互,tag处理类应该实现Tag接口或从TagSupport中派生,如果body 要被计算,那么doStartTag方法应返回EVAL_BODY_INCLUDE,否则应返回SKIP_BODY。

如果tag处理类要对body反复运算,则它应该实现IterationTag或从TagSupport中派生。如果tag 处理类认为body还未计算完的话,那它的doStartTag方法和doAfterBody方法必须返回EVAL_BODY_AGAIN。

Tag处理类与body交互

如果tag处理类与body交互,那tag处理类应实现BodyTag接口或从BodyTagSupport中派生。这种tag处理类一般要实现doInitBody和doAfterBody方法。

Body允许一些方法来读写它的内容。Tag处理类可以调用body内容的getString或getReader方法来从body中提取信息,也可用writeOut(out) 方法来将body的内容写入到out对象中。其中out对象通过tag处理类的getPreviousOut方法来获得。

如果body的内容需要被计算,那么doStartTag方法必须返回EVAL_BODY_BUFFERED,否则,它将返回SKIP_BODY。

doInitBody 方法

此方法在body内容已经设好,但未被计算之前被调用。你可以根据不同的body内容来制定初始化策略。

doAfterBody方法

此方法在body内容已被计算后进行调用。

和doStartTag方法一样,doAfterBody方法返回一个指示符指示是否要继续计算body,如果要继续计算,则doAfterBody应返回EVAL_BODY_BUFFERED,否则,它应返回SKIP_BODY。

release 方法

tag处理类调用此方法将它的状态重置为初始状态,并释放所有的私有资源。

以下的例子读取body的内容(其中含有一条sql语句),然后将它传递给一个对象,让它进行查询。由于此处body不须重新计算,所以doAfterBody会返回SKIP_BODY。

Public class QueryTag extends BodyTagSupport

{

public int doAfterBody() throws JspTagException

{

BodyContent bc = getBodyContent();

//将body的内容以字符串的格式提取出来

String query = bc.getString();

//清除body

bc.clearBody();

try{

Statement stmt = connection.createStatement();

Result result = stmt.executeQuery(query);

}catch(SQLException e){

throw new JspTagException(“queryTag: “ + e.getMessage() );

return SKIP_BODY;

}

}

body-content元素

由于tag可能会有body,你必须用body-content元素来指定body内容的类型:

JSP|tagdependent

如果body的内容是定制的或内部的tag、脚本元素、或HTML广本,则归类为JSP类型。其他的类型,比如上面代码所述的?D?D将sql statement类传给query tag的这种类型应该标为tagdependent。

注意:实际上body-content的值并不影响tag处理类对body内容的处理,它仅仅是被tag编辑工具用来描述此body的内容。

用tags定义脚本变量

tag处理类

tag处理类负责创建或设置页面中定义的脚本变量,用pageContext.setAttribute(name,value,scope)或pageContext.setAttribute(name,value)方法来实现。一般来说,tag处理类通过脚本变量的名称来获取它,脚本变量的名称一般可用get方法来获得。

如果脚本变量的值依赖于tag处理类中的上下文中某一对象,那它可用pageContext.getAttribute(name,scope)方法来找到那个对象。一般的处理过程是tag处理类先找到脚本变量,再对其进行处理,然后用pageContext.setAttribute(name,object)的方法来设置它的新值。

对象的生存周期(scope)如下表:

对象的生存周期表

名字可访问范围生存周期

page 当前页面一直有效,除非页面向客

户提交响应或重定向到

一个新页面

request 当前页面或当前页面重

定向到的页面一直有效,除非页面向客户提交响应

session 当前页面或在同一浏览

器窗口中的页面一直有效,除非关闭当前浏览器、超时、网络故障

application 整个web应用程序的所

有请求一直有效,除非发生网络故障、服务器故障

提供关于脚本变量的信息

以下示例定义了一个名为“book”的脚本变量,用来访问程序中关于书的信息:

<%= messages.getString(“CartRemoved”) %>

当包含此tag的JSP页面被编译时,jsp引擎会自动生成关于此book的同步的代码(同步可以避免几个客户同时访问此book时造成的冲突),要生成同步代码,jsp引擎需要知道此脚本变量的如下信息:

·脚本变量名称

·脚本变量所属的类

·此脚本变量是否引用了一个新的或已存在的对象

·此脚本变量的有效性

有两种办法可以向jsp引擎提供关于脚本变量的信息:在TLD中定义variable子元素,或用tei-class 子元素定义一个额外tag信息类。用variable最简单,但可能降低了一些灵活性。

Variable元素

Variable元素有如下子元素:

·name-given ?D?D 给出的名字,是一个常量

·name-from-attribute?D?D 属性名,在编译时给出的属性名

name-given或name-from-attribute两者必须选一,但以下子元素是可选的:

·variable-class?D?D变量的类型,缺省为https://www.360docs.net/doc/025839633.html,ng.String。

·declare?D?D此脚本变量是否引用了一个新对象,缺省为True。

·scope?D?D脚本变量的范围,缺省为NESTED。下表描述了scope的几种类型:

脚本变量的有效范围

值有效性方法

NESTED 在tag标签的开始和结束

之间如果tag处理类实现BodyTag接口,则在doInitBody和doAfterBody中调用,否则在doStartTag中调用

AT_BEGIN 从tag标签的开始一直到

页面结束如果tag处理类实现BodyTag接口,则在doInitBody、doAfterBody和doEndTag中调用,否则在doStartTag和doEndTag中调用

AT_END 从tag标签的结束一直到

页面结束

在doEndTag中调用

以struts为例,它的bean:define标签的实现遵循JSP1.1规范,此规范要求使用额外tag信息类来定义脚本变量。Variable元素是JSP1.2规范中加入的。以bean:define标签为例,你可以定义如下variable 元素:

id

database.BookDetails

true

AT_BEGIN

额外tag信息类

如果要定义一个额外tag信息类,你要继承javax.servlet.jsp.TagExtraInfo类。一个TagExtraInfo类必须实现getVariableInfo方法,此方法返回一个叫VariableInfo的数组类,它包括如下信息:

·变量名

·变量所属类名

·此变量是否引用了一个新对象

·此变量的有效范围

jsp引擎将一个名为data的参数传给getVariableInfo方法,data中包括tag标签中的所有“属性名?D?D 属性值”对。它可以用来向VariableInfo对象提供脚本变量的名字和类名。

以struts为例,它在bean:define标签中定义了一个名为DefineTei的额外tag信息类,用来向脚本变量提供信息。由于脚本变量的名称(book)和类名(database.BookDetails)是通过tag标签的属性来传递的,它们一般定义在VariableInfo的构建代码中,并且可用data.getAttributeString方法来得到这些信息。如果要允许book脚本变量能在从tag开始直到整个JSP页面结束的范围内都可用的话,那它的范围应设为AT_BEGIN。如下所示:

public class DefineTei extends TagExtraInfo

{

public VariableInfo[] getVariableInfo(TagData data)

{

String type = data.getAttributeString(“type”);

If( type == null)

type = “https://www.360docs.net/doc/025839633.html,ng.Object”;

return new VariableInfo[] {

new VariableInfo(data.getAttributeString(“id”),

type,

true,

VariableInfo.AT_BEGIN)

};

}

}

注意:关于额外tag信息类的类名必须要在TLD中的tag标签下的tei-class子元素中定义。因此,DefineTei的tei-class中的定义看起来如下:

org.apache.struts.taglib.bean.DefineTagTei

具有协作关系的tag

tag通过共享对象来进行协作,JSP技术支持2种方式的对象共享。

第一种方法是使用pageContext对象进行对象的共享(可支持JSP页面和tag处理类之间的共享),如果在一个tag处理类中要调用由另一个tag处理类创建的对象,可调用pageContext.getAttribute(name, scope)方法。

第二各方式的共享是对于tag之间有嵌套关系而言的,外层的tag所创建的对象对于内层的tag来说是可以共用的。这种形式的共享的好处是减少了可能存在的重名冲突。

要访问一个嵌套tag创建的对象,tag处理类必须先找到此嵌套tag对象,可用TagSupport的静态方法TagSupport.findAncestorWithClass(from, class)或TagSupport.getParent方法。前者在当不确定此tag 是否为嵌套tag对象时使用。一旦它的父类被找到,它就能访问其所有动态或静态创建的对象。静态创建的对象是父类的成员,而动态创建的对象可能是父类的私有对象。诸如此类的对象可以用tag处理类的setValue方法来保存,用getValue方法来获得。

下例阐述了以上两种共享对象的方法。在这个例子当中,一个查询tag检查一个名为connection的属性名是否在doStartTag中被设置。如果connection属性被设置,tag处理类从pageContext中得到这个connection对象。否则,此tag处理类先找到它的父tag处理类,然后从它的父tag处理类中找到connection 对象。

public class QueryTag extends BodyTagSupport

{

private String connectionId;

public int doStartTag() throws JspException

{

String cid = getConnection();

if(cid != null)

{

//存在一个connection id,使用它。

connection = (Connection) pageContext.getAttribute(cid);

}

else

{

ConnectionTag ancestorTag = (ConnectionTag)findAncestorWithClass(this,

ConnectionTag.class);

if(ancestorTag == null)

{

throw new JspTagException(“一个没有connection属性的查询标签必须被一个connection标记嵌套。”);

}

connection = ancestorTag.getConnection();

}

}

}

此查询标签在JSP页面中的调用形式可以从以下2种定义中任选一种:

...

SELECT account, balance FROM acct_table

where customer_num = <%= request.getCustno() %>

SELECT account, balance FROM acct_table

where customer_num = <%= request.getCustno() %>

与此同时,在TLD中必须指定connection属性为可选的,定义如下:

...

connection

false

jsp-servlet题库(附答案)

1.B 编写一个Filter,需要() A. 继承Filter 类 B. 实现Filter 接口 C. 继承HttpFilter 类 D. 实现HttpFilter接口 2.D 自定义标签的配置文件放在________ A. WebRoot B. lib C. classes D. WEB-INF 3. ABC 有关会话跟踪技术描述正确的是( )(多选) A. Cookie是Web服务器发送给客户端的一小段信息,客户端请求时,可以读取该信息发送到服务器端。 B. 关闭浏览器意味着会话ID丢失,但所有与原会话关联的会话数据仍保留在服务器上,直至会话过期。 C. 在禁用Cookie时可以使用URL重写技术跟踪会话。 D. 隐藏表单域将字段添加到HTML表单并在客户端浏览器中显示。 4.C 在J2EE中,重定向到另一个页面,以下()语句是正确的 A. request . sendRedirect(“http :// www . svse . com . cn”); B. request . sendRedirect(); C. response . sendRedirect(“http: // www . svse . com . cn”); D. response .sendRedirect(); 5.B EL表达式,${10 mod 3},执行结果为( ) A. 10 mod 3 B. 1 C. 3 D. null 6. C 自定义标签的作用是( ) A. 编写和使用方便 B. 规定是这样的,如果不用,别人会说我们不专业 C. 可以减少jsp中的java代码,将代码与界面标签分离,简化前台开发 D. 连数据库 7.B request.getRequestDispatcher().forward(request,response)称之为( ) A. 流转 B. 转发 C. 重定向 D. 导航 8. BCD 有关Servlet的生命周期说法正确的有( ) (多选) A. Servlet的生命周期由Servlet实例控制。 B. init()方法在创建完Servlet实例后对其进行初始化,传递的参数为实现ServletContext 接口的对象。 C. service()方法响应客户端发出的请求。 D. destroy()方法释放Servlet实例。 9.B 在J2EE中,给定某Servlet的代码如下,编译运行该文件,以下陈述正确的是()。(选择一项) Public class Servlet1 extends HttpServlet{ public void init() throws ServletException{ } public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); out.println("hello!"); } A. 编译该文件时会提示缺少doGet()或者dopost()方法,编译不能够成功通过 B. 编译后,把Servlet1.class放在正确位置,运行该Servlet,在浏览器中会看到输出文字:hello!

在JSP中用自定义标签实现集合的遍历—山寨版cforeach

【文章标题】在JSP中用自定义标签实现集合的遍历——山寨版 【文章作者】曾健生 【作者邮箱】zengjiansheng1@https://www.360docs.net/doc/025839633.html, 【作者QQ】190678908 ******************************************************************************* 在JSTL中,标签可方便地遍历集合或数组,在了解了自定义标签后,可动手实现标签的功能。 在编写自定义标签前,总要把实验环境搭建好^-^ 首先,定义一个Person类,在实验的集合中就是存放这个类的实例,代码如下:package com.javaeye.newjueqi; /** *实验类Person */ public class Person { private String name; private int age; public String getName() { return name; } public void setName(String name) { https://www.360docs.net/doc/025839633.html, = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } } 既然是遍历集合,那么集合也是必须的,我们在测试页面TestMyELTag.jsp上写下如下的JSP代码,生成一个测试用途的集合ArrayList,集合中有三个元素 <% //第1个人对象 Person p1=new Person(); p1.setName("Tom"); p1.setAge(23); //第2个人对象 Person p2=new Person(); p2.setName("Mike");

JSP的3个编译指令、7个动作指令

JSP的3个编译指令、7个动作指令 3个编译指令:page、include、taglib JSP的编译指令是通知JSP引擎(Tomcat、WebLogic)的消息,它不直接生成输出。 JSP引擎的工作原理: 当一个JSP页面第一次被访问的时候,JSP引擎将执行以下步骤: (1)将JSP页面翻译成一个Servlet,这个Servlet是一个java文件,同时也是一个完整的java程序 (2)JSP引擎调用java编译器对这个Servlet进行编译,得到可执行文件class (3)JSP引擎调用java虚拟机来解释执行class文件,生成向客户端发送的应答,然后发送给客户端 以上三个步骤仅仅在JSP页面第一次被访问时才会执行,以后的访问速度会因为class文件已经生成而大大提高。当JSP引擎街道一个客户端的访问请求时,首先判断请求的JSP页面是否比对应的Servlet新,如果新,对应的JSP需要重新编译。 编译指令都有其默认值,因此无须为每个指令设置其值。 常见的编译指令有3个: (1)、page:是针对当前页面的指令; (2)、include:用于指定包含另一个页面; (3)、taglib:用于定义和访问自定义标签。 使用编译指定的语法格式如下: <%@ 编译指令名属性1="属性值" 属性2="属性值" ...%>

1、page指令: 是针对当前页面的指令,通常位于JSP页面的顶端,一个JSP页面可以使用多page指令。 常用的page指令如下的格式: <%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %> <%@ page import="java.sql.*" %> 常用的page的属性如下: (1)、contentType:用于设定生成网页的文件格式和编码字符集,即MIME类型和页面字符集类型,默认MIME类型是text/html,默认的字符集类型 为:ISO-8859-1; (2)、language:声明当前JSP页面使用的脚本语言的种类,因为页面是JSP页面,所以该属性的值通常都是java。 (3)、errorPage:指定错误处理页面,如果本页面产生了异常或者错误,而该页面没有对应的处理代码,则会自动调用该属性指定的JSP页面; (4)、pageEncoding:指定生成网页的编码字符集; (5)、import:用于导入包。下面几个包是默认自动导入的,不需要显示导入。默认导入的包有:https://www.360docs.net/doc/025839633.html,ng.*、javax.servlet.*、javax.servlet.jsp.*、javax.servlet.http.*; 2、include指令: 语法格式为:<%@ include file="要包含的页面路径" %> jsp中有两种包含模式,一种是<%@ include file="要包含的页面路径" %>,这种叫静态包含; 另一种是 ,这叫做动态包含。

java笔试题127

选择器 第1题. 编写一个Filter,需要() A. 继承Filter 类 B. 实现Filter 接口 C. 继承HttpFilter 类 D. 实现HttpFilter接口 正确答案为:B 第2题. 自定义标签的配置文件放在________ A. WebRoot B. lib C. classes D. WEB-INF 正确答案为:D 第3题. 在J2EE中,重定向到另一个页面,以下()语句是正确的 A. request . sendRedirect(“http :// www . svse . com . cn”); B. request . sendRedirect(); C. response . sendRedirect(“http: // www . svse . com . cn”); D. response .sendRedirect(); 正确答案为:C 第4题. 自定义标签的作用是 A. 编写和使用方便 B. 规定是这样的,如果不用,别人会说我们不专业 C. 可以减少jsp中的java代码,将代码与界面标签分离,简化前台开发 D. 连数据库 正确答案为:C 第5题. request.getRequestDispatcher().forward(request,response)称之为 A. 流转 B. 转发 C. 重定向 D. 导航 正确答案为:B

第6题. 在J2EE中,给定某Servlet的代码如下,编译运行该文件,以下陈述正确的是()。(选择一项) Public class Servlet1 extends HttpServlet{ Publicvoid init() throws ServletException{ } Publicvoid service(HttpServletRequest request,HttpServletResponse response) ThrowsServletException,IOException{ PrintWriterout = response.getWriter(); out.println(“hello!”); } } A. 编译该文件时会提示缺少doGet()或者dopost()方法,编译不能够成功通过 B. 编译后,把Servlet1.class放在正确位置,运行该Servlet,在浏览器中会看到输出文字:hello! C. 编译后,把Servlet1.class放在正确位置,运行该Servlet,在浏览器中看不到任何输出的文字 D. 编译后,把Servlet1.class放在正确位置,运行该Servlet,在浏览器中会看到运行期错误信息 正确答案为:B 第7题. 在Servlet中,response.getWriter()返回的是____________ A. JspWriter对象 B. PrintWriter对象 C. Out对象 D. ResponseWriter对象 正确答案为:B 第8题. 在web.xml中使用___________标签配置过滤器 A. B. C. D. 正确答案为:A 第9题. 自定义标签的描述文件在web.xml中配置正确的

JavaEE自定义标签(DOC)

JavaEE自定义标签:标签类的创建、tld配置文件的创建(位置、如何创建)、Web-XML配置、JSP应用 1、标签 以类似于html标签的方式实现的java代码的封装。 第一:形成了开发标签的技术标准---自定义标签的技术标准。 第二:java标准标签库(sun之前自己开发的一系列的标签的集合)jstl,以及表达式语言E L。 2、自定义标签 (1)理解: 可以允许用户自己根据自己的需要,去开发自己的标签的技术规范。 通俗:在Jsp页面上,以简单的标签封装java代码的操作。 //在自定义标签类中,先调用setPageContext()实例化内置对象: //然后是doStartTag()方法,核心代码放在这个方法里面:

//定义变量,变量的Get、Set方法: private String UserName = "";

//tld配置文件放置在WEB-INF目录下,主要的标记如下,主要的配置如下: //前面tlib-version版本号、Jsp-version JSP的版本号、short-name 命名空间、是必须有的 //uri,注意是uri而不是url,url是访问的路径。 //而uri为访问时候的别名,写在JSP页面上的标签的别名。 //name为此标签类的别名,tag-class 为标签类的存放的物理路径 //body-content 为是否有标签体,如果是/子关闭标签设置为EMPTY //如果涉及到标签属性,可以设置attribute,其中name为属性的名称,而不是别名,required 属性是否必须设置,rtexprvalue 是否程序运行时候为属性赋值。 //如果在tld文件中不设置uri,则在web-xml中必须对talib-uri进行设置。

自定义标签库

JSP标签库(也称自定义库)可看成是一套产生基于XML脚本的方法,它经由JavaBeans来支持。在概念上说,标签库是非常简单和可以重用的代码构造。 自定义标签有着丰富的特点,它们可以: 1.可以通过调用页面传递的属性进行自定义; 2.可以访问对于JSP页面可能的所有对象; 3.可以修改由调用页面产生的响应。 4.可以相互间通信。你可以创建并初始化一个JavaBean组件,创建一个变量引用标签中的bean,接着在其它的标签中引用该bean. 5.可以在一个标签中嵌套另一个,可以在JSP页面中进行复杂的交互。自定义标签为在JSP项目中创建易于重用的代码打开了一扇大门。你所需要的只是标签库和它的文档说明。 通过实现接口或者继承现有的类,我们就可以开发自定义的标签。常用的接口有:

TagSupport类 该类是IterationTag的缺省实现。除了实现原有方法外,本身还增加了一些有用的其他方法和成员变量。下表列出其中重要的几个:

BodyTagSupport类 该类同时继承了TagSupport类,并实现BodyTag接口。除了前表所示方法,该类还提供了一些其它方法便于使用。 实现Tag接口 所有的标签处理器都需要间接或直接的实现这个接口。 下面列出Tag接口定义的方法和常量:

setPageContext()方法 setPageContext()方法是一个定制标签声明周期内第一个要被调用的方法。完整写法是: public void setPageContext(PageContext); jsp引擎会将jsp页转换时隐含创建的pageContext对象,作为参数,调用setPageContext方法。 通常的做法会将这个参数保存为本标记处理器的参数。 setParent()和getParent()方法 当标签嵌套使用时,外层的标签被成为父标签,内部的被称为子标签。完整的写法是: public void setParent(Tag); public Tag getParent(); 其中setParent方法对父标签对象进行设置。而getParent方法用以获得父标签对象。

JSP课后习题答案

JSP课后习题答案 单元3 课本60页课后练习 填空题 1、tomcat服务器的默认端口是:8080 2、静态网页的内容是相对固定的,而动态网页的内容是随着访问时间的访问者发生变化。(填:动态网页或静态网页) 3、在tomcat成功安装和启动后,可以在浏览器中输入http://localhost:8080来测试安装配置是否正常。 4、在WEB-INF下必须有一个XML文件是web.xml 选择题 1、B 2、D 3、A 4、D 单元4 课本87页课后练习 填空题 1、脚本程序是一段在客户端请求时需要先被服务器执行的java 代码,它可以产生输出,同时也是一段流控制语句。 2、在jsp的3种指令中,用来定义与页面相关的指令是Page指令;用于在jsp页面中包含另一个文件的指令是Include指令(静态包含);用来定义一个标签库以及其自定义标签前缀的指令是Taglib指令。 3、动作元素允许在页面被请求时包含一些其他资源,如一个静态的HTML文件和动态的JSP文件。

4、Page指令的MIME类型的默认值为text/html,默认字符集是iso-8859-1 。 5、Jsp的隐藏注释格式为<%-- --%>或者<%--comment--%> Jsp的输出注释的格式是。 选择题 1、A 2、A 3、D 4、C 5、B 6、D 简答题(答案在课本79页) 请查阅资料并结合课堂上所讲内容,阐述include静态包含和动态包含指令的区别。 答:动态include指令是在执行时才将对包含的文件进行处理,要进行编译,可以带参数;静态的include的指令是简单的将两个文件进行合并,使其成为一个新的文件。 单元5 课本130页课后练习 填空题 1、在jsp内置对象中,用于请求相关的对象是Request对象。该对象可以使用getParameter(String s)方法来获取表单元素提交的信息。 2、Response对象中用来动态改变contentType 实型的方法是setContentType() 3、Session对象封装了属于客户会话的所有信息,该对象可以使用setAttribute()方法来设置指定名字的属性。

自定义标签(Custom Tag)

一、概述 JSP中有一块重要的技术:自定义标签(Custom Tag),最近这几天在学习Struts的时候发现Struts中使用了很多自定义标签,如html、bean等。所以我就做了个简单的试验,学习一下这种技术。 首先介绍一下这种技术吧! 1.优点: 取代了JSP中的Java程序,并且可以重复使用,方便不熟悉Java编程的网页设计人员。 2.开发流程: (1)编写JSP,在JSP中使用自定义标签。 (2)在web.xml中指定JSP中使用的标签的.tld(标签库描述文件)文件的位置。 (3) .tld文件中指定标签使用的类。 3. 自定义标签的分类: (1)简单标签:如< mytag:helloworld/> (2)带属性标签:如”/> (3)带标签体的标签: 在自定义标签的起始和结束标签之间的部分为标签体(Body)。Body的内容可以是JSP中的标准标签,也可以是HTML、脚本语言或其他的自定义标签。 ”> (4)可以被Script使用的标签: 定义了id和type属性的标签可以被标签后面的Scriptlet使用。 <%oraDB.getConnection(); %> 4.接口及其他

jsp自定义标签实例

jsp自定义标签实例 JSP自定义标签。在自定义标签的起始和结束标签之间的部分为标签体(Body)。 标签处理程序类:定义标签的行为,并在JSP引擎遇到自定义标签时调用执行。 标签库描述符(TLD)文件:描述标签库的XML文档,向JSP引擎提供有关自定义标签的标签处理程序的信息。tag标签相关属性:实现简单标签处理程序标签处理程序是一个在运行时调用的Java类,它包含在JSP文件中使用的自定义标签的实现代码.标签处理程序必须实现或扩展javax.servlet.jsp.tagext包中的类和接口.javax.servlet.jsp.tagext含有允许标签处理程序类与JSP容器通信的接口和类。 最近在项目中要用到这种技术,所以自己就写一个经典的HelloWorld实例:其实对自定义标签已经早有接触了(Struts中使用了很多自定义标签,如html、bean等)使用这种技术的优点:取代了JSP中的Java程序,并且可以重复使用,方便不熟悉Java编程的网页设计人员。 实现步骤: 首先启动eclipse,新建一个web项目(废话...) 1、修改web.xml文件,增加自定义标签支持。 Java代码 2、创建标签库TLD文件tlds\helloworld.tld 。 Java代码 这里注意:web.xml和xxx.tld这两个XML文件的头信息的版本匹配很重要,否则会导致页面报错找不到标签。

3、创建标签处理程序类HelloWorldTag(重写doStartTag和doEndTag方法)。 Java代码 补充: doStartTag()方法是遇到标签开始时会呼叫的方法,其合法的返回值是EVAL_BODY_INCLUDE与 SKIP_BODY,前者表示将显示标签间的文字,后者表示不显示标签间的文字。 doEndTag()方法是在遇到标签结束时呼叫的方法,其合法的返回值是EVAL_PAGE与SKIP_PAGE,前者表示处理完标签后继续执行以下的JSP网页,后者是表示不处理接下来的JSP网页。 doAfterBody(),这个方法是在显示完标签间文字之后呼叫的,其返回值有EVAL_BODY_AGAIN与 SKIP_BODY,前者会再显示一次标签间的文字,后者则继续执行标签处理的下一步。 EVAL_BODY_INCLUDE:把Body读入存在的输出流中,doStartTag()函数可用。 EVAL_PAGE:继续处理页面,doEndTag()函数可用。 SKIP_BODY:忽略对Body的处理,doStartTag()和doAfterBody()函数可用。 SKIP_PAGE:忽略对余下页面的处理,doEndTag()函数可用。 EVAL_BODY_BUFFERED:申请缓冲区,由setBodyContent()函数得到的BodyContent对象来处理tag的body,如果类实现了BodyTag,那么doStartTag()可用,否则非法。

自定义标签的整理(新手教程)

在J2EE项目中,JSP页面常常通过在静态页面模板中嵌入scriptlets来插入动态的内容。 然而,随着复杂程序的增加,JSP页面也变得难于管理。虽然用这种方法开发小形项目唾手可得, 但是scriptlets仍然要面对下面的不利情况: Scriptlet难于阅读和修改。带有Scriptlets的JSP 页面混合了两种语言,这使得阅读和维护变得很困难。 Scriptlets鼓励了将数据表现和逻辑处理的混合。JSP 页面主要功能是数据表现而不是逻辑处理。逻辑处理属于Java类的工作,他们应该由程序员维护并能够重用。 Scriptlets不能够被重用。当scriptlets被重用时,常常是鼓励拷贝-粘贴来达到重用的效果,这是一种危险的维护方法。每一次你拷贝-粘贴scriptlets时,将有更多行多余的代码需要维护。 Scriptlets的参数很难进行确定传递. 无论如何,绝大数人简单的拷贝,粘贴、编辑或者类似的增加,使得大部份的多余的代码需要更多的维护。 与其创建充满了scriptlets的巨大的JSP页面,不如考虑使用用户自定义标签。用户自定义标签允许你创建、在JSP中使用你自己定义的类HTML标签。每当JSP引擎遇到用户自定义标签时,就会自动查找标签处理类,并自动调用他。页面中的自定义标签将会被票签处理类的输出所代替。这就

使得JSP页面不用直接在页面写Java代码,就可以指定生成动态的内容的。 用户自定义标签为你的网页设计提供了N种好处:他提高了页面代码的可读性。页面设计人员而不是程序员,能够使用很比使用Scriptlets更容易的使用标签。维护代码的程序员也只需个性标签库面不是JSP页面,这样他就不要再冒着破坏页面美观的风险。在使用标签的每一处,增强或者固定的标签改变了标签了的表现。标签比Scriptlets更容易确定参数,因为他会被作为一种属性或者在标签体内被传达。最后,标签比Scriptlets高度的可重用性,因为你可以创建共享的、可重用的自定义标签库。 JSTL提供的就是这种标准的自定义标签集。 让我们通过看一个简单的JSP页面例子,来看看如何使用自定义标签。下面这个页面使用scriptlet来得到数据: <%@ page import="java.text.SimpleDateFormat" %> <%@ page import="java.util.Date" %> Sample JSP

The date and time at the server are: <% String sformat = "EEEE, d MMMM yyyy 'at' kk:mm:ss z"; SimpleDateFormat format = new SimpleDateFormat(sformat); Date date = new Date(); String sdate = format.format(date); out.print(sdate); %>

JSP自定义标签详细

JSP标签库 在这篇文章中,我们主要讨论: ·什么是自定义tag标签? ·怎么使用tag标签? o 声明要使用的tag库 o 找到与之对应的tag处理类 o tag标签的类型 ·自定义tag标签 o tag处理类 o tag库描述 o tag标签示例 o 带属性的tag o 带body的tag o 定义了脚本变量的tag o 具有协作关系的tag ·自定义tag标签 o 一个迭代tag的例子 o 一个模板tag库 o tag处理类到底是怎样被调用的? 什么是自定义的tag? 一个自定义的tag标签是用户定义的一种JSP标记。当一个含有自定义的tag标签的JSP页面被jsp引擎编译成servlet时,tag标签被转化成了对一个称为tag处理类的对象进行的操作。于是当JSP页面被jsp 引擎转化为servlet后,实际上tag标签被转化成为了对tag处理类的操作。 自定义tag标签有很多特色,诸如: ·可以在JSP页面中自定义tag标签的属性 ·访问JSP页面中的所有对象 ·可以动态地修改页面输出 ·彼此这间可以相互通信。你可以先创建一个JavaBeans组件,然后在一个tag中调用此JavaBeans 组件,同时可以在另一个tag中调用它。 ·tag允许相互嵌套,可以在一个JSP页面中完成一些复杂的交互。 使用tag标签 本节主要描述怎样在JSP页面中使用tag标签,以及tag标签的不同类型。 要使用tag标签,JSP程序员必须做2件事: ·声明此tag标签的tag库 ·实现此tag标签 声明tag标签所在的tag库 如果要使用tag标签,则应用JSP的taglib指示符来指定其tag库(注意:taglib要在在使用此tag标

jsp页面符号指令

JSP页面的<%@ ...%> 这表示是指令,主要用来提供整个JSP网页相关的信息,并且用来设定JSP 网页的相关属性。例如:网页的编码方式、语法、信息等。 起始符号为:<%@ 终止符号为:%> 目前有三种指令:page、include和taglib,每一种指令都有各自的属性。 page指令是最复杂的JSP指令,它的主要功能为设定整个JSP网页的属性和相关功能。 include指令表示:在JSP编译时插入一个包含文本或代码的文件,这个包含的过程是静态的,而包含的文件可以是JSP网页、HTML网页、文本文件,或是一段Java程序。 taglib指令能够让用户自定义新的标签。 JSP页面的<% ...%> jsp中如果要写java代码就要用<% %>来给括起来。 这是jsp的语法格式,此外还有很多,如: jsp指令<%@ %> jsp声明<%! %> jsp表达式<%= %> jsp注释<%-- --%> jsp里的java代码<%java代码%> request的常用方法 request.getSchema()可以返回当前页面使用的协议,http 或是https; request.getServerName()可以返回当前页面所在的服务器的名字; request.getServerPort()可以返回当前页面所在的服务器使用的端口,就是8080;

request.getContextPath()可以返回当前页面所在的应用的名字。 清除浏览器中的缓存 清除浏览器中的缓存,三行语句合起来用,就可以使你再次进入曾经访问过的页面时,ie浏览器必须从服务端下载最新的内容,达到刷新的效果。meta是用来在HTML文档中模拟HTTP协议的响应头报文。meta 标签用于网页的与中。 是用于设定禁止浏览器从本地机的缓存中调阅页面内容,设定后一旦离开网页就无法从Cache中再调出;

JSP考试题

针对以下题目请选择正确的答案 1)在JSP中,要定义一个方法,需要用到以下()元素。(选择一项)a) <%= %> b) <% %> c) <%! %> d) <%@ %> 2)JSP页面经过编译之后,将创建一个()。(选择一项) a) applet b) servlet c) application d) exe文件3)当JSP页面执行自定义标签,遇到结束标签时将调用()方法执行处理。 a) doStartTag() b) doEndTag() c) doInitBody() d) doAfterBody() 4) 在J2EE中,test.jsp文件中有如下一行代码:(选择一项) 要使user对象中一直存在于对话中,直至其终止或被删除为止,下划线中应填入()。 a) page b) request c) session d) application 5) 在J2EE中,以下不是JSP隐式对象的是()。(选择一项) a) pageContext b) context c) application d) out 6) Servlet中,HttpServletResponse的()方法用来把一个Http请求重定向到另外的URL。(选择一项) a) sendURL() b) redirectURL() c) sendRedirect() d) redirectResponse() 7) 在JSP中,page指令的()属性用来引入需要的包或类。 a) extends b) import c) languge d) contentType

jsp简答题

1.JSP的特点及工作原理(执行过程) JSP运行原理解释:JSP 的执行过程主要包括以下步骤: 1.客户端发出Request请求; 2.JSP 容器将JSP 转译成Servlet 的源代码; 3.将产生的Servlet 的源代码经过编译后,并加载到内存执行; 4.把结果Response 响应至客户端。 5. JSP页面首次访问速度慢,之后访问速度快(直接将内存中首次加载的结果返回) 2.JSP指令标签有哪些及作用 指令标记是为JSP引擎而设计的,它向JSP引擎发送消息,告诉引擎如何处理其余JSP页面,它并不会直接产生任何看得见的输出。 指令的语法形式为:<%@ 指令%> 指令主要包括:page 指令、include 指令和taglib指令。 (1<%@page %>指令用来设置整个JSP页面的相关属性和功能 page指令可以在JSP页面的任何地方、以任何顺序出现,而且一个页面可以包含任意数量的page指令。 为了程序的可读性以及好的编程习惯,最好还是把它放在JSP页面的顶部。 (2 include指令的语法形式为: <%@ include file="relativeURL" %> 该指令的作用是在JSP页面中该指令出现的位置静态插入一个文件。 所谓静态插入,是指当前的JSP页面和被嵌入的文件合并成一个新的JSP页面,然后JSP 引擎再将这个新页面转换成Servlet。 include指令能让页面内容分成几个组成部分分别管理。实现多个文件共享同一个文件。(3taglib指令:代码复用是衡量软件可维护性的重要标志之一。 一个web应用中可能有许多JSP页面需要使用某些相同的信息 JSP页面可以通过自定义标记使用一种特殊的文件Tag文件(标记文件),将需要重复使用的代码编写成Tag文件就可以实现代码复用 Tag文件的结构和JSP文件相同,只是文件扩展名为.tag 3.在JSP文件中注释种类及区别 (1)客户端注释使用HTML标签“”创建的 语法形式: 客户端注释类似于普通的HTML注释,唯一的不同在于,可以在这种JSP注释中加入特定

JSP的三大指令 七大动作 九大对象

JSP的三大指令七大动作九大对象 JSP的三个编译指令 Page:该指令是针对当前页面的指令<%@ page [Attribute="Value"] %> language:声明当前jsp页面使用的脚本语言的种类,通常是java,默认是java,无需设置 extends:指定jsp编译产生的类继承的父类,或者实现的接口 import:用于导入包,默认已经导入的包有 https://www.360docs.net/doc/025839633.html,ng.*,javax.servlet.*,javax.servlet.jsp.*,javax.servlet.http.* session:设定这个jsp页面是否需要HttpSession buffer:指定输出缓冲区的大小 autoflush:当缓冲区即将溢出时,是否自动强制输出缓冲区的内容 info:设置该JSp程序的信息,采用Servlet.getServletInfo()获取该值 errorPage:指定错误处理页 isErrorPage:设置本JSp是否为错误处理程序 ContentType:用于设定生成网页的文件格式和编码格式 include:用于指定包含另一个页面<%@include file="path"%> taglib:用于定义和访问自定义标签 JSP的7个动作指令 jsp:forward 执行页面转向,将请求的处理交给下一个页面 常和param指令一起 jsp:param 用于传递参数,必须与其他支持参数的标签一起使用 jsp:include 用于动态引入一个jsp页面 也可以在标签内向引用页面传递param jsp:plugin 用于下载javaBean 或Applet到客户端执行 jsp:useBean 创建一个javaBean实例 scope属性:page:该javaBean实例仅在本页面有效 request: 仅本次请求有效 session:在本次session有效

JSP技术基础习题

第一章 JSP技术基础习题 一、选择题 1.当用户请求jsp页面时,JSP引擎就会执行该页面的字节码文件响应客户的请求,执行字节码文件的结果是() A)发送一个JSP源文件到客户端 B)发送一个Java文件到客户端 C)发送一个HTML页面到客户端 D)什么都不做。 2.当多个用户请求同一个JSP页面时,Tomcat服务器为每个客户启动一个()A)进程 B)线程 C)程序 D服务。 3.下列动态网页和静态网页的根本区别描述错误的是。() A)静态网页服务器端返回的HTML文件是事先存储好的 B)动态网页服务器端返回的HTML文件是程序生成的。 C)静态网页文件里只有HTML标记,没有程序代码。 D)动态网页中只有程序,不能有HTML代码。 4.不是JSP运行必须的是() A)操作系统 B)JavaJDK C)支持Jsp的Web服务器 D)数据库 5.URL是Internet中资源的命名机制,URL由三部分构成。() A)协议、主机DNS名或IP地址和文件名 B)主机、DNS名或IP地址和文件名、协议 C)协议、文件名、主机名 D)协议、文件名、IP地址 6.下列说法哪一项是正确的() A)Apache用于ASP技术所开发网站的服务器 B)IIS用于CGI技术所开发网站的服务器 C)Tomcat用于JSP技术所开发网站的服务器 D)WebLogic用于PHP技术所开发网站的服务器 7.Tomcat服务器的默认端口号是:() A)80 B)8080 C)21 D)2121 二、判断题 1.动态网页和静态网页的根本区别在于服务器端返回的HTML文件是事先存储好的还是由动态网页程序生成的。() 2.Internet和intranet的含义意义相同。() 3.互联网起源于美国国防部高级研究计划管理局建立的ARPA网。() 4.Web开发技术包括客户端和服务器端的技术。() 5.Tomcat和JDK都不是开源的。()

详细介绍JSP技术的两种架构模型

JSP和JavaBean模型将页面显示和业务逻辑处理分开。JSP实现页面显示,JavaBean对象用来保存数据和实现商业逻辑。 运用JSP/Servlet实现的web动态交互,主要采用JSP和JavaBean模型还有JSP和JavaBean+Servlet模型。本文分别介绍这两种模型,并比较它们的优缺点。 一。JSP和JavaBean模型 模型的结构如下图所示,称之为JSP和JavaBean模型。其工作原理是:当浏览器发出请求时,JSP接收请求并访问JavaBean.若需要访问数据库或后台服务器,则通过JavaBean 连接数据库或后台服务器,执行相应的处理。JavaBean将处理的结果数据交给JSP.JSP提取结果并重新组织后,动态生成HTML页面,返回给浏览器。用户从浏览器显示的页面中得到交互的结果。 JSP和JavaBean模型充分利用了JSP技术易于开发动态网页的特点,页面显示层的任务由JSP(但它也含事物逻辑层的内容)承担,JavaBean主要负责事务逻辑层和数据层的工作。JSP和JavaBean模型依靠几个JavaBean组件实现具体的应用功能,生成动态内容,起最大的特点就是简单。 二。JSP和JavaBean+Servlet模型 JSP和JavaBean+Servlet模型的体系结构如下图所示,称之为JSP和JavaBean和Servlet 模型。它是一种采用基于模型视图控制器(Model和View和Controller)的设计模型,即MVC模型。 该模型将JSP程序的功能分为3个层次:Model(模型)层、View(视图)层、Controller (控制器层)。Model层实现业务逻辑,包括了Web应用程序功能的核心,负责存储与应用程序相关的数据;View层用于用户界面的显示,它可以访问Model层的数据,但不能更改这些数据;Controller层主要负责Model和View层之间的控制关系。 具体实现时,JavaBean作为模型层,Servlet作为控制层,JSP作为视图层。每层的作用如下: 1.JavaBean作为Model层,实现各个具体的应用逻辑和功能。 2.Servlet作为Controller层,负责处理HTTP请求,包括: 对输入数据的检查和转换。 通过JavaBean访问数据库。 初始化JSP页面中要用到的JavaBean或对象。 根据处理中不同的分支和结果,决定转向那个JSP等。 3.JSP作为View层,负责生成交互后返回的界面。它主要通过信息共享,获取Servlet生成的对象或JavaBean,从中取出数据,插入到HTML页面中。 该模型的工作原理是:所有的请求都被发送给作为控制器的Servlet.Servlet接收请求,并

TLD文件配置详解jsp自定义标签

TLD文件配置详解(jsp自定义标签) TLD文件配置详解 write org.apache.struts.taglib.bean.WriteTag empty bundle false true 其中: write:这个Tag的名字 org.apache.struts.taglib.bean.WriteTag:这个Tag 是由那个类实现的(这个class可以在struts.jar包中找到) empty:这个Tag可以直接结尾,不需要填写内容 这里bodycontent有三个可选值 jsp 标签体由其他jsp元素组成 如果其有jsp元素,那么标签会先解释,然后将元素的实际值传入。比如标签体里含有<%=attributeName%>这样子的jsp元素,此时标

签会按attributeName的实际值是什么就传入什么。这个是最常用的一个。 empty 标签体必须为空 在引用这个Tag的时候,可以,而不必 tagdependent 由标签解释,不带jsp转换 这里标识的是这个Tag的一个参数 bundle这个参数的名字 false这个参数是否是必填相 如果为true则必须写这个参数,否则会报错 true是说这个标签的值可以写入 rtexprvalue:"RUN-TIME EXPRESSION VALUE",是否可以动态赋值,在jsp中如value="<%=attributeName%>"

相关主题
相关文档
最新文档