****使用Ajax可以不需要刷新整个页面,而使局部页面更新的技术;

****JSON是JavaScript得原生格式,JavaScript中处理JSON数据不需要特殊的工具或架包,其规则很简单,对象就是一个为序的“名称/值”对的集合,但是在servlet类中书写时比较麻烦。

所以导入Jackson的两个开源架包:jackson-core-asl-1.9.11.jar,jackson-mapper-asl-1.9.11.jar;其中有个类ObjectMapper,可以简化JSON在servlet类中书写的繁琐;

ObjectMapper mapper=new ObjectMapper();
String result=mapper.writeValueAsString(sc);

建立一个ShoppingCarItam类,封装了书的一些属性:如bookName,bookNum,price;

package com.lanqiao.javaweb.beans;

public class ShoppingCarItam {
private int bookNum;//书的个数
private String bookName;//书的名字
private double price; public ShoppingCarItam() {
super();
// TODO Auto-generated constructor stub
} public ShoppingCarItam(int bookNum, String bookName, double price) {
super();
this.bookNum = bookNum;
this.bookName = bookName;
this.price = price;
} public int getBookNum() {
return bookNum;
} public void setBookNum(int bookNum) {
this.bookNum = bookNum;
} public String getBookName() {
return bookName;
} public void setBookName(String bookName) {
this.bookName = bookName;
} public double getPrice() {
return price;
} public void setPrice(double price) {
this.price = price;
} @Override
public String toString() {
return "ShoppingCarItam [bookNum=" + bookNum + ", bookName=" + bookName + ", price=" + price + "]";
} }

建一个ShoppingCart类,里面有一些常用方法,添加书的数目,书名,数的价格的方法addToCart()...,尤其有三个get方法,便于ObjectMapper类获取,其方法名和值;将其放在map集合中,string为书名;

package com.lanqiao.javaweb.beans;

import java.util.HashMap;
import java.util.Map; public class ShoppingCart {
//存放shoppingcaritem的map:键:书名,值:shoppingcatitem对象
private Map<String, ShoppingCarItam> items=new HashMap<String,ShoppingCarItam>(); private String bookName; ShoppingCarItam item=null;
public void addToCart(String bookName,double price){
this.bookName=bookName;
//如果集合中已经有该书了,获取其书名,直接将其数量加1
if(items.containsKey(bookName)){
item=items.get(bookName);
item.setBookNum(item.getBookNum() +1); }
else{
//如果集合中没有该书,设置该书的书名,价格,数量加1;
item=new ShoppingCarItam(); item.setBookName(bookName);
item.setPrice(price);
item.setBookNum(1);
items.put(bookName, item);
}
} //获取书的总数量
public int getTotalBookNum(){
int total=0;
for(ShoppingCarItam item1:items.values()){
total+=item1.getBookNum();
}
return total;
}
//获取书名
public String getBookName() {
return bookName;
} //总的价格
public double getTotalMoney(){
double money=0.0;
for(ShoppingCarItam item2:items.values()){
money+=item2.getPrice()*item2.getBookNum();
}
return money;
}
}

建立一个Servlet类:AddToCartServlet,可以获取index.jsp中的书名id,price,然后调用ShoppingCart类中的方法,得出中的书的数量,总的金额,通过ObjectMapper类,获取ShoppingCart类中的get方法,并获取该方法的值。。。

package com.lanqiao.javaweb.beans;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import org.codehaus.jackson.map.ObjectMapper; public class AddToCartServlet extends HttpServlet {
private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
} protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取请求的参数id(bookName),price
String bookName=request.getParameter("id");
double price=Double.parseDouble(request.getParameter("price")); //获取购物车对象
HttpSession session=request.getSession();
ShoppingCart sc=(ShoppingCart)session.getAttribute("sc"); if (sc==null) {
sc=new ShoppingCart();
session.setAttribute("sc", sc);
} //把点击选项加入购物车
sc.addToCart(bookName, price); //准备相应的JSON对象
// StringBuilder result=new StringBuilder();
// result.append("{")
// .append("\"bookName\":\""+bookName+"\"")
// .append(",")
// .append("\"totalBookNum\":\""+sc.getTotalBookNum()+"\"")
// .append(",")
// .append("\"totalMoney\":\""+sc.getTotalMoney()+"\"")
// .append("}"); //导入Jackson的两个开源架包,可以简化JSON代码,如上为JSON 的代码,比较繁琐
//ObjectMapper类可以获取get方法的方法名和其返回值,以名称/值,对的方式输出;
ObjectMapper mapper=new ObjectMapper();
String result=mapper.writeValueAsString(sc);
System.out.println(result); //响应JSON对象
response.setContentType("text/javascript");
response.getWriter().print(result);
//response.getWriter().println(result.toString());
} }

index.jsp页面:使用了Ajax的$.getJSON

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
<script type="text/javascript" src="${pageContext.request.contextPath }/scripts/jquery-1.7.2.js"></script>
<script type="text/javascript">
$(function(){
//隐藏div
var isHasCart="${sessionScope.sc==null}";
//alert(isHasCart);
if (isHasCart=="true") {
$("#cart").hide();
}else{
$("#cart").show();
$("#bookName").text("${sessionScope.sc.bookName}");
$("#totalBookNum").text("${sessionScope.sc.totalBookNum}");
$("#totalMoney").text("${sessionScope.sc.totalMoney}");
}
//未点击时div是隐藏的
$("a").click(function() {
//未点击时div是隐藏的
$("#cart").show();

      //获取url地址
var url=this.href;
      //时间拽,阻止缓存
var args={"time":new Date()};

        //getJSON方法
$.getJSON(url,args,function(data){
$("#bookName").text(data.bookName);
$("#totalBookNum").text(data.totalBookNum);
$("#totalMoney").text(data.totalMoney);
});
return false;
});
}) </script>
</head>
<body>
<div id="cart">
您已经将&nbsp;<span id="bookName"></span>&nbsp;加入购物车
购物车中有&nbsp;<span id="totalBookNum"></span>&nbsp;本书
总价格为&nbsp;<span id="totalMoney"></span>&nbsp;
</div>
<br><br>
<!--pageContext.request.contextPath为绝对路径,相对而言较为安全 -->
java&nbsp;&nbsp;<a href="${pageContext.request.contextPath }/addToCart?id=java&price=200">加入购物车</a>
<br><br> Oracle&nbsp;&nbsp;<a href="${pageContext.request.contextPath }/addToCart?id=Oracle&price=150">加入购物车</a>
<br><br> Structs2&nbsp;&nbsp;<a href="${pageContext.request.contextPath }/addToCart?id=Structs2&price=100">加入购物车</a>
<br><br> </body>
</html>

lib下的web.xml文件

<servlet>
<description></description>
<display-name>AddToCart</display-name>
<servlet-name>AddToCart</servlet-name>
<servlet-class>com.lanqiao.javaweb.beans.AddToCartServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AddToCart</servlet-name>
<url-pattern>/addToCart</url-pattern>
</servlet-mapping>

Ajax案例:简易的购书网页的更多相关文章

  1. Django-website 程序案例系列-6 ajax案例

    普通ajax案例: views.py def testajax(request): h = request.POST.get('hostname') #拿到ajax传来的值 i = request.P ...

  2. java调用phantomjs采集ajax加载生成的网页

    java调用phantomjs采集ajax加载生成的网页 日前有采集需求,当我把所有的对应页面的链接都拿到手,准备开始根据链接去采集(写爬虫爬取)对应的终端页的时候,发觉用程序获取到的数据根本没有对应 ...

  3. Ajax学习(1)-简单ajax案例

    1.什么是Ajax? Ajax是Asynchronous JavaScript and XML 的缩写,即异步的Javascript和XML. 可以使用Ajax在不加载整个网页的情况下更新部分网页信息 ...

  4. js调用ajax案例

    js调用ajax案例 测试地址:http://www.w3school.com.cn/tiy/t.asp?f=ajax_get 嵌入下面代码,点击提交,再点击请求数据.就可以看到结果了. <ht ...

  5. 转 PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)

    PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)   通过curl_setopt()函数可以方便快捷的抓取网页(采集很方便),curl_setopt 是php的一个 ...

  6. ajax案例_校验用户名

    目录 ajax案例_校验用户名 代码下载 需求 流程 搭建环境 开发代码 1_jsp 1_servlet 1_service.dao 2_servlet 2_jsp 测试后,功能实现,完结撒花 aja ...

  7. js中的经典案例--简易万年历

    js中的经典案例--简易万年历 html代码 <!DOCTYPE html> <html> <head> <meta charset="utf-8& ...

  8. PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)

    通过curl_setopt()函数可以方便快捷的抓取网页(采集很方便),curl_setopt 是php的一个扩展库 使用条件:需要在php.ini 中配置开启.(PHP 4 >= 4.0.2) ...

  9. Ajax案例(使用ajax进行加法运算)

    此案例功能实现了一边看视频一边进行加法运算,而加法运算时页面不会刷新请求 ajax代码: <script type="text/javascript" src="j ...

随机推荐

  1. Oracle Flashback Technologies - 闪回被drop的表

    Oracle Flashback Technologies - 闪回被drop的表 在oracle10g中,drop一个表后,表没有真正被删除,支持被rename后放在recyclebin中. #新建 ...

  2. c#异步调用

    首先来看一个简单的例子: 小明在烧水,等水烧开以后,将开水灌入热水瓶,然后开始整理家务 小文在烧水,在烧水的过程中整理家务,等水烧开以后,放下手中的家务活,将开水灌入热水瓶,然后继续整理家务 这也是日 ...

  3. ShareSDKForANE 打包笔记

    最近做了一个ShareSDK IOS的接入 (ANE) , 现在想想其实很简单 不过由于对Xcode,ANE的不熟悉也折腾了好久, 舔着脸打扰客服好几天… 呵呵 目前把我接入的一些步骤列出来 希望能帮 ...

  4. JAVA开发Web Service几种框架介绍

    郑重声明:此文为转载来的,出处已不知了,侵告删. 在讲Web Service开发服务时,需要介绍一个目前开发Web Service的几个框架,分别为Axis,axis2,Xfire,CXF以及JWS( ...

  5. ACM/ICPC竞赛

    ACM知识点分类   第一类:基础算法 (1) 基础算法:枚举,贪心,递归,分治,递推,构造,模拟 (2) 动态规划:背包问题,树形dp,状态压缩dp,单调性优化,插头dp (3) 搜索:dfs,bf ...

  6. JavaOOP项目 CMS内容管理系统

    数据库里创建一个News表,要有标题.作者.时间.内容等列. 1:首先要使用JDBC进行数据库连接,得先在项目里新建一个Folder,把Sqlserver 的驱动jar包导入. 2:使用MyEclip ...

  7. JSon_零基础_005_将po(bean)对象集合List转换为JSon格式的对象字符串,返回给界面

    将po(bean)对象集合List转换为JSon格式的对象字符串,返回给界面 导入jar包: 编写:po(bean)代码: package com.west.webcourse.po; /** * 第 ...

  8. Android -- 自定义View小Demo(一)

    1,现在要实现下图的简单效果,很简单  ,就是使用paint在canvas上绘制5中不同颜色的圆圈,效果图如下: 这是绘制基本图形一种最简单的方法,下面是它的代码 ,注释写的很详细,也就不去讲解了 M ...

  9. JSP-03-实现数据传递

    会话跟踪:隐藏表单域.URL重写和Cookie 3.1 传参方法 get /post 区别   3.2  request 获取参数 数据类型  变量名  =  (数据类型)request.getPar ...

  10. 有关OpenGL着色语言(一)

    刚接触OpenGL着色语言...,不定期增加内容 1.OpenGL着色语言(GLSL)是什么? 用于OpenGL的面向过程的高级着色语言,是近年来图形编程领域中出现的最重要的新型开发技术,使用Open ...