javabean组件在jsp文 档中的应用

29
1 JavaBean JavaBean 组组组 组组组 JSP JSP 组组组组组 组组组组组 组组 组组 : : 组组组 组组组

Upload: grace-travis

Post on 15-Mar-2016

176 views

Category:

Documents


3 download

DESCRIPTION

JavaBean组件在JSP文 档中的应用. 主讲 : 刘晓涛. bean的优点 bean的创建 bean类在服务器上的安装 访问bean属性 显式地设置bean的属性 根据请求参数自动设置bean的属性 多个servlet和JSP页面间共享bean. 议程. 不同 JSP 构造的应用. 遵循某些特定约定的 Java 类 必须具备一个零参数(空)的构造函数 显式地定义这样一个构造函数或者省略所有的构造函数都能满足这项要求 不应该有公开的实例变量(字段) 希望您早就遵循这项准则,使用存取方法而非允许对字段直接访问 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: JavaBean组件在JSP文 档中的应用

1

JavaBeanJavaBean组件在组件在 JSPJSP文文档中的应用档中的应用

主讲主讲 :: 刘晓涛刘晓涛

Page 2: JavaBean组件在JSP文 档中的应用

2议程议程beanbean的优点的优点beanbean的创建的创建beanbean类在服务器上的安装类在服务器上的安装访问访问 beanbean属性属性显式地设置显式地设置 beanbean的属性的属性根据请求参数自动设置根据请求参数自动设置 beanbean的属性的属性多个多个 servletservlet和和 JSPJSP页面间共享页面间共享 beanbean

Page 3: JavaBean组件在JSP文 档中的应用

3不同不同 JSPJSP 构造的应用构造的应用

Page 4: JavaBean组件在JSP文 档中的应用

4背景知识:背景知识: beanbean 是什么?是什么? 遵循某些特定约定的遵循某些特定约定的 JavaJava 类类

必须具备一个零参数(空)的构造函数必须具备一个零参数(空)的构造函数 显式地定义这样一个构造函数或者省略所有的构造函数都能满足这项显式地定义这样一个构造函数或者省略所有的构造函数都能满足这项要求要求

不应该有公开的实例变量(字段)不应该有公开的实例变量(字段) 希望您早就遵循这项准则,使用存取方法而非允许对字段直接访问希望您早就遵循这项准则,使用存取方法而非允许对字段直接访问

持续性的值应该能够通过持续性的值应该能够通过 getXxxgetXxx 和和 setXxxsetXxx 方法来访问方法来访问 如果类有如果类有 getTitlegetTitle 方法,返回方法,返回 StringString ,我们就说类有一个名为,我们就说类有一个名为 titletitle的的 StringString 属性属性 布尔型的属性使用布尔型的属性使用 isXxx isXxx ,而非,而非 getXxxgetXxx

有关有关 beanbean 的更多内容,参见的更多内容,参见 http://java.sun.com/beans/dochttp://java.sun.com/beans/docs/s/

Page 5: JavaBean组件在JSP文 档中的应用

5为什么我们应该使用存取方法,不应使为什么我们应该使用存取方法,不应使用公开字段呢?用公开字段呢? beanbean 不能有公开字段不能有公开字段 因此,应该将下面的代码因此,应该将下面的代码

public double speed;public double speed; 替换为替换为

private double speed;private double speed;public double getSpeed()public double getSpeed(){return(speed);}{return(speed);}public void setSpeed(double newSpeed)public void setSpeed(double newSpeed){speed = newSpeed;}{speed = newSpeed;}

总之,您的所有总之,您的所有 JavaJava 代码都应该遵循这项准则。为什么代码都应该遵循这项准则。为什么呢?呢?

Page 6: JavaBean组件在JSP文 档中的应用

6为什么我们应该使用存取方法,不应使为什么我们应该使用存取方法,不应使用公开字段呢?用公开字段呢? 1) 1) 可以对值加以约束可以对值加以约束public void setSpeed(double newSpeed) {public void setSpeed(double newSpeed) {if (newSpeed < 0) {if (newSpeed < 0) {sendErrorMessage(...);sendErrorMessage(...);newSpeed = Math.abs(newSpeed);newSpeed = Math.abs(newSpeed);}}speed = newSpeed;speed = newSpeed;}}

如果类的用户直接访问这些字段,那么每个用户都得如果类的用户直接访问这些字段,那么每个用户都得负责检查这些约束条件。负责检查这些约束条件。

Page 7: JavaBean组件在JSP文 档中的应用

7为什么我们应该使用存取方法,不应使为什么我们应该使用存取方法,不应使用公开字段呢?用公开字段呢? 2)2) 我们可以在不改变接口的情况下修改内部的表达我们可以在不改变接口的情况下修改内部的表达// Now using metric units (kph, not mph)// Now using metric units (kph, not mph)public void setSpeed(double newSpeed) {public void setSpeed(double newSpeed) {setSpeedInKPH = convert(newSpeed);setSpeedInKPH = convert(newSpeed);}}public void setSpeedInKPH(double newSpeed) {public void setSpeedInKPH(double newSpeed) {speedInKPH = newSpeed;speedInKPH = newSpeed;}}

Page 8: JavaBean组件在JSP文 档中的应用

8使用使用 beanbean :基本任务:基本任务 jsp:useBeanjsp:useBean

在最简单的情况下,这个元素构建一个新的在最简单的情况下,这个元素构建一个新的 beanbean 。常见的用法。常见的用法如下:如下: <jsp:useBean id="beanName“ class="package.Class" /><jsp:useBean id="beanName“ class="package.Class" />

jsp:getPropertyjsp:getProperty 这个元素读取并输出这个元素读取并输出 beanbean 属性的值。用法如下:属性的值。用法如下:

<jsp:getProperty name="beanName"<jsp:getProperty name="beanName"property="propertyName" />property="propertyName" />

jsp:setPropertyjsp:setProperty 这个元素修改这个元素修改 beanbean 的属性(即调用形如的属性(即调用形如 setXxxsetXxx 的方法)。常见的方法)。常见的用法如下:的用法如下: <jsp:setProperty name="beanName“ proper<jsp:setProperty name="beanName“ property=“fff” value=“adfg”/>ty=“fff” value=“adfg”/>

Page 9: JavaBean组件在JSP文 档中的应用

9构建构建 beanbean :: jsp:useBeanjsp:useBean 格式格式

<jsp:useBean id="name" class="package.Class" /><jsp:useBean id="name" class="package.Class" /> 目的目的

不需用到显式的不需用到显式的 JavaJava 编程就能够创建编程就能够创建 JavaJava 类的实例(类的实例( XMLXML 兼容的兼容的语法)语法) 注意注意

简单来说:简单来说:<jsp:useBean id="book1" class="coreservlets.Book" /><jsp:useBean id="book1" class="coreservlets.Book" />可以认为等同于下面的可以认为等同于下面的 scriptletscriptlet<% xxx.Book book1 = new xxx.Book(); %><% xxx.Book book1 = new xxx.Book(); %> 但但 jsp:useBeanjsp:useBean 拥有下面两项额外的优势:拥有下面两项额外的优势:

从请求参数中导出对象的值更容易从请求参数中导出对象的值更容易 在页面和在页面和 servletservlet间共享对象更容易间共享对象更容易

Page 10: JavaBean组件在JSP文 档中的应用

10访问访问 beanbean 的属性:的属性: jsp:getPropertyjsp:getProperty

格式格式 <jsp:getProperty name="name" property="property" /><jsp:getProperty name="name" property="property" />

目的目的 不需用到显式的不需用到显式的 JavaJava 编程就可以访问编程就可以访问 beanbean 的属性(即调用的属性(即调用 getgetXxxXxx 方法)方法)

注意注意 <jsp:getProperty name=“book1” property=“title” /><jsp:getProperty name=“book1” property=“title” />等价于下面的等价于下面的 JSPJSP 表达式表达式<%= book1.getTitle() %><%= book1.getTitle() %>

Page 11: JavaBean组件在JSP文 档中的应用

11设置简单的设置简单的 beanbean 属性:属性: jsp:setPropertyjsp:setProperty

格式格式 <jsp:setProperty name="name“ property="property“ val<jsp:setProperty name="name“ property="property“ value="value" />ue="value" />

目的目的 不需用到显式的不需用到显式的 JavaJava 编程就可以设置编程就可以设置 beanbean 的属性(即调用的属性(即调用 setXsetXxxxx 方法)方法)

注意注意 <jsp:setProperty name="book1“ property="title“ value<jsp:setProperty name="book1“ property="title“ value="Core Servlets and JavaServer Pages" />="Core Servlets and JavaServer Pages" />等价于下面的等价于下面的 scriptletscriptlet<% book1.setTitle("Servlets and JavaServer Pages"); %><% book1.setTitle("Servlets and JavaServer Pages"); %>

Page 12: JavaBean组件在JSP文 档中的应用

12示例:示例: StringBeanStringBeanpackage package xxxxxx;;public class StringBean {public class StringBean {private String message = "No message specified";private String message = "No message specified";public String getMessage() {public String getMessage() {return(message);return(message);}}public void setMessage(String message) {public void setMessage(String message) {this.message = message;this.message = message;}}}} beanbean安装在常规的安装在常规的 JavaJava 目录中目录中

……/WEB-INF/classes/directoryMatchingPackageName/WEB-INF/classes/directoryMatchingPackageName bean (bean ( 和实用工具类和实用工具类 ) ) 一定要在包中一定要在包中 !!

Page 13: JavaBean组件在JSP文 档中的应用

13使用使用 StringBeanStringBean 的的 JSPJSP页面页面 (( 代码代码 ))<jsp:useBean id="stringBean"<jsp:useBean id="stringBean"class=“class=“xxx.StringBeanxxx.StringBean" /><OL>" /><OL><LI>Initial value (from jsp:getProperty):<LI>Initial value (from jsp:getProperty):<I><jsp:getProperty name="stringBean"<I><jsp:getProperty name="stringBean"property="message" /></I>property="message" /></I><LI>Initial value (from JSP expression):<LI>Initial value (from JSP expression):<I><%= stringBean.getMessage() %></I><I><%= stringBean.getMessage() %></I><LI><jsp:setProperty name="stringBean"<LI><jsp:setProperty name="stringBean"property="message“ value="Best string bean: Fortex" />property="message“ value="Best string bean: Fortex" />Value after setting property with jsp:setProperty:Value after setting property with jsp:setProperty:<I><jsp:getProperty name="stringBean"<I><jsp:getProperty name="stringBean"property="message" /></I>property="message" /></I><LI><% stringBean.setMessage<LI><% stringBean.setMessage("My favorite: Kentucky Wonder"); %>("My favorite: Kentucky Wonder"); %>Value after setting property with scriptlet:Value after setting property with scriptlet:<I><%= stringBean.getMessage() %></I></OL><I><%= stringBean.getMessage() %></I></OL>

Page 14: JavaBean组件在JSP文 档中的应用

14共享共享 beanbean

我们可以使用我们可以使用 scopescope 属性来指定属性来指定 beanbean 存储的其他位置存储的其他位置依旧需要绑定到依旧需要绑定到 _jspService_jspService中的局部变量中的局部变量 <jsp:useBean id="…" class="…“ scope="…" /><jsp:useBean id="…" class="…“ scope="…" />

可以让多个可以让多个 servletservlet 或或 JSPJSP 页面共享数据页面共享数据 还允许根据条件创建还允许根据条件创建 beanbean

仅当不存在已有对象的情况下才创建新的对象仅当不存在已有对象的情况下才创建新的对象

Page 15: JavaBean组件在JSP文 档中的应用

15scopescope 属性的取值属性的取值 page (<jsp:useBean … scope=“page (<jsp:useBean … scope=“pagepage”/>”/> 或或 <jsp:us<jsp:useBean…>)eBean…>)

默认值。在处理当前请求的过程中,默认值。在处理当前请求的过程中, beanbean 对象都应该存放在对象都应该存放在 PaPageContextgeContext 对象中。让同一对象中。让同一 servletservlet中的其他方法可以访问该中的其他方法可以访问该 bebeanan 。。 Application (<jsp:useBean … scope="Application (<jsp:useBean … scope="applicationapplication"/"/>)>)

BeanBean 将存储在将存储在 ServletContextServletContext中(通过中(通过 applicationapplication 变量或变量或调用调用 getServletContext()getServletContext() 来访问)。来访问)。 ServletContextServletContext 由同一由同一WebWeb 应用中的所有应用中的所有 servletservlet 共享(或服务器上的所有共享(或服务器上的所有 servletservlet———— 在没有另外定义在没有另外定义 WebWeb 应用的情况下)。应用的情况下)。

Page 16: JavaBean组件在JSP文 档中的应用

16scopescope 属性的取值属性的取值 Session (<jsp:useBean … scope="Session (<jsp:useBean … scope="sessionsession"/"/>)>)

beanbean 会被存储在与当前请求关联的会被存储在与当前请求关联的 HttpSessionHttpSession 中,中,和普通的会话对象一样,在常规和普通的会话对象一样,在常规 servletservlet中可以使用中可以使用 ggetAttributeetAttribute 和和 setAttributesetAttribute 访问到它们。访问到它们。 Request (<jsp:useBean … scope="Request (<jsp:useBean … scope="requestrequest"/"/>)>)

处理当前请求的过程中,处理当前请求的过程中, beanbean 对象应存储在对象应存储在 ServletServletRequestRequest 对象中,可以通过对象中,可以通过 getAttributegetAttribute 访问到它访问到它

Page 17: JavaBean组件在JSP文 档中的应用

17beanbean 的条件化操作的条件化操作 beanbean 的条件化创建的条件化创建

仅当找不到相同仅当找不到相同 idid 和和 scopescope 的的 beanbean 时,时, jsp:useBeanjsp:useBean 才会引才会引发发 beanbean 新实例的创建。新实例的创建。 如果找到相同如果找到相同 idid 和和 scopescope 的的 beanbean ,则仅仅是将已经存在的,则仅仅是将已经存在的 bebeanan绑定到由绑定到由 idid 指定的变量。指定的变量。

beanbean 属性的条件化设置属性的条件化设置 <jsp:useBean ... /><jsp:useBean ... /> 替换为替换为<jsp:useBean ...><jsp:useBean ...> 语句语句 </jsp:useBean></jsp:useBean> 这些语句(这些语句( jsp:setPropertyjsp:setProperty 元素)仅当创建新的元素)仅当创建新的 beanbean 时才执时才执行,如果找到现有的行,如果找到现有的 beanbean ,则不执行。,则不执行。

Page 18: JavaBean组件在JSP文 档中的应用

18共享共享 beanbean 的四种不同方式的四种不同方式使用非共享使用非共享 ((作用域为页面作用域为页面 )) 的的 beanbean 。。共享作用域为请求的共享作用域为请求的 beanbean 。。共享作用域为会话的共享作用域为会话的 beanbean 。。共享作用域为应用(即作用域为共享作用域为应用(即作用域为 ServletCoServletContext)ntext) 的的 beanbean 。。注意:注意:

不同的不同的 beanbean 要使用不同的名字要使用不同的名字 ((也就是也就是 jsp:ujsp:useBeanseBean中的中的 id)id) 。。

Page 19: JavaBean组件在JSP文 档中的应用

19四种共享四种共享 beanbean 的方式:的方式: beanbean 代码代码package xxx;package xxx;public class BakedBean {public class BakedBean {private String level = "half-baked";private String level = "half-baked";private String goesWith = "hot dogs";private String goesWith = "hot dogs";public String getLevel() {public String getLevel() {return(level);return(level);}}public void setLevel(String newLevel) {public void setLevel(String newLevel) {level = newLevel;level = newLevel;}}public String getGoesWith() {public String getGoesWith() {return(goesWith);return(goesWith);}}public void setGoesWith(String dish) {public void setGoesWith(String dish) {goesWith = dish;goesWith = dish;}}}}

Page 20: JavaBean组件在JSP文 档中的应用

20共享共享 beanbean 之例之例 11 :作用域为页面(非共:作用域为页面(非共享)享)创建创建 beanbean

使用使用 jsp:useBeanjsp:useBean ,指定,指定 scope=“page”scope=“page”(或者不指明作用域,因为页面是作用域)。(或者不指明作用域,因为页面是作用域)。修改修改 beanbean

使用使用 jsp:setPropertyjsp:setProperty ,指定,指定 property="*"property="*" 。。然后,提供与然后,提供与 beanbean 的属性名相匹配的请求参数的属性名相匹配的请求参数

访问访问 beanbean使用使用 jsp:getProperty.jsp:getProperty.

Page 21: JavaBean组件在JSP文 档中的应用

21共享共享 beanbean 之例之例 11 :作用域为页面(非共享):作用域为页面(非共享)……<BODY><BODY><H1>Baked Bean Values: page-based Sharing</H1><H1>Baked Bean Values: page-based Sharing</H1><jsp:useBean id="pageBean“ class=“xxx.BakedBean" /><jsp:useBean id="pageBean“ class=“xxx.BakedBean" /><jsp:setProperty name="pageBean" property="*" /><jsp:setProperty name="pageBean" property="*" /><H2>Bean level:<H2>Bean level:<jsp:getProperty name="pageBean“ property="level" /><jsp:getProperty name="pageBean“ property="level" /></H2></H2><H2>Dish bean goes with:<H2>Dish bean goes with:<jsp:getProperty name="pageBean“ property="goesWith" /><jsp:getProperty name="pageBean“ property="goesWith" /></H2></H2></BODY></HTML></BODY></HTML>

Page 22: JavaBean组件在JSP文 档中的应用

22共享共享 beanbean 之例之例 22 :基于请求的共享:基于请求的共享 创建创建 beanbean

使用使用 jsp:useBeanjsp:useBean ,指定,指定 scope="request"scope="request" 。。 修改修改 beanbean

使用使用 jsp:setPropertyjsp:setProperty ,指定,指定 property="*"property="*" 。。然后,提供与属性名相匹配的请求参数。然后,提供与属性名相匹配的请求参数。

在主页面中访问在主页面中访问 beanbean 使用使用 jsp:getProperty.jsp:getProperty. 然后,使用然后,使用 jsp:includejsp:include 调用次级页面。调用次级页面。

在次级页面(被包括)中访问在次级页面(被包括)中访问 beanbean 使用使用 jsp:useBeanjsp:useBean ,指定与主页面中相同的,指定与主页面中相同的 idid ,同样,同样 scope="rscope="request"equest" 。。然后,使用然后,使用 jsp:getPropertyjsp:getProperty 。。

Page 23: JavaBean组件在JSP文 档中的应用

23基于请求的共享:主页面的代码基于请求的共享:主页面的代码……BODY>BODY><H1>Baked Bean Values: request-based Sharing</H1><H1>Baked Bean Values: request-based Sharing</H1><jsp:useBean id="requestBean“ class=“xxx.BakedBean"<jsp:useBean id="requestBean“ class=“xxx.BakedBean"scope="request" />scope="request" /><jsp:setProperty name="requestBean“ property="*" /><jsp:setProperty name="requestBean“ property="*" /><H2>Bean level:<H2>Bean level:<jsp:getProperty name="requestBean“ property="level" /></H2><jsp:getProperty name="requestBean“ property="level" /></H2><H2>Dish bean goes with:<H2>Dish bean goes with:<jsp:getProperty name="requestBean“ property="goesWith" /></H2><jsp:getProperty name="requestBean“ property="goesWith" /></H2><jsp:include page="BakedBeanDisplay-snippet.jsp" /><jsp:include page="BakedBeanDisplay-snippet.jsp" /></BODY></HTML></BODY></HTML>

Page 24: JavaBean组件在JSP文 档中的应用

24基于请求的共享: 被包括页面的代码基于请求的共享: 被包括页面的代码<H1>Repeated Baked Bean Values:<H1>Repeated Baked Bean Values:request-based Sharing</H1>request-based Sharing</H1><jsp:useBean id="requestBean“ class=“xxx.BakedBean"<jsp:useBean id="requestBean“ class=“xxx.BakedBean"scope="request" />scope="request" /><H2>Bean level:<H2>Bean level:<jsp:getProperty name="requestBean“ property="level" /><jsp:getProperty name="requestBean“ property="level" /></H2></H2><H2>Dish bean goes with:<H2>Dish bean goes with:<jsp:getProperty name="requestBean“ property="goesWith" /<jsp:getProperty name="requestBean“ property="goesWith" />></H2></H2>

Page 25: JavaBean组件在JSP文 档中的应用

25共享共享 beanbean 的例的例 33 :基于会话的共享:基于会话的共享 创建创建 beanbean

使用使用 jsp:useBeanjsp:useBean ,指定,指定 scope="session"scope="session" 。。 修改修改 beanbean

使用使用 jsp:setPropertyjsp:setProperty ,指定,指定 property="*"property="*" 。。然后,提供与然后,提供与 beanbean 的属性名相匹配的请求参数。的属性名相匹配的请求参数。

在初始的请求中访问在初始的请求中访问 beanbean 在在 jsp:setPropertyjsp:setProperty被调用的请求中,使用被调用的请求中,使用 jsp:getPropertyjsp:getProperty 。。

对对 beanbean 的后续访问的后续访问 在不包括请求参数(因而也就不会调用在不包括请求参数(因而也就不会调用 jsp:setPropertyjsp:setProperty )的请)的请求中,使用求中,使用 jsp:getPropertyjsp:getProperty 。如果该请求来自于相同的用户。如果该请求来自于相同的用户(在会话超时之前),就能够得到之前修改的值。如果请求来自于(在会话超时之前),就能够得到之前修改的值。如果请求来自于不同的客户(或在会话超时之后),则得到是新创建的不同的客户(或在会话超时之后),则得到是新创建的 beanbean 。。

Page 26: JavaBean组件在JSP文 档中的应用

26基于会话的共享:代码基于会话的共享:代码……<BODY><BODY><H1>Baked Bean Values: session-based Sharing</H1><H1>Baked Bean Values: session-based Sharing</H1><jsp:useBean id="sessionBean“ class=“xxx.BakedBean"<jsp:useBean id="sessionBean“ class=“xxx.BakedBean"scope="session" />scope="session" /><jsp:setProperty name="sessionBean“ property="*" /><jsp:setProperty name="sessionBean“ property="*" /><H2>Bean level:<H2>Bean level:<jsp:getProperty name="sessionBean“ property="level" /><jsp:getProperty name="sessionBean“ property="level" /></H2></H2><H2>Dish bean goes with:<H2>Dish bean goes with:<jsp:getProperty name="sessionBean“ property="goesWith" /<jsp:getProperty name="sessionBean“ property="goesWith" />></H2></BODY></HTML></H2></BODY></HTML>

Page 27: JavaBean组件在JSP文 档中的应用

27共享共享 beanbean 之例之例 44 :基于应用的共享:基于应用的共享 创建创建 beanbean

使用使用 jsp:useBeanjsp:useBean ,指定,指定 scope="application"scope="application" 。。 修改修改 beanbean

使用使用 jsp:setPropertyjsp:setProperty ,指定,指定 property="*"property="*" 。。然后,提供与然后,提供与 beanbean 的属性名相匹配的请求参数。的属性名相匹配的请求参数。

在初始的请求中访问在初始的请求中访问 beanbean 在在 jsp:setPropertyjsp:setProperty 被调用的请求中,使用被调用的请求中,使用 jsp:getPropertyjsp:getProperty

对对 beanbean 的后续访问的后续访问 在不包括请求参数(因而也就不会调用在不包括请求参数(因而也就不会调用 jsp:setPropertyjsp:setProperty )的请)的请求中,使用求中,使用 jsp:getPropertyjsp:getProperty 。不管这个请求是来自于相同客户。不管这个请求是来自于相同客户或不同客户(不管会话是否超时),都能够看到之前更改的值。或不同客户(不管会话是否超时),都能够看到之前更改的值。

Page 28: JavaBean组件在JSP文 档中的应用

28基于应用的共享:代码基于应用的共享:代码<BODY><BODY><H1>Baked Bean Values:<H1>Baked Bean Values:application-based Sharing</H1>application-based Sharing</H1><jsp:useBean id="applicationBean“ class=“xxx.BakedBean"<jsp:useBean id="applicationBean“ class=“xxx.BakedBean"scope="application"scope="application" /> /><jsp:setProperty name="applicationBean“ property="*" /><jsp:setProperty name="applicationBean“ property="*" /><H2>Bean level:<H2>Bean level:<jsp:getProperty name="applicationBean“ property="level" /><jsp:getProperty name="applicationBean“ property="level" /></H2></H2><H2>Dish bean goes with:<H2>Dish bean goes with:<jsp:getProperty name="applicationBean“ property="goesWith"/><jsp:getProperty name="applicationBean“ property="goesWith"/></H2></BODY></HTML></H2></BODY></HTML>

Page 29: JavaBean组件在JSP文 档中的应用

29小结小结 jsp:useBeanjsp:useBean 的优点的优点

隐藏了隐藏了 JavaJava 语法语法 将请求参数与将请求参数与 JavaJava 对象关联起来更加容易对象关联起来更加容易 (bean(bean 属性属性 )) 使得在多个请求或使得在多个请求或 servlets/JSPservlets/JSP 间共享对象得到简化间共享对象得到简化

jsp:useBeanjsp:useBean 创建或使用创建或使用 beanbean

jsp:getPropertyjsp:getProperty 将将 beanbean 的属性的属性 property (property ( 即即 getXxx getXxx 调用调用 )) 放到放到 servletservlet 的输的输出中出中

jsp:setPropertyjsp:setProperty设置设置 beanbean 属性(即向属性(即向 setXxxsetXxx 传递值)传递值)