实验2:运用JSP编写动态网页
一.选题问题
1)编写一个购物车,实现向购物车里添加商品、移除指定商品和清空购物车的功能
2)延续实验一
二.程序设计
1.功能
  1)购物车:可以实现向购物车里添加指定商品,移除指定商品,清空购物车的基本功能,另外还可以实现简单的结算功能。
  2)实验一延续:实现登录、以及同一用户不能重复登录的功能
2.技术
  1)必用技术:
      JSP内置对象:Request,Response
  2)选用技术:
      JSP、JavaScript:Session,application
三.数据设计
1.含义
  1)购物车:
  1>goods.html:用来显示商品清单,选择购买数量,以及添加到购物车
  2>cart.jsp:用来查看添加到购物车的商品,实现商品的删除,以及返回购物页面继续添加或者跳转到结算页面支付。使用了request获得信息,session创建表单,调用了自创建的hzsb类。
  3>hzsb.jsp:定义了一个“汉子识别”的类,该类可以把从页面中获取的汉子自动转换成单字节编码,并在显示时再转换回来。
  4>cost.jsp:结算页面。负责将购物车里所有的商品及数量显示出来并且进行统计,得到总计钱数。使用了request获得信息,session创建表单,调用hzsb类。
  2)实验一添加功能
  1>web.html:显示实验一中的页面,其中“登录”超链接到index.jsp;“注册”超链接到count.jsp。
  2>index.jsp:登录页面。用于用户名和密码的输入,输入完成后点击“确定”,可以跳转到rsInfo.jsp页面查看所输入的信息是否保存。
  3>rsInfo.jsp:查看页面。该页面用于显示所输入的信息。另外该页面调用了response对象,用于显示当前的时间,并用于页面的刷新。
  4>count.jsp:“同一用户只能登录一次页面”,即用户一旦登录就不能够通过反复刷新页面造成“多次登录”的假象。该页面调用了application对象,用于覆盖掉刷新的次数。
2.作用范围
  1)购物车
  1>goods.html:
      作用于“购物车实例”页面,代码如下
  <html>
伊能静原名
  <head>
    <title>购物车实例</title>
  </head>
  <body>
  <h1 align="center">购 物 车</h1>
  <table width="90%" border="0" align="center" cellpadding="10" cellspacing="1" bgcolor="#CC9900"> 
    <tr>
      <td width="30%"> 书名</td>                                                               
      <td width="10%">单价<br></td>
      <td width="30%">出版社<br></td>地下城公会
      <td width="30%">购买数量<br></td>
    </tr>
    <tr>
      <td bgcolor="#FFFFCC"> 安徒生童话</td>                                                   
      <td bgcolor="#FFFFCC">45.00<br></td>
      <td bgcolor="#FFFFCC">教育出版社<br></td>
      <td bgcolor="#FFFFCC">                                                                       
        <form method="post" action="cart.jsp">
              <input type="text" name="num" value="1" size="3">                                     
              <input type="submit" name="button6" value="放到购物车">
              <input type="hidden" name="sm" value="安徒生童话">
              <input type="hidden" name="cost" value="45.00">
              <input type="hidden" name="cbs" value="教育出版社">
        </form>
      </td>
  </tr>
  <tr>
      <td bgcolor="#FFFFCC"> 格林童话</td>
      <td bgcolor="#FFFFCC">30.00<br></td>
      <td bgcolor="#FFFFCC">教育出版社<br></td>
      <td bgcolor="#FFFFCC">
        <form method="post" action="cart.jsp">
              <input type="text" name="num" value="1" size="3">
              <input type="submit" name="button7" value="放到购物车">
              <input type="hidden" name="sm" value="格林童话">
              <input type="hidden" name="cost" value="30.00">
宋茜综艺
              <input type="hidden" name="cbs" value="教育出版社">
        </form>
      </td>
剃须刀什么样的好  </tr>
  </table>
</body>
</html>
显示效果如下图:(购买数量的初始值设为1,可通过输入修改;点击“放到购物车”即可
    跳转到“我的购物车页面”)
  2>cart.jsp:
作用于“我的购物车”页面,代码如下:
<%@ page language="java" contentType="text/html; charset=gb2312"%>
<%@ page import="java.util. * " %>
<%@ include file="hzsb.jsp" %>
车票查询 火车票
<html>
<head>
<title>我的购物车</title>
</head>
<body>
  <h1 align="center">已 购 商 品</h1>
    <% String[] goods=new String[4];                 
    goods[0]=Parameter("sm");             
    goods[1]=Parameter("cost");           
    goods[2]=Parameter("cbs");           
    goods[3]=Parameter("num");           
    Vector goodslist=(Vector)Attribute("goodscart");       
    if(goodslist==null)                                   
李晨张馨予分手原因    {  goodslist=new Vector();                             
        goodslist.addElement(goods);
    }
    else
    {  goodslist.addElement(goods);                       
        if(Parameter("delgoods")!=null)         
        {  String delgoods=Parameter("delgoods");
          veElementAt(Integer.parseInt(delgoods));
        }
    }
    session.setAttribute("goodscart",goodslist);         
  %>
  <table width="90%" border="0" align="center" cellpadding="10" cellspacing="1" bgcolor="#CC9900">
    <tbody><tr>
    <td width="30%"> 书名</td>
    <td width="10%">单价 </td>
    <td width="30%">出版社 </td>
    <td width="10%">购买 </td>
    <td width="20%">删除 </td>
    </tr>
    <% if(goodslist!=null)                       
    for(int x=0;x<goodslist.size();x++)