PowerPoint 演示文稿

Similar documents
09 (File Processes) (mkdir) 9-3 (createnewfile) 9-4 (write) 9-5 (read) 9-6 (deletefile) 9-7 (deletedir) (Exercises)

基于CDIO一体化理念的课程教学大纲设计

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

D getinitparameternames() 9 下 列 选 项 中, 属 于 Servlet API 中 提 供 的 request 对 象 的 包 装 类 的 是 ( ) A HttpServletRequestWrapper B HttpServletRequest C HttpServ

实验六 JSP/Servlet

5-1 nav css 5-2

resp.getwriter().print(j + "*" + i + "=" + j * i+" "); resp.getwriter().print("<br/>"); protected void dopost(httpservletrequest req, HttpServletRespo

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

没 有 多 余 的 Contruol 或 Action 了 原 来 Domain 层 被 服 务 层 Service layer 遮 挡, 在 右 边 图 中, 则 Domain 层 直 接 暴 露 给 前 台 了, 没 有 被 遮 挡, 裸 露 了 这 样 一 步 到 位 实 现 领 域 模 型

untitled

RUN_PC連載_10_.doc

Microsoft PowerPoint - 05-Status-Codes-Chinese.ppt

(CIP) Web /,. :, ISBN X.W T P393.4 CIP (2004) Web ( ) ( / ) : * 787

EJB-Programming-4-cn.doc

设计模式 Design Patterns

Microsoft Word - 01.DOC

p.2 1 <HTML> 2 3 <HEAD> 4 <TITLE> </TITLE> 5 </HEAD> 6 7 <BODY> 8 <H3><B> </B></H3> 9 <H4><I> </I></H4> 10 </BODY> </HTML> 1. HTML 1. 2.

A-1 HTML A-1-1 HTML 1 HTML JSP HTML HTML HTML JSP A HTML HTML HTML HTML HTML HTML HTML HTML.htm.html HTML Windows NotePad HTML IE [ / ] NotePad A-2

1. 2. Flex Adobe 3.

在所有的项目开发中, 一定是多人协作的团队开发, 但是使用框架就会出现一个问题, 我们所 有的 Action 以及相关的路径都要求在我们的 struts.xml 文件中配置, 如果所有的人去修改一个 文件, 那么就会变得混乱, 而且有可能出现冲突, 那么在 struts.xml 文件中为了解决这个问

07-form

05 01 accordion UI containers 03 Accordion accordion UI accordion 54

EJB-Programming-3.PDF

untitled

Microsoft PowerPoint - 02-Servlet-Basics-Chinese.ppt

Yih-Chuan Lin Tsung-Han Wu Hsin-Te Wu Hsiao-Hui Hsu Department of Computer Science and Information Engineering Shu-Te University

Servlet

untitled

06 01 action JavaScript action jquery jquery AJAX CSS jquery CSS jquery HTML CSS jquery.css() getter setter.css('backgroundcolor') jquery CSS b

Microsoft Word 样章.dot

《linux从入门到精通》实验指导第三讲:文件及目录操作

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

untitled

PowerPoint プレゼンテーション

Microsoft Word - 第3章.doc

Microsoft Word - 最新正文.doc

關於本書 l 3 PhoneGap Appcelerator Titanium Sencha Touch (wrapper framework) Native App PhoneGap Build Native App Hybrid App Java Objective-C Android SDK

F477

13 根 据 各 种 网 络 商 务 信 息 对 不 同 用 户 所 产 生 的 使 用 效 用, 网 络 商 务 信 息 大 致 可 分 为 四 级, 其 中 占 比 重 最 大 的 是 ( A ) A 第 一 级 免 费 信 息 B 第 二 级 低 收 费 信 息 C 第 三 级 标 准 收 费

Microsoft Word - 改版式网页全文.doc

RUN_PC連載_8_.doc

untitled

TopTest_Adminstrator.doc

What Servlet

"+handlermethod.getbean().getclass().getname()); public void aftercompletion(httpservletrequest req, HttpServletResponse resp, Object handler, Excepti

JSP基础编程

设计模式 Design Patterns

设计模式 Design Patterns

Microsoft Word - PHP7Ch01.docx

《linux从入门到精通》实验指导第三讲:文件及目录操作

PowerPoint 演示文稿

untitled

PowerPoint 演示文稿

59 1 CSpace 2 CSpace CSpace URL CSpace 1 CSpace URL 2 Lucene 3 ID 4 ID Web 1. 2 CSpace LireSolr 3 LireSolr 3 Web LireSolr ID

jsp

ii Vue Bootstrap 4 ES 6 Vue Vue Bootstrap 4 ES 6 Vue 2 vue html vue html vue Vue HTML 5 CSS ES 6 HTML 5 CSS Visual Studio Code h

付宝容器 jsapi 档 册 PDF 版本 本版本为实验版本, 为线下独 查看使, 受制于 成 PDF 程序的限制, 样式问题还没有很好的解决, 例如分 切图 代码 亮 推荐使 在线版本, 便实时查看 jsapi 运 效果 如需搜索, 使 阅读 PDF 软件 带功能即可 更多细节样式调整和 录索引探

附件2

untitled

第1章 在线考试系统

Microsoft Word - 第4章 Servlet开发—教学设计.doc

目 录 1. 业 务 流 程 系 统 开 发 面 临 的 挑 战 与 机 遇 业 务 流 程 管 理 新 一 代 开 源 业 务 流 程 开 发 平 台 BPMX BPMX3 是 什 么 为 什 么 要 优 先 采 用 BPMX

2.4 Selenium Python Selenium Selenium Selenium Selenium pip install selenium Chrome WebDriver Google Chrome (Linux, Mac, Windows) Chrome WebDriv

untitled

Microsoft Word - JavaWeb程序开发入门—教学大纲.doc

获取 Access Token access_token 是接口的全局唯一票据, 接入方调用各接口时都需使用 access_token 开发者需要进行妥善保存 access_token 的存储至少要保留 512 个字符空间 access_token 的有效期目前为 2 个小时, 需定时刷新, 重复

南華大學數位論文

Microsoft PowerPoint - 08-Session-Tracking-Chinese.ppt

PrintWriter s = new PrintWriter(writer); ex.printstacktrace(s); mv.addobject("exception", writer.tostring()); mv.setviewname("error"); return

Microsoft PowerPoint - P766Ch09.ppt

优迈科技教学大纲2009版本

Guava学习之Resources

<4D F736F F F696E74202D20332D322E432B2BC3E6CFF2B6D4CFF3B3CCD0F2C9E8BCC6A1AAD6D8D4D8A1A2BCCCB3D0A1A2B6E0CCACBACDBEDBBACF2E707074>

IsPostBack 2

WebSphere Studio Application Developer IBM Portal Toolkit... 2/21 1. WebSphere Portal Portal WebSphere Application Server stopserver.bat -configfile..

停止混流接口 请注意 : 该功能需要联系 ZEGO 技术支持开通 1 接口调用说明 http 请求方式 : POST/FORM, 需使用 https 正式环境地址 access_token=access_token (http

第一章 章标题-F2 上空24,下空24

CHAPTER 1

untitled

<4D F736F F D20BBF9D3DA416E64726F6964C6BDCCA8B5C4B5E7D7D3C5C4C2F4CFB5CDB32E646F63>

Microsoft PowerPoint - 03-Form-Data-Chinese.ppt

设计模式 Design Patterns

ebook60-13

ebook193-1

使用 Eclipse 开发 Java EE 应用 (Web 应用 ) 这里以开发一个简单的 Web 应用为例, 介绍使用 Eclipse 开发 Java EE 应用的一般步 骤 此处使用的 Eclipse 是 Eclipse IDE for Java EE Developers; 如果是使用的其他

ASP 電子商務網頁設計

ebook4-12

<ADB6ADB1C25EA8FAA6DB2D4D56432E706466>

Java java.lang.math Java Java.util.Random : ArithmeticException int zero = 0; try { int i= 72 / zero ; }catch (ArithmeticException e ) { // } 0,

PowerPoint 演示文稿

WebEx 一键集成 1 文档目的 Web 集成 URL API 语法 启会 加会 调用 移动集成 wbx schema 调用 取得 sessionticket...4

17 Chapter Video/Audio API 17-1 <video> <audio> 17-2 <video> <audio>

Microsoft Word - Hibernate与Struts2和Spring组合指导.doc

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

概述

新・解きながら学ぶJava

untitled

Transcription:

任务一应用 JSP+Servlet+JavaBean 实现购物车 添加

对于刚刚开始工作的小刘, 要先从简单一点的功能 上手 应用 JSP+Servlet+JavaBean 实现购物车 添加

购物车主要有添加商品 删除商品 修改数量 等主要功能, 本任务将通过 JSP+Servlet+JavaBean 模型实现购物车的添加功能, 购物车添加的具体步骤为 : 查看商品详细信息 加入购物车 显示将购物车中的商品列表, 添加购物车的页面效果如图所示

知识目标 : 了解 JSP+Servlet+JavaBean 开发模型 掌握在 Servlet 中使用内置对象的方法 掌握 JSP 页面与 Servlet 间参数传递的方法 掌握集合类 ArrayList 的使用

技能目标 : 能在 Servlet 中灵活正确使用内置对象 能够在 Servlet 中重写 dopost() 与 doget() 方法, 实现处理购物车添加的业务逻辑

所谓 JSP+Servlet+JavaBeans 开发模型, 使用 JSP 技术来表现页面, 使用 Servlet 技术完成大量的事务处理, 使用 Bean 来存储数据 Servlet 用来处理请求的事务, 充当一个控制者的角色, 创建 JSP 需要的 Bean 和对象, 然后根据用户请求的行为, 决定将哪个 JSP 页面发送给客户 JSP+Servlet+JavaBeans 开发模型示意图如图所示 器览浏 1 request (Controller) Servlet 2 3 5 response (View) JSP 4 (Model) JavaBean 应用服务器

本任务采用 JSP+Servlet+JavaBean 模型实现 添加购物车 功能,JSP Servlet JavaBean 这三部分的分析如下 : JSP 部分 : 涉及到两个 JSP 页面 : 查看商品详情页面 (product_detail.jsp, 在任务 5.4 中实现 ) 和 购物车商品列表页面 (list_cart.jsp) Servlet 部分 : 任务 6.1 中, 我们创建了一个购物车 Servlet CartServlet, 在本任务中, 结合购物车添加功能, 我们将继续完善 CartServlet JavaBean 部分 : 本任务将创建一个 JavaBean 购物车实体类 Cart 实现思路 :product_detail.jsp 页面中将表单提交给 CartServlet,CartServlet 接收 处理表单数据并将数据存放在 session 对象中, 并将页面跳转至 list_cart.jsp, 在 list_cart.jsp 页面中读取 session 数据, 形成列表并显示

创建购物车实体类 Cart 在 digitalweb 项目的 com.digitalweb.model 包中创建 Cart 实体类, 它的类结构如图所示

编辑前台 JSP 页面 product_detail.jsp 在任务 5.4 中完成 查看商品详情 功能基础上, 打开 product_detail.jsp 页面, 将表单 addcartform 的 action 属性为../CartServlet?type=add,../ 表示返回上一级目录, 若 CartServlet 与当前页面处于同级目录, 则可直接设置为 action=cartservlet 表单的 method 属性设置为 post, 这表明表单 addcartform 将采用 POST 方式提交给 CartServlet 进行处理 此外,book_detail.jsp 页面中必须含有相关的隐藏域与 Cart 对象的属性一一对应, 表单的 HTML 代码如下所示 1.<form action="../cartservlet?type=add" method="post" name="addcartform"> 2. <h1><%=p.getname()%></h1> 3. <input type="hidden" name="id" value="<%=p.getid()%>" /> 4. <input type="hidden" name="code" value="<%=p.getcode()%>" /> 5. <input type="hidden" name="name" value="<%=p.getname()%>" /> 6. <input type="hidden" name="price" value="<%=p.getprice()%>" /> 7. <input type="hidden" name="sale" value="<%=p.getsale()%>" /> 8. <input type="hidden" name="pic" value="<%=p.getpic()%>" />

1.<ul> 2. <li style="list-style: none;" class="bt"></li> 3. <li style="list-style: none;" class="text"> 商品编号 :<%=p.getcode()%></li> 4. <li style="list-style: none;" class="text"> 价格 : <%=p.getprice()%></li> 5. <li style="list-style: none;" class="text"> 促销信息 : 直降 <%=p.getsale()%></li> 6. <li style="list-style: none;" class="bt"> 库存 :<%=p.getnum()%></li> 7. <listyle="list-style: none; font-size: 13px; font-family: 黑体 ; color: red;"> 我要买 : 8. <input type="text" name="num" id="num" size="3"> 件 9. </li> 10. </ul> 11. <img hspace="50" src="../images/gwc.png" onclick="javascript:checkaddcartform();" > 12.</form>

由上述代码可见, 表单将通过点击图 6-2-1 中的 加入购物车 图片提交 在提交表单时, 使用 JavaScript 方法 checkaddcartform() 对商品购买数量进行验证 JavaScript 代码如下 : 1.function checkaddcartform() { 2. if (document.getelementbyid("num").value.length <= 0) 3. alert(" 请输入购买数量!"); 4. else 5. document.addcarform.submit(); 6.} 这里的 JavaScript 代码仅仅验证了用户是否输入购买数量, 读者可以进一步添加其他验证, 如数据格式以及数值的正确性等

编写 CartServlet 逻辑处理代码 任务 6.1 中创建的 CartServlet 的主要职责是接收页面请求并进行逻辑处理,CartServlet 将根据接收到的表单参数 type 的值而进行 添加 修改 或 删除 购物车的操作, 如图所示 当 type 值为开始 add 时,CartServlet 执行添加操作 接收参数 type type 为 add 判断 type 的值 type 为 update type 为 delete 接收购物车相关参数接收购物车相关参数接收购物车相关参数 添加购物车 修改购物车 删除购物车 页面跳转至 list_cart.jsp 结束

... 添加购物车操作的流程如图所示 : 商品 ID:id 商品名称 :name 商品价格 :price 商品数量 :num 商品图片路径 :image type 为 add 接收购物车相关参数 将接收到的参数信息封装为 Cart 对象 判断 clist 是否为空 初始化 clist 遍历 clist 判断是否已经有该商品 将 Cart 对象加入到 clist 中 将 clist 中对象的数量设置为原数量 + 刚接收的数量 将 clist 放回至 session 页面跳转至 list_cart.jsp

在 CartServlet 的 dopost() 方法中编写代码, 实现购物车添加 在 doget() 方法中, 调用 dopost() 方法, 如此一来, 不管页面以何种方式提交表单, 都可以进行相同的处理 dopost() 方法中的代码如下 : 1. public void dopost(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { 2. String nextpage = "product/list_cart.jsp"; 3. HttpSession session = request.getsession(); // 获取 session 对象 4. // 接收购物车参数 5. HashMap<String,String[]> map = (HashMap<String,String[]>) request.getparametermap(); 6. ArrayList<Cart> cartlist = (ArrayList<Cart>)session.getAttribute("cartList"); 7. if(map.get("type")[0].equals("add")){

8. // 封装 Cart 对象 9. Cart cart = new Cart(); 10. cart.setid(integer.parseint(map.get("id")[0])); 11. cart.setname(map.get("name")[0]); 12. cart.setsale(double.parsedouble(map.get("sale")[0])); 13. cart.setprice(double.parsedouble(map.get("price")[0])); 14. cart.setpic(map.get("pic")[0]); 15. cart.setnum(integer.parseint(map.get("num")[0])); 16. if(cartlist == null){ 17. cartlist = new ArrayList<Cart>(); 18. session.setattribute("cartlist",cartlist); 19. }

20. // 判断 cartlist 中是否有同样的商品 21. boolean hascart = false; 22. for(cart c : cartlist){ 23. if(c.getid() == cart.getid()){ 24. c.setnum(c.getnum()+cart.getnum()); 25. hascart = true; 26. break; 27. } 28. } 29. if(!hascart) 30. cartlist.add(cart); 31. } 32. response.sendredirect(nextpage); // 页面跳转 }

程序说明 第 3 行 : 通过 request 对象的 getsession() 方法创建 session 第 5 行 : 批量接收 product_detail.jsp 页面传递的所有参数, 放在一个 HashMap 对象 map 中, 详见本任务技术要点 第 6 行 : 从 session 中获取当前的购物车列表 第 7 行 : 判断参数 type 的值是否为 add 第 9~15 行 : 封装 Cart 对象 第 16~19 行 : 若购物车为空 ( 即第一次添加购物车 ), 则实例化购物车列表 cartlist 对象, 并保存在 session 中 第 21~31 行 : 判断 cartlist 中是否有同样的商品, 有则直接修改购物车中数量 第 32 行 : 跳转到购物车列表页面 cart_list.jsp

在购物车列表页面 cart_list.jsp 中显示购物车信息 在 cart_list.jsp 页面中, 使用表格来显示购物车列表, 如图所示

页面对应的 HTML 代码如下所示 : <div id="shoppingcart"> <p><img src="images/buycar_logo.gif" alt=" 购物车 " /></p> <table> <tr> <th width="6%" > 选项 </th> <th width="15%"> 商品图片 </th> <th width="20%"> 商品名称 </th> <th width="8%"> 商品单价 </th> <th width="28%"> 数量 </th> <th width="11%"> 单价优惠 </th> <th width="6%"> 小计 </th> <th width="6%"> 删除 </th> </tr> <tr> <td><input type="checkbox" name="chkbox" value="checkbox" /></td> <td> 此处显示商品图片 </td> <td> 此处显示商品名称 </td> <td> 此处显示商品价格 </td> <td> 此处显示商品数量 </td> <td> 此处显示商品促销价 </td> <td> 此处显示商品金额小计 </td> <td><a href=" "> 删除 </a></td> </tr> <tr> <td colspan="6"> 总价 :</td> </tr> </table> </div>

在页面中加入 java 代码, 从 session 对象中读取购物车列表中的数据, 并通过循环在页面相应位置显示 商品小计和商品总价通过计算得到, 具体代码如下 : 1. <div id="shoppingcart"> 2. <p><img src="images/buycar_logo.gif" alt=" 购物车 " /></p> 3. <table> 4. <tr> 5. <th width="6%" > 选项 </th> 6. <th width="15%"> 商品图片 </th> 7. 8. </tr> 9. <% 10. double sum = 0.0; // 商品总价 11. ArrayList<Cart> cartlist = (ArrayList<Cart>)session.getAttribute("cartList"); 12. if(cartlist!=null){ 13. for(cart c : cartlist) { 14.%>

15. <tr> 16. <td><input type="checkbox" name="chkbox" value="checkbox" /></td> 17. <td> <a href="product_detail.jsp?id=<%=c.getid() %>"> 18. <img src="<%=c.getpic() %>" width="75" height="50" /></a> 19. </td> 20. <td><a href="product_detail.jsp?id=<%=c.getid() %>"> 21. <%=(c.getname()).substring(0,12) %></a> 22. </td> 23. <td> <%=c.getprice() %></td> 24. <td><a>-</a> 25. <input type="text" size="2" name="num" id="num" value="<%=c.getnum() %>" /> 26. <a>+</a> 27. </td> 28. <td> <%=c.getsale() %></td> 29. <td> <%=c.getprice()*c.getnum() %></td> 30. <td><a href=" "> 删除 </a></td> 31. </tr>

32. <% 33. sum += c.getprice()*c.getnum(); 34. } 35. }%> 36.<tr> 37. <td colspan="6"> 总价 :<%=sum %></td> 38. <td> 39. <input type="button" name="totalprice" value=" 返回 " class="picbut" onclick="history.back(-1)" /> 40. </td> 41. <td> 42. <input type="button" name="totalprice" value=" 结算 " class="picbut" onclick=" javascript:window.location.href='checkout.jsp'" /> 43. </td> 44. </tr> 45. </table> 46.</div>

47.<% 48. sum += c.getprice()*c.getnum(); 49. } 50. }%> 51.<tr> 52. <td colspan="6"> 总价 :<%=sum %></td> 53. <td> 54. <input type="button" name="totalprice" value=" 返回 " class="picbut" onclick="history.back(-1)" /> 55. </td> 56. <td> 57. <input type="button" name="totalprice" value=" 结算 " class="picbut" onclick=" javascript:window.location.href='checkout.jsp'" /> 58. </td> 59. </tr> 60. </table> 61.</div> 至此, 购物车添加功能已完成, 启动 Tomcat, 在浏览器中打开 list_product.jsp 页面, 查看图书信息并进行添加至 购物车的操作, 页面效果如任务描述中的图所示

1. 在 Servlet 中内置对象的使用众所周知, 在 JSP 页面上可直接通过 session.setattribute(name,object) 来设置内置对象 session, 十分方便, 可如果要在 servlet 使用 session, 就和 JSP 页面也中有点区别了 在 Servlet 中不能直接使用 session,servlet 的 dopost() 和 doget() 方法中, 只提供 request 和 response 两个参数对象, 因此, 要想取得 session 对象, 要通过调用 request 对象的方法来实现 通过 HttpSession session=request.getsession(); 得到一个 session 对象 ( 准确来说, 得到的应该是一个 HttpSession 对象 ), 然后, 就可以像在 JSP 页面中直接使用它了 其实,JSP 中的 session 和 servlet 中的 HttpSession 其实根本没有区别,JSP 页面在编译时会通过 Jsp container 将 session 对象变换为 javax.servlet.http.httpsession 对象 同样的,JSP 中的其他内置对象, 常用的如 out 对象 application 对象, 也要通过相应的方法获取 通过 response 参数对象的 getwriter() 方法获取 out 对象, 例如 : 1.public void doget(httpservletrequest request,httpservletresponse response) 2.throws IOException,ServletException { 3. 4.PrintWriter out=response.getwriter(); 5.out.print("HelloWorld!"); 6.out.close(); }

在 Servlet 中, 取得 application 有两种方法 : 可以通过无参初始化方法, 直接取得 ; 也可以通过有参初始化方法, 必须使用 config 对象取得, 前者较为常用, 例如 : public void dopost(httpservletrequest request,httpservletresponse response) throws IOException,ServletException{ // 取得 Application 对象 ServletContext application=this.getservletcontext(); // 设置 Application 属性 application.setattribute("name", "Magci"); // 跳转到接收页面 response.sendredirect("application.jsp"); }

2. JSP 页面与 Servlet 之间的参数传递在 Java Web 开发中, 常常需要在 JSP 页面与 Servlet 之间的进行传值, 包括从 JSP 页面传值给 servlet 和从 servlet 传值给 JSP 页面 (1)JSP 页面向 Servlet 传值表单传值 URL 是 JSP 页面向 Servlet 传值最常用的方法 例如下面的 HTML 代码 : 1.<!-- JSP page --> 2. 3.<a href="jspservlet? action=toservlet ">click me</a> 4.<form action="jspservlet? action=toservlet " method="post" name="form"> 5.<input name="username" value="test" /> 6.<input name="password" value="abc" /> 7.<input type="submit" value="submit"> 8.</form> 9.

对于 JSP 页面 form 表单的内容, 如 <input> 标签, 在 Servlet 中可用 request.getparameter(" 参数名 ") 方式获取 String uname= request.getparameter("username"); // 获取表单中 username 参数值 test String pwd= request.getparameter("password"); // 获取表单中 password 参数值 abc 这里 <a> 标签中的 href 属性与 <form> 标签的 action 属性的值 JspServlet?action=toServlet, 这里,? 表示 URL 中带有参数,? 后面的表达式 action=toservlet 表示提交给 Servlet 时传递参数 action, 参数值为 toservlet, 在 Servlet 中也用 request.getparameter("action") 获取 若在 URL 中要设置多个参数, 可以用下面的形式 : URL 地址? 参数 1= 参数值 1& 参数 2= 参数值 2& 例如,<form action= "CartServlet?id=1&type=delete" method= "post" >, 表单提交时同时传递两个参数 id 和 type

在本任务中, 商品详细信息页面 (product_detail.jsp) 中分别通过表单传值和 URL 两种方式向 CartServlet 传递参数, 在参数数量比较多的情况下, 可以通过 HttpServletRequest 参数对象 request 的 getparametermap() 方法获得 JSP 页面元素的集合 例如 : HashMap<String,String[]> map = (HashMap<String,String[]>) request.getparametermap(); request.getparametermap() 方法的返回类型是 Map 类型的对象, 记录着所提交的请求中请求参数和参数值的映射关系 另外,request.getParameterMap() 返回值使用泛型时为 Map<String,String[]> 形式, 因为有时像 checkbox 这样的组件会出现一个 name 对应多个 value 的情况, 所以该 Map 中键值对是 String >String[] 的实现 正因为如此, 从 Map 中读取元素时, 使用 map.get(" 参数名 ")[0] 这样的形式 例如, 在前面例子中的 JSP 页面中的参数在 Servlet 中可以通过以下代码获取 : 1. 2. HashMap<String,String[]> map = (HashMap<String,String[]>) request.getparametermap(); 3. String uname=map.get( username )[0]; // 获取表单中 username 参数值 test 4. String pwd= request.getparameter("password"); // 获取表单中 password 参数值 abc 5.String action=request.getparameter( action ); // 获取 URL 中参数 action 的值 toservlet

(2)Servlet 向 JSP 页面传值从 JSP 页面传值给 Servlet 可以使用表单或 URL, 若要从 Servlet 传值给 JSP 页面, 也有两种方法 第一种方法, 在 Servlet 中将数据保存在 session 中, 使用 response 参数对象的 sendredirect() 方法跳转到 JSP 页面, 然后在 JSP 页面中获取 session 中的数据, 例如 : //1.Servlet 中存储数据于 session 并跳转页面 1. 2. String uname= tom ; 3. HttpSession session=request.getsession(); 4. session.setattribute( username,uname); 5. response.sendredirect( userinfo.jsp ); 6. //2.JSP 页面中获取 session 中的值 1. 2. <td><%=session.getattribute( username )%></td> 3.

本任务也采用了上述方法 第二种方法, 也是将数据保存在 session 中, 使用 response 参数对象的 getrequestdispatcher() 方法跳转页面, 最后在 JSP 页面中获取 session 中的数据, 例如 : //1.Servlet 中存储数据于 session 并跳转页面 1. 2. String uname= tom ; 3. HttpSession session=request.getsession(); 4. session.setattribute( username,uname); 5. RequestDispacher rd=request.getrequestdispacher( userinfo.jsp ); 6. rd.forward(request, response); 7. //2.JSP 页面中获取 session 中的值 1. 2. <td><%=session.getattribute( username )%></td> 3.

参照本任务购物车添加的实现方法, 应用 JSP+Servlet+JavaBean 实现购物车删除功能, 页面效果如图所示 删除前 删除后