JSP中JavaBean的应用  java server pages(jsp)组件技术的核心是被称为bean的java 组件.bean的结构必须满足一定的命名约定。JavaBean类似于ActiveX控件:他们都能提供常用功能并且可以重复使用。这些约定由sun和其他几个大公司制定,称为javabeans   API.只要遵守java beansAPI的命名约定,就可以开发出可重用的,独立的java组件。在jsp中,使用bean标签集合,内容开发者不需要编写任何代码就能利用java   强大的功能为页面添加动态元素。 在JSP的开发中往往把大段的代码放在脚本片段(scriptlet)内,但是绝大多数的Java代码属于可重复使用的(如数据库的连接待),因此可以把这此重复的代码做成JavaBea的组件。JavaBean的值是通过一些属性获得的,你可通过这些属性访问JavaBean设置。现把在jsp中怎么调javaBean介绍如下:  要在JSP使用"Bean",首先必须在jsp设置要引用的Bean,生成Bean的一个实例。可以用“<jsp:useBean>”标记来完成:   
<jsp:useBean id="Name" class="com.testbean" scope="application"     />。  "<jsp:useBean>"标记是通过“id”属性来识鉴别Bean。当指定了"id"属性后,还须告诉网页面从何处查找Bean,或者它的Java类别名是什么。最后一个必需的元素是“scope”属性。有了“scope”属性的帮助,你就能告诉Bean为单一页面(默认情况)[scope="page"]、为一个被请求的网页[scope="request"]、请求为会话[scope="session"],或者为整个应用程序[scope="application"]保持留信息。有了会话范围,你就能非常容易地在JSP网页面上维护网站上的项目,如购物车项目等。  实例化一个JavaBean,就可以访问它的属性来定制它。要获得属性值,请用“<jsp:getProperty>”标记。使用这个标记能指定将要用到的Bean名称(从useBean的"id"字段得到)以及你想得到其值的属性。实际的值被放在输出中:   
<jsp:getProperty id="Name" property="name" />。  要改变JavaBean属性,你必须使用“<jsp:setProperty>”标记。对这个标记,需要再次识别Bean和其属性,以修改并额外提供新值。如果命名正确,这些值可以从一个已提交的表中直接获得:参数获得:   
<jsp:setProperty id="Name" property="*" />; 可以从一个参数获得,但必须直接命名属性和参数:   
<jsp:setProperty id="Name" property="serialNumber"     value="string" /> 或者直接用一个名字称和值来设置:  
<jsp:setProperty id="Name" property="serialNumber"     value= <%= expression %> />.  关于JavaBean 的最后一件事: 为了Web服务器能找到JavaBean,你需要将其类别文件放在WEB服务器的一个特殊位置。在resin中是放在"doc\WEB-INF\classes"目录下的。实例:这个简单的例子是完成对产品及税率的设置与获取。package tax;
  public class TaxRate{
  String Product;
  double Rate;
  public TaxRate(){
  this.Product = "A001";
  this.Rate = 5;}
  public void setProduct (String ProductName)
  {this.Product = ProductName;}
  public String getProduct(){return(this.Product);}
  public void setRate (double rateValue)
  {
  this.Rate = rateValue;
  }
  public double getRate()
  {
  return (this.Rate);
  }
  }
  
  sample_bean.jsp
  <%@ page language="java" import="tax.*" %>
  <HTML>
  <BODY>
  <jsp:useBean id="TaxRate" scope="application" class="TaxRate"   />
  修改前:
  <br>
   产品 : <jsp:getProperty name="TaxRate" property="Product"   />
    <br>
   税率 : <jsp:getProperty name="TaxRate" property="Rate"   />
  
  <jsp:setProperty name="TaxRate" property="Product" value="Hello"   /> 
  <jsp:setProperty name="TaxRate" property="Rate" value="2.9"   /> 
  修改后:
  <br>
   产品 : <jsp:getProperty name="TaxRate" property="Product"   />
    <br>
   税率 : <jsp:getProperty name="TaxRate" property="Rate"   />
  
  </BODY></HTML>   把TaxRate.java放到resin的"doc\WEB-INF\classes\doc"目录下,sample_bean.jsp放入resin的doc目录下。在浏览器下运行:http://localhost:8080/sample_bean.jsp即可看到效果。从以上的讲解及应用可以看出:由于组件技术的使用和JAVABEANS   API的引入,JSP让JAVA开发者可以将一个站点快速地分解为一些细小的、可重用的组件。这些组件作为HTML元素,用于JSP的各个需要地方。这一实现让开发工作清楚地分为表现与内容两个部分。 

解决方案 »

  1.   

    非常感谢middy先生对此问题的回复!在得到您的回复之前,我用以下方法解决了问题:
    1、在需要获得myBean这个实例之前,用SESSION。SETVALUE()把myBean放入SESSION中。
    2、用 <BEAN NAME="myBean" TYPE="Head.HeadBean" INTROSPECT=NO CREATE=NO 
          SCOPE=SESSION></BEAN> 从SESSION中获得myBean这个已存在的实例,这样,在
       jsp文件中,就得到了myBean这个实例。
    3、直接调用Bean的方法处理数据。如:myBean.setuserid("user1").看过middy先生的回复之后,我仍有几个问题想请教:1、在JSP中,您上文提到的标签<jsp:useBean id="Name" class="com.testbean" 
       scope="application"    />。
       和我所用的标签<BEAN NAME="myBean" TYPE="Head.HeadBean" INTROSPECT=NO 
       CREATE=NO SCOPE=SESSION></BEAN> 是不是同一回事?
       若不是,是否是因为版本的原因。若也不是,能否解释二者的不同之处?
    2、从标签<BEAN NAME="myBean" TYPE="Head.HeadBean" INTROSPECT=NO CREATE=NO 
       SCOPE=SESSION></BEAN>中,可以看出“create=no scope=session"指示从session中获得
       已存在的bean的实例而不是创建一个新的实例。那么”create=yes scope=request"是指示
       什么? 我曾在jsp中用过<BEAN NAME="myBean" TYPE="Head.HeadBean" INTROSPECT=NO 
       CREATE=YES SCOPE=REQUEST></BEAN>获得servlet创建的bean的实例。这个JSP文件是在
       servlet中用CallPage调用的缺省的输出页面文件。
    3、"scope=page","scope=application"的具体含义又是什么?怎么用?                                                                 谢谢!