Ajax案例:简易的购书网页

****使用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>

时间: 2024-11-07 16:36:39

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

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

java调用phantomjs采集ajax加载生成的网页 日前有采集需求,当我把所有的对应页面的链接都拿到手,准备开始根据链接去采集(写爬虫爬取)对应的终端页的时候,发觉用程序获取到的数据根本没有对应的内容,可是我的浏览器看到的内容明明是有的,于是浏览器查看源代码也发觉没有,此时想起该网页应该是ajax加载的.不知道ajax的小朋友可以去学下web开发啦. 采集ajax生成的内容手段不外乎两种.一种是通过http观察加载页面时候的请求,然后我们模仿该请求去得到对应的内容,第二种则是模仿浏览器行为

Ajax案例3--&gt;判断用户名是否被占用

jsp页面--thirdajax.jsp 1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 4 <!DOCTYPE

Ajax风格的一款网页Loading效果

现在比较流行的一款Ajax风格的网页Loading,多见于一些大量使用Ajax技术的网站中,页面加载时会自动显示提示信息,带载入动画效果,网页加载完自动消失,是一款正在具有Loading功能的网页进度条. <html></P> <P><head> <title>Loading</title> <style type="text/css"> body{background-color:#000;} #co

Ajax案例4--&gt;接收后台传递的XML数据

jsp页面--fourthajax.jsp 1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> 4 <!DOCTYP

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

PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据) 通过curl_setopt()函数可以方便快捷的抓取网页(采集很方便),curl_setopt 是php的一个扩展库 使用条件:需要在php.ini 中配置开启.(PHP 4 >= 4.0.2)       //取消下面的注释 extension=php_curl.dll 在Linux下面,需要重新编译PHP了,编译时,你需要打开编译参数——在configure命令上加上“–with-curl” 参数. 1.

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

此案例功能实现了一边看视频一边进行加法运算,而加法运算时页面不会刷新请求 ajax代码: <script type="text/javascript" src="jquery-1.8.3.js"></script> <script type="text/javascript"> $(function () { $("#btnOK").click(function () { var i1 =

ajax 案例demo

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html> <head> <title>新建网页</title> <meta http-equiv="Content-Type" content="te

314 Ajax案例:邮箱地址验证,搜索框输入自动提示,省市区三级联动

Aja案例接口文档 测试地址:http://localhost:3000 请求参数类型:application/x-www-form-urlencoded 邮箱地址验证 简要描述 验证邮箱@itcast.cn地址是否唯一,已注册 [[email protected]符合规则,未注册itheima] 请求地址 /verifyEmailAdress 请求方式 GET 参数 参数名 必选 类型 说明 email 是 string 待验证邮箱地址 返回值 {message: '邮箱地址已经注册过了, 请

Ajax案例1--&gt;GET请求

jsp页面--firstajax.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!DOCTYPE html PUB