第 十 讲 修改和获取Beans的属性    
 
  教学目的:
  本讲继续讲述 JSP 中使用 Javabeans 。
  知识要点
  1.获取和修改beans的属性
  2.带包名的beans
  3.JSP与beans结合的简单例子

  10.1 获取和修改beans的属性

   当我们使用 useBean 动作标签创建一个beans后,在java程序片中这个beans就可以调用方法产生行为,比如修改属性,使用类的中的方法等,如前面的例子1、2、3所示。获取或修改beans的属性还可以使用动作标签getProperty 、 setProperty ,下面讲述怎样使用JSP的动作标签去获取和修改 beans 的属性。

  10.1.1 getProperty动作标签
  使用该标签可以获得 beans 的属性值,并将这个值用串的形式显示给客户。使用这个标签之前,必须使用 useBean 标签获取得到一个 beans
  getProperty 动作标签:
  <jsp:getProperty name= “beans 的名字 ” property= “beans 的属性 ” />
  或
  <jsp:getProperty name= “beans 的名字 ” property= “beans 的属性 ” />
  </jsp:getProperty>
  其中, name 取值是 beans 的名字,用来指定要获取哪个 beans 的属性的值; property 取值是该 beans 的一个属性的名字。该指令的作用相当于在程序片中使用 beans 调用 getXxx() 方法。
  现在,我们将 Circle 类文件给予改进,增加 circleArea 和 circleLength 两个属性。
  Circle2.java
  import java.io.*;
  public class Circle2
  { double radius=1;
  double circleArea=0;
  double circleLength=0;
  public double getRadius()
  { return radius;
  }
  public void setRadius(double newRadius)
  {radius=newRadius;
  }
  public double getCircleArea()
  {circleArea=Math.PI*radius*radius;
  return circleArea;
  }
  public double getCircleLength()
  { circleLength=2.0*Math.PI*radius;
  return circleLength;
  }
  }
  在下面的 JSP 页面中使用 useBean 标签,用 Circle2 类创建一个名字是 apple 的 beans 。并使用 getProperty 获取 apple 的各个属性的值。把 Circle2.java 编译生成的字节码 Circle2.class 文件拷贝到 JSP 引擎的 classes 文件下。本书所使用的机器的该目录是:
  D:\tomcat\Jakarta-tomcat-4.0\classes
  例子 1 (效果如图10.1所示)
  
  beansGetproperty.jsp
  <%@ page contentType="text/html;charset=GB2312" %>
  <%@ page import="Circle2"%>
  <HTML>
  <BODY bgcolor=cyan><Font size=1>
  <jsp:useBean id="apple" class="Circle2" scope="page" >
  </jsp:useBean>
  <%apple.setRadius(100);%>
  <P> 圆的半径是:
  <jsp:getProperty name= "apple" property= "radius" />
  <P> 圆的面积是:
  <jsp:getProperty name= "apple" property= "circleArea" />
  <P> 圆的周长是:
  <jsp:getProperty name= "apple" property= "circleLength" />
  </BODY>
  </HTML>

  10.1.2 setProperty动作标签
  使用该标签可以设置 beans 的属性值。使用这个标签之前,必须使用 useBean 标签得到一个可操作的 beans 。
  setProperty 动作标签可以通过 3 种方式设置 beans 属性的值。
  (1)将 benas 属性的值设置为一个表达式的值或字符串。
  这种方式不如后面的两种方式方便,但当涉及属性值是汉字时,使用这种方式更好一些。
  benas 属性的值设置为一个表达式的值:
  <jsp:setProperty name=“beans 的名字 ” property= “beans 的属性 ” value= “<%=expression%>” />
  benas 属性的值设置为一个字符串:
  <jsp:setProperty name=“beans 的名字 ” property= “beans 的属性 ” value= 字符串 />
  如果将表达式的值设置为 beans 属性的值,表达式值的类型必须和 beans 的属性的类型一致。如果将字符串设置为 beans 的属性的值,这个字符串会自动被转化为 beans 的属性的类型。
  Java 语言将字符串转化为其它数值类型的方法如下:
  转化到 int : Integer.parseInt(Sting s) ,
  转化到 long : Long.parseInt(Sting s) ,
  转化到 float : Float.parseInt(Sting s) ,
  转化到 double : Double.parseInt(Sting s) ,
  这些方法都可能发生 NumberFormatException 异常,例如,当试图将字符串:“ ab23 ”转化为 int 型数据时就发生了 NumberFormatException 。
  在下面的例子中,我们写了一个描述学生的 beans ,在一个 JSP 页面中获得一个这样的 beans ,其有效范围是 page 。在 JSP 页面中使用动作标签设置、获取该 beans 的属性。
  创建 beans的源文件
  Student.java
  public class Student
  { String name=null;
  long number;
  double height,weight;
  public String getName()
  { return name;
  }
  public void setName(String newName)
  {name=newName;
  }
  public long getNumber()
  {return number;
  }
  public void setNumber(long newNumber)
  { number=newNumber;
  }
  public double getHeight()
  {return height;
  }
  public void setHeight(double newHeight)
  { height=newHeight;
  }
  public double getWeight()
  {return weight;
  }
  public void setWeight(double newWeight)
  { weight=newWeight;
  }
  }
  例子 2
  student.jsp
  <%@ page contentType="text/html;charset=GB2312" %>
  <%@ page import="Student"%>
  <HTML>
  <BODY bgcolor=cyan><Font size=1>
  <jsp:useBean id="zhang" class="Student" scope="page" >
  </jsp:useBean>
  <jsp:setProperty name= "zhang" property="name" value=" 张小三 " />
  <P> 名字是:
  <jsp:getProperty name= "zhang" property="name" />
  <jsp:setProperty name= "zhang" property="number" value="1999001" />
  <P> 学号是:
  <jsp:getProperty name= "zhang" property="number" />
  <% double height=1.70;
  %>
  <jsp:setProperty name= "zhang" property="height" value="<%=height+0.05%>" />
  <P> 身高是:
  <jsp:getProperty name= "zhang" property="height" />
  米
  <jsp:setProperty name= "zhang" property="weight" value="67.65" />
  <P> 体重是:
  <jsp:getProperty name= "zhang" property="weight" />
  公斤
  </FONT>
  </BODY>
  </HTML>
  (2)使用 setProperty 设置 beans 属性值的第 2 种方式是:通过 HTTP 表单的参数的值来设置 beans 的相应属性的值,要求表单参数名字必须与 beans 属性的名字相同, JSP 引擎会自动将字符串转换为 beans 属性的类型。
  <jsp:setProperty name= "beans 的名字 " property="*" />
  该标签不用再具体指定 beans 属性的值将对应表单中哪个参数指定的值,系统会自动根据名字进行般配对应。
  下面的例子 3 通过表单来指定 beans 的属性值。由于客户可能提交汉语的姓名,所以我们将 Student.java 文件中的 getName 方法做以下改进:
  public String getName()
  { try {byte b[]=name.getBytes("ISO-8859-1");
  name=new String(b);
  return name;
  }
  catch(Exception e)
  { return name;
  }
  }
  例子 3
  student2.jsp
  <%@ page contentType="text/html;charset=GB2312" %>
  <%@ page import="Student"%>
  <HTML>
  <BODY ><Font size=1>
  <FORM action="" Method="post" >
  <P> 输入学生的姓名 :
  <Input type=text name="name">
  <P> 输入学生的学号 :
  <Input type=text name="number">
  <P> 输入学生的身高 :
  <Input type=text name="height">
  <P> 输入学生的体重 :
  <Input type=text name="weight">
  <Input type=submit value=" 提交 ">
  </FORM>
  <jsp:useBean id="zhang" class="Student" scope="page" >
  </jsp:useBean>
  <jsp:setProperty name= "zhang" property="*" />
  <P> 名字是:
  <jsp:getProperty name= "zhang" property="name" />
  <P> 学号是:
  <jsp:getProperty name= "zhang" property="number" />
  <P> 身高是:
  <jsp:getProperty name= "zhang" property="height" />
  米
  <P> 体重是:
  <jsp:getProperty name= "zhang" property="weight" />
  公斤
  </FONT>
  </BODY>
  </HTML>
  注:需要注意的是,只有提交了和该 beans相对应的表单后,该指令标签才被执行。
  注:使用这种方式设置和获取 beans的值很方便,我们把汉字的处理放在了beans中,但需要注意的是,如果使用第1种方式,不要在beans中处理汉字,而应当在JSP页面中处理。
  (3)使用 setProperty 设置 beans 属性值的第 3 种方式是:通过 request 的参数的值来设置 beans 的相应属性的值,要求 request 参数名字必须与 beans 属性的名字相同, JSP 引擎会自动将 request 获取的字符串数据类型转换为 beans 相应的属性的类型。
  <jsp:setProperty name= "beans 的名字 " property=" 属性名 " param= “ 参数名 ” />
  下面的例子 4 说明使用 request 参数设置 beans 的属性的值。
  例子 4
  student3.jsp
  <%@ page contentType="text/html;charset=GB2312" %>
  <%@ page import="Student"%>
  <HTML>
  <BODY bgcolor=yellow><Font size=1>
  <FORM action="" Method="post" >
  <P> 输入学生的姓名 :
  <Input type=text name="name">
  <P> 输入学生的学号 :
  <Input type=text name="number">
  <P> 输入学生的身高 :
  <Input type=text name="height">
  <P> 输入学生的体重 :
  <Input type=text name="weight">
  <BR> <Input type=submit value=" 提交 ">
  </FORM>
  <jsp:useBean id="zhang" class="Student" scope="page" >
  </jsp:useBean>
  <jsp:setProperty name= "zhang" property="name" param="name" />
  <P> 名字是:
  <jsp:getProperty name= "zhang" property="name" />
  <jsp:setProperty name= "zhang" property="number" param="number" />
  <P> 学号是:
  <jsp:getProperty name= "zhang" property="number" />
  <% double height=1.70;
  %>
  <jsp:setProperty name= "zhang" property="height" param="height" />
  <P> 身高是:
  <jsp:getProperty name= "zhang" property="height" />
  米
  <jsp:setProperty name= "zhang" property="weight" param="weight" />
  <P> 体重是:
  <jsp:getProperty name= "zhang" property="weight" />
  公斤
  </FONT>
  </BODY>
  </HTML>
  注:需要注意的是,只有提交了和该 beans相对应的表单后,该指令标签才被执行。
  注:不能在 <jsp:setProperty>中同时使用value和param。

  10.2 带包名的beans

  在写一个 beans 的 java 文件时,可以使用 package 语句给 beans 一个包名。包名可以是一个合法的标识符,也可以是若干个标识符加“ . ”分割而成,如:
  package gping;
  package tom.jiafei;
  程序如果使用了包语句,例如
  package tom.jiafei;
  那么必须在 classes 目录下有如下的子目录,例如,在 D:\Tomcat\jakarta-tomcat-4.0\classes 下再建立如下的目录结构。
  \tom\jiafei
  并将 beans 的字节码文件存在该目录中,如图 10.2 所示。
  
  假如有一个包名是 tom.jiafei 的类 Primnumber ,如果在 JSP 页面中使用这个 beans ,必须有如下的语句:
  <%@ import = “tom.jiafei.* ”>
  或
  <%@ import = “tom.jiafei.PrimNumber ”>
  求素数的 beans
  PrimNumber.java
  package tom.jiafei;
  public class PrimNumber
  { int number;
  StringBuffer result;
  public PrimNumber()
  { result=new StringBuffer();
  }
  public void setNumber(int n)
  { number=n;
  int i,j;
  for( i=2;i<=number;i++) // 找出 number 以内的素数。
  {for(j=2;j<i;j++)
  {if(i%j==0)
  break;
  }
  if(j>=i)
  result.append(""+i+"<BR>");
  }
  }
  public int getNumber()
  {return number;
  }
  public StringBuffer getResult()
  { return result;
  }
  }
  例子 5 使用求素数 beans的JSP页面
  primnumber.jsp
  <%@ page contentType="text/html;charset=GB2312" %>
  <%@ page import="tom.jiafei.*" %>
  <HTML>
  <BODY bgcolor=cyan><Font size=1>
  <FORM action="" Method="post" >
  <P> 输入一个正整数 :
  <Input type=text name="number">
  <Input type=submit value=" 提交 ">
  <jsp:useBean id="prim" class="tom.jiafei.PrimNumber" scope="page" >
  </jsp:useBean>
  <jsp:setProperty name= "prim" property="number" param="number" />
  <P> 小于
  <jsp:getProperty name= "prim" property="number" />
  这个数的全部素数是:
  <BR> <jsp:getProperty name= "prim" property="result" />
  </Font>
  </BODY>
  </HTML>

  10.3 JSP与beans结合的简单例子

  10.3.1三角形beans
  三角形 beans
  Triangle.java
  public class Triangle
  { double sideA,sideB,sideC;
  double area;
  boolean triangle;
  public void setSideA(double a)
  {sideA=a;
  }
  public double getSideA()
  {return sideA;
  }
  public void setSideB(double b)
  {sideB=b;
  }
  public double getSideB()
  {return sideB;
  }
  public void setSideC(double c)
  {sideC=c;
  }
  public double getSideC()
  {return sideC;
  }
  public double getArea()
  { double p=(sideA+sideB+sideC)/2.0;
  area=Math.sqrt(p*(p-sideA)*(p-sideB)*(p-sideC));
  return area;
  }
  public boolean isTriangle()
  { if(sideA<sideB+sideC&&sideB<sideA+sideC&&sideC<sideA+sideB)
  triangle=true;
  else
  triangle=false;
  return triangle;
  }
  }
  使用三角形 beans的JSP页面:
  triangle.jsp
  <%@ page contentType="text/html;charset=GB2312" %>
  <%@ page import="Triangle"%>
  <HTML>
  <BODY ><Font size=1>
  <FORM action="" Method="post" >
  <P> 输入三角形的边 A:
  <Input type=text name="sideA" value=0>
  <P> 输入三角形的边 B:
  <Input type=text name="sideB" value=0>
  <P> 输入三角形的边 C:
  <Input type=text name="sideC" value=0>
  <Input type=submit value=" 提交 ">
  <P> 你给出三角形的三边是:
  <jsp:useBean id="triangle" class="Triangle" scope="page" >
  </jsp:useBean>
  <jsp:setProperty name= "triangle" property="*" />
  <BR> 边 A 是:
  <jsp:getProperty name= "triangle" property="sideA" />
  <BR> 边 B 是:
  <jsp:getProperty name= "triangle" property="sideB" />
  <BR> 边 C 是:
  <jsp:getProperty name= "triangle" property="sideC" />
  <P> 这三个边能构成一个三角形吗?
  <jsp:getProperty name= "triangle" property="triangle" />
  <P> 面积是:
  <jsp:getProperty name= "triangle" property="area" />
  </FONT>
  </BODY>
  </HTML>

  10.3.2 计数器beans
  计数器 beans 是一个 application 范围的 beans ,所有的客户共享这个 beans ,任何客户改变这个 beans 的属性值,都会对其它客户产生影响。计数器 beans 有一个记录访问次数的属性 count 。
  Counter.java
  public class Counter
  { long count=0;
  public synchronized long getCount()
  {count++;
  return count;
  }
  }
  count.jsp
  <%@ page contentType="text/html;charset=GB2312" %>
  <%@ page import="Counter"%>
  <HTML>
  <BODY ><Font size=1>
  <jsp:useBean id="people" class="Counter" scope="application" >
  </jsp:useBean>
  <% if(session.isNew())
  { %>
  <P> 您是第
  <jsp:getProperty name= "people" property="count" />
  位访问本站的人
  <%
  }
  else
  { out.print(" 禁止通过刷新增加计数! ");
  }
  %>
  </FONT>
  </BODY>
  </HTML>

  10.3.3 猜数字beans
  当客户访问 getNumber.jsp 页面时,随机获取一个 1 到 100 之间的整数,由客户去猜测这个数是多少。
  GuessNumber.java
  public class GuessNumber
  { int answer=0, // 实际答案。
  guessNumber=0, // 客户猜测的数。
  guessCount=0; // 客户猜到正确答案之前所用的次数。
  String result=null;
  public void setAnswer(int n)
  { answer=n;
  guessCount=0;
  }
  public int getAnswer()
  {return answer;
  }
  public void setGuessNumber(int n)
  { guessNumber=n;
  guessCount++;
  if(guessNumber==answer)
  result=" 恭喜,猜对了 ";
  else if(guessNumber>answer)
  result=" 猜大了 ";
  else if(guessNumber<answer)
  result=" 猜小了 ";
  }
  public int getGuessNumber()
  {return guessNumber;
  }
  public int getGuessCount()
  {return guessCount;
  }
  public String getResult()
  {return result;
  }
  }
  获取一个随机数页面 :
  getNumber.jsp
  <%@ page contentType="text/html;charset=GB2312" %>
  <%@ page import="GuessNumber" %>
  <HTML>
  <BODY>
  <% int n=(int)(Math.random()*100)+1;%>
  <jsp:useBean id="guess" class="GuessNumber" scope="session" >
  </jsp:useBean>
  <jsp:setProperty name= "guess" property="answer" value="<%=n%>" />
  <p> 随机给你一个 1 到 100 之间的数,请猜测这个数是多少?
  <% String str=response.encodeRedirectURL("guess.jsp");
  %>
  <Form action="<%=str%>" method=post >
  <BR> 输入你的猜测 <Input type=text name="guessNumber">
  <Input type=submit value=" 提交 ">
  </FORM>
  </BODy>
  猜数页面
  guess.jsp
  <%@ page contentType="text/html;charset=GB2312" %>
  <%@ page import="GuessNumber" %>
  <HTML>
  <BODY>
  <jsp:useBean id="guess" class="GuessNumber" scope="session" >
  </jsp:useBean>
  <jsp:setProperty name= "guess" property="guessNumber" param="guessNumber" />
  <BR>
  <jsp:getProperty name= "guess" property="result" />
  <br> 这是第
  <jsp:getProperty name= "guess" property="guessCount" />
  猜
  <BR> 你给出的数是
  <jsp:getProperty name= "guess" property="guessNumber" />
  <% String str=response.encodeRedirectURL("guess.jsp");
  %>
  <Form action="<%=str%>" method=post >
  <BR> 再输入你的猜测 <Input type=text name="guessNumber">
  <Input type=submit value=" 提交 ">
  </FORM>
  <% String str1=response.encodeRedirectURL("getNumber.jsp");
  %>
  <BR><FORM action="<%=str1%>" method="post" name="f">
  <Input type="submit" value=" 重新玩 ">
  </FORM>
  </BODy>
  </HTML>

  10.3.4 购物车beans
  Car1.java
  import java.util.*;
  import java.io.*;
  public class Car1 implements Serializable
  { Hashtable list=new Hashtable();
  String item="Welcome!";
  int mount=0;
  String unit=null;
  public void Car1()
  { }
  public void setItem(String newItem)
  { item=newItem;
  }
  public void setUnit(String newUnit)
  { unit=newUnit;
  }
  public void setMount(int m)
  { mount=m;
  }
  public void 添加商品到购物车 ()
  { String str="Name: "+item+" Mount:"+mount+" Unit:"+unit;
  list.put(item,str);
  }
  public Hashtable 列出购物车中的商品 ()
  { return list;
  }
  public void 删除货物 (String s)
  { list.remove(s);
  }
  }
  选择物品页面 :
  car.jsp
  <%@ page contentType="text/html;charset=GB2312" %>
  <%@ page import="java.util.*" %>
  <%@ page import="Car1" %>
  <HTML>
  <BODY ><Font size=1>
  <jsp:useBean id="car1" class="Car1" scope="session" >
  </jsp:useBean>
  <P> 这里是第一百货商场,选择您要购买的商品添加到购物车:
  <% String str=response.encodeRedirectURL("add.jsp");
  %>
  <FORM action="<%=str%>" method=post name=form>
  <Select name="item" value=" 没选择 ">
  <Option value="TV"> 电视机
  <Option value="apple"> 苹果
  <Option value="coke"> 可口可乐
  <Option value="milk"> 牛奶
  <Option value="tea"> 茶叶
  </Select>
  <P> 输入购买的数量 :
  <Input type=text name="mount">
  <P> 选择计量单位:
  <INPUT type="radio" name="unit" value=" 个 "> 个
  <INPUT type="radio" name="unit" value=" 公斤 "> 公斤
  <INPUT type="radio" name="unit" value=" 台 "> 台
  <INPUT type="radio" name="unit" value=" 瓶 "> 瓶
  <Input type=submit value=" 提交添加 ">
  </FORM>
  <P> 您的购物车有如下商品:
  <% Hashtable list=car1. 列出购物车中的商品 ();
  Enumeration enum=list.elements();
  while(enum.hasMoreElements())
  { String goods=(String)enum.nextElement();
  byte b[]=goods.getBytes("ISO-8859-1");
  goods=new String(b);
  out.print("<BR>"+goods);
  }
  %>
  <% String str1=response.encodeRedirectURL("selectRemovedGoods.jsp");
  %>
  <FORM action="<%=str1%>" method=post name=form>
  <Input type=submit value=" 修改购物车中的货物 ">
  </FORM>
  </FONT>
  </BODY>
  </HTML>
  添加货物到购物车页面
  add.jsp
  <%@ page contentType="text/html;charset=GB2312" %>
  <%@ page import="java.util.*" %>
  <%@ page import="Car1" %>
  <HTML>
  <BODY ><Font size=2>
  <jsp:useBean id="car1" class="Car1" scope="session" >
  </jsp:useBean>
  <jsp:setProperty name= "car1" property="*" />
  <% car1. 添加商品到购物车 ();
  %>
  <P> 您的购物车有如下商品:
  <% Hashtable list=car1. 列出购物车中的商品 ();
  Enumeration enum=list.elements();
  while(enum.hasMoreElements())
  { String goods=(String)enum.nextElement();
  byte b[]=goods.getBytes("ISO-8859-1");
  goods=new String(b);
  out.print("<BR>"+goods);
  }
  %>
  <% String str=response.encodeRedirectURL("car.jsp");
  %>
  <BR><FORM action="<%=str%>" method=post name=form>
  <Input type=submit value=" 继续购物 ">
  </FORM>
  <% String str1=response.encodeRedirectURL("selectRemovedGoods.jsp");
  %>
  <BR><FORM action="<%=str1%>" method=post name=form>
  <Input type=submit value=" 修改购物车中的货物 ">
  </FORM>
  </FONT>
  </BODY>
  </HTML>
  选择删除货物的页面
  selectRemovedGoods.jsp
  <%@ page contentType="text/html;charset=GB2312" %>
  <%@ page import="java.util.*" %>
  <%@ page import="Car1" %>
  <HTML>
  <BODY ><Font size=1>
  <jsp:useBean id="car1" class="Car1" scope="session" >
  </jsp:useBean>
  <P> 选择从购物车删除的商品:
  <% String str=response.encodeRedirectURL("removeWork.jsp");
  %>
  <FORM action="<%=str%>" method=post name=form2>
  <Select name="deleteitem" size=1>
  <Option value="TV"> 电视机
  <Option value="apple"> 苹果
  <Option value="coke"> 可口可乐
  <Option value="milk"> 牛奶
  <Option value="tea"> 茶叶
  </Select>
  <Input type=submit value=" 提交删除 ">
  </FORM>
  <P> 您的购物车有如下商品 :
  <% Hashtable list=car1. 列出购物车中的商品 ();
  Enumeration enum=list.elements();
  while(enum.hasMoreElements())
  { String goods=(String)enum.nextElement();
  byte b[]=goods.getBytes("ISO-8859-1");
  goods=new String(b);
  out.print("<BR>"+goods);
  }
  %>
  <% String str1=response.encodeRedirectURL("car.jsp");
  %>
  <FORM action="<%=str1%>" method=post name=form>
  <Input type=submit value=" 继续购物 ">
  </FORM>
  </FONT>
  </BODY>
  </HTML>
  删除货物页面
  removeWork.jsp
  <%@ page contentType="text/html;charset=GB2312" %>
  <%@ page import="java.util.*" %>
  <%@ page import="Car1" %>
  <HTML>
  <BODY ><Font size=1>
  <jsp:useBean id="car1" class="Car1" scope="session" >
  </jsp:useBean>
  <% String name=request.getParameter("deleteitem");
  if(name==null)
  {name="";
  }
  byte c[]=name.getBytes("ISO-8859-1");
  name=new String(c);
  car1. 删除货物 (name);
  out.print(" 您删除了货物: "+name);
  %>
  <P> 购物车中现在的货物:
  <% Hashtable list=car1. 列出购物车中的商品 ();
  Enumeration enum=list.elements();
  while(enum.hasMoreElements())
  { String goods=(String)enum.nextElement();
  byte b[]=goods.getBytes("ISO-8859-1");
  goods=new String(b);
  out.print("<BR>"+goods);
  }
  %>
  <% String str1=response.encodeRedirectURL("car.jsp");
  %>
  <FORM action="<%=str1%>" method=post name=form>
  <Input type=submit value=" 继续购物 ">
  </FORM>
  <% String str=response.encodeRedirectURL("selectRemovedGoods.jsp");
  %>
  <FORM action="<%=str%>" method=post name=form1>
  <Input type=submit value=" 修改购物车中的货物 ">
  </FORM>

  10.3.5 日期 beans
  使用 Java 的 Calendar 类制作 beans ,用来显示年、月、日、星期、小时、分钟、秒等时间。
  JSPCalendar.java
  import java.util.*;
  public class JSPCalendar
  { Calendar calendar = null;
  int year,dayOfMonth,dayOfYear,weekOfYear,
  weekOfMonth,dayOfWeek,hour,minute,second;
  String day,date,time;
  public JSPCalendar()
  {calendar = Calendar.getInstance();
  Date time = new Date();
  calendar.setTime(time);
  }
  // 获取年份:
  public int getYear()
  {return calendar.get(Calendar.YEAR);
  }
  // 获取月,进行格式处理:
  public String getMonth() {
  int m=1+calendar.get(Calendar.MONTH);
  String months[]={ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12" };
  if (m>12)
  return "0";
  return months[m - 1];
  }
  // 获取星期几 , 进行格式处理 :
  public String getDay()
  { int n =getDayOfWeek();
  String days[]={" 日 "," 一 ", " 二 ", " 三 "," 四 ", " 五 ", " 六 "};
  if(n>7)
  return " 星期? ";
  return days[n];
  }
  // 获取:年、月、日
  public String getDate()
  { return getYear()+ "/" + getMonth()+"/"+getDayOfMonth();
  }
  public String getTime() // 获取:时:分:秒
  {return getHour() + ":" + getMinute() + ":" + getSecond();
  }
  public int getDayOfMonth() // 获取当前时间是一月中的哪一天
  {return calendar.get(Calendar.DAY_OF_MONTH);
  }
  public int getDayOfYear() // 获取当前时间是一年中的哪一天
  {return calendar.get(Calendar.DAY_OF_YEAR);
  }
  public int getWeekOfYear() // 获取当前时间是一年中的哪个星期
  {return calendar.get(Calendar.WEEK_OF_YEAR);
  }
  public int getWeekOfMonth() // 获取当前时间是一年中的哪个星期
  { return calendar.get(Calendar.WEEK_OF_MONTH);
  }
  public int getDayOfWeek() // 获取当前时间是一周中的哪一天
  {return calendar.get(Calendar.DAY_OF_WEEK)-1;
  }
  public int getHour() // 获取小时
  {return calendar.get(Calendar.HOUR_OF_DAY);
  }
  public int getMinute() // 获取分钟
  {return calendar.get(Calendar.MINUTE);
  }
  public int getSecond() // 获取秒
  {return calendar.get(Calendar.SECOND);
  }
  }
  显示日历时间的页面
  calendar.jsp
  <%@ page contentType="text/html;charset=GB2312" %>
  <%@ page import="JSPCalendar" %>
  <HTML>
  <BODY>
  <jsp:useBean id="clock" class="JSPCalendar" scope="page" >
  </jsp:useBean>
  <td align="center">
  <font color="red"><jsp:getProperty name="clock" property="year"/></font> 年
  <font color="red"><jsp:getProperty name="clock" property="month"/></font> 月
  <font color="red"><jsp:getProperty name="clock" property="dayOfMonth"/></font> 日
  星期 <font color="blue"><jsp:getProperty name="clock" property="day"/></b></font>
  </td>
  <BR> 当前时间为 <jsp:getProperty name="clock" property="time"/>
  <BR> 今天是今年的第 <jsp:getProperty name="clock" property="dayOfYear"/> 天
  <BR> 本周是今年的第 <jsp:getProperty name="clock" property="weekOfYear"/> 周
  <BR> 本周是本月的第 <jsp:getProperty name="clock" property="weekOfMonth"/> 周
  </BODY>
  </HTML>