一.实验课题
会话技术Cookie和Session的应用

二. 实验目的
1.掌握Cookie对象和常用API的运用。
2.掌握Session对象和常用API的运用。

三. 实验内容
1、完成课本任务5-2。
2、完成课本任务5-3。

四. 实验步骤
在以下表格中给出实验内容的相应代码。

5-2 实现购物车
BOOK.java

1./**
2. * BOOK.java
3. */
4.
5.package sessioin.shoppingcar;
6.
7./**
8. * @Title:BookStore Shopping cart
9. * @Description: [用session建一个购物车]
10. * @Param:
11. * @author <a href="mail to: 1018726071@qq.com">JSQ97</a>
12. * @CreateDate: 2020年5月30日 下午4:08:01</p>
13. * @update: [序号][日期YYYY-MM-DD] [更改人姓名][变更描述]
14. *
15. *     1.方法与步骤
16. *      1)创建Book封装图书信息:Book
17. *      2)创建BookDataBase 模拟数据库,里面保存图书
18. *      3)提供图书的购买页面:ListBookServlet
19. *      4)添加购物车:PurcharseServlet
20. *      5)回显购物车图书信息:CartServlet
21. */
22.public class Book {
23.    private String id;
24.    private String name;
25.    //Alt+shift+s 创造构造参数快捷键
26.    /**
27.     *
28.     */
29.    public Book() {
30.
31.    }
32.
33.    /**
34.     * @param id
35.     * @param name
36.     */
37.    public Book(String id, String name) {
38.        this.id = id;
39.        this.name = name;
40.    }
41.
42.    /**
43.     * @return the id
44.     */
45.    public String getId() {
46.        return id;
47.    }
48.    /**
49.     * @param id the id to set
50.     */
51.    public void setId(String id) {
52.        this.id = id;
53.    }
54.    /**
55.     * @return the name
56.     */
57.    public String getName() {
58.        return name;
59.    }
60.    /**
61.     * @param name the name to set
62.     */
63.    public void setName(String name) {
64.        this.name = name;
65.    }
66.
67.}

BookStoreDataBase.java

1.package sessioin.shoppingcar;
2.
3.import java.util.Collection;
4.import java.util.LinkedHashMap;
5.import java.util.Map;
6.
7./**
8. * @Title:BookStoreDataBase
9. * @Description: [创建一个模拟的数据库]
10. * @Param:
11. * @author <a href="mail to: 1018726071@qq.com">JSQ97</a>
12. * @CreateDate: 2020年5月30日 下午4:15:50</p>
13. * @update: [序号][日期YYYY-MM-DD] [更改人姓名][变更描述]
14. */
15.public class BookDataBase {
16.    /**
17.     * 创建模拟数据库,static静态代码块内内容只加载一次
18.     */
19.    private static Map<String,Book> map = new LinkedHashMap<String,Book>();
20.    static {
21.        map.put("1",new Book("1","javaWeb"));
22.        map.put("2",new Book("2","jdbc入门"));
23.        map.put("3",new Book("3","java基础"));
24.        map.put("4",new Book("4","Struts框架"));
25.        map.put("5",new Book("5","hibernate框架"));
26.    }
27.    //1. 得到所有图书的方法
28.    /**
29.     * @return
30.     */
31.    public static Collection<Book> getAll(){
32.        return map.values();
33.    }
34.    //2. 根据map的key,也就是图书id来得到某一本图书
35.    /**
36.     * @param id
37.     * @return
38.     */
39.    public static Book getBook(String id) {
40.        return map.get(id);
41.    }
42.}

ListBookServlet.java

1.package sessioin.shoppingcar;
2.
3.import java.io.IOException;
4.import java.io.PrintWriter;
5.import java.util.Collection;
6.
7.import javax.servlet.ServletException;
8.import javax.servlet.annotation.WebServlet;
9.import javax.servlet.http.HttpServlet;
10.import javax.servlet.http.HttpServletRequest;
11.import javax.servlet.http.HttpServletResponse;
12.
13./**
14. * 提供一个购买图书的页面
15. */
16.@WebServlet("/List")
17.public class ListBookServlet extends HttpServlet {
18.    private static final long serialVersionUID = 1L;
19.
20.
21.
22.    /**
23.     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
24.     */
25.    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
26.        // 处理响应中文的乱码问题
27.        response.setContentType("text/html;charset = utf-8");
28.        //1.得到所有的图书
29.        Collection<Book> books = BookDataBase.getAll();
30.        //2.回显页面
31.        PrintWriter out = response.getWriter();
32.        out.print("以下是本网站售卖的所有图书:"+ "<br/><br/>");
33.        //3.遍历集合,把图书回显页面
34.        for(Book b:books) {
35.            //4.得到图书的名称
36.            String name = b.getName();
37.            String id = b.getId();
38.            //5.提供一个购买图书的链接
39.            String url = "<a herf = '/BookStore/BookDataBase/purcharse?id = "+id+"'>点击购买</a>";
40.            out.print("图书名称:   "+name+"                "+url+"<br/><br/>");
41.        }
42.
43.    }
44.
45.    /**
46.     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
47.     */
48.    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
49.        // TODO Auto-generated method stub
50.        this.doGet(request, response);
51.    }
52.
53.}

CartServlet.java

1.package servlet_test;
2.
3.import java.io.IOException;
4.import java.io.PrintWriter;
5.import java.util.List;
6.
7.import javax.servlet.ServletException;
8.import javax.servlet.http.HttpServlet;
9.import javax.servlet.http.HttpServletRequest;
10.import javax.servlet.http.HttpServletResponse;
11.import javax.servlet.http.HttpSession;
12.
13./**
14. * Servlet implementation class CartServlet
15. */
16.public class CartServlet extends HttpServlet {
17.    private static final long serialVersionUID = 1L;
18.
19.    /**
20.     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
21.     */
22.    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
23.        // TODO Auto-generated method stub
24.        response.setContentType("text/html;charset = utf-8");
25.        PrintWriter out = response.getWriter();
26.        //变量cart引用用户的购物车
27.        List<Book> cart = null;
28.        //变量pruFlag标记用户是否买过商品
29.        boolean pruFlag = true;
30.        //获得用户的session
31.        HttpSession session = request.getSession(false);
32.        //如果session为null,pruFlag设置为false
33.
34.        if(session == null) {
35.            pruFlag = false;
36.        }else {
37.            //获得用户购物车
38.            cart = (List) session.getAttribute("cart");
39.            //如果用过的购物车为null,pruFlage设置为False
40.            if(cart == null) {
41.                pruFlag = false;
42.            }
43.        }
44.        /*
45.        * 如果pruFlag为False,表明用户没有购买图书,重定向到ListServlet页面
46.        */
47.
48.        if(pruFlag = false) {
49.            out.write("对不起!您还没有购买任何商品!<br />");
50.        }else {
51.            //否则显示用户购买图书信息
52.            out.write("您购买的图书有: <br />");
53.            double price = 0;
54.            for(Book b:cart) {
55.                out.write(b.getName()+"<br/>");
56.            }
57.        }
58.    }
59.
60.    /**
61.     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
62.     */
63.    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
64.        // TODO Auto-generated method stub
65.        doGet(request, response);
66.    }
67.
68.}

PurchaseServlet.java

1.package servlet_test;
2.
3.import java.io.IOException;
4.import java.util.ArrayList;
5.import java.util.List;
6.
7.import javax.servlet.ServletException;
8.import javax.servlet.http.Cookie;
9.import javax.servlet.http.HttpServlet;
10.import javax.servlet.http.HttpServletRequest;
11.import javax.servlet.http.HttpServletResponse;
12.import javax.servlet.http.HttpSession;
13.
14./**
15. * Servlet implementation class PurchaseServlet
16. */
17.public class PurchaseServlet extends HttpServlet {
18.    private static final long serialVersionUID = 1L;
19.
20.    /**
21.     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
22.     */
23.    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
24.        // 获得用户购买的商品
25.        String id = request.getParameter("id");
26.        if(id == null) {
27.            //如果id==null(没有此书),就重定向到listBookServlet页面
28.            String url = "/ListBookServlet";
29.            response.sendRedirect(url);//重定向
30.            return;
31.        }
32.
33.        Book b = BookDataBase.getBook(id);
34.        //创建或获得用户的session对象
35.        HttpSession session = request.getSession();
36.        //从session对象里获得用户的购物车
37.        List<Book> cart = (List)session.getAttribute("cart");
38.        if(cart == null) {
39.            //首次购买,为用户创建一个购物车(List集合模拟购物车)
40.            cart = new ArrayList<Book>();
41.            //将购物车存入Session对象
42.            session.setAttribute("cart", cart);
43.        }
44.            cart.add(b);//这个是购物车列表
45.            //创建cookie存放session的标识号
46.            Cookie cookie = new Cookie("UserID",session.getId());
47.            cookie.setMaxAge(60*30);//这个是cookie的有效时间:60s*30个=半小时
48.            cookie.setPath("/servlet_test");//设置该cookie项有效目录路径
49.            response.addCookie(cookie);
50.            //重定向到购物车页面
51.            String url = "/servlet_test/CartServlet";
52.            response.sendRedirect(url);
53.
54.    }
55.
56.    /**
57.     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
58.     */
59.    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
60.        // TODO Auto-generated method stub
61.        doGet(request, response);
62.    }
63.
64.}

CartServlet.java

1.package servlet_test;
2.
3.import java.io.IOException;
4.import java.io.PrintWriter;
5.import java.util.List;
6.
7.import javax.servlet.ServletException;
8.import javax.servlet.http.HttpServlet;
9.import javax.servlet.http.HttpServletRequest;
10.import javax.servlet.http.HttpServletResponse;
11.import javax.servlet.http.HttpSession;
12.
13./**
14. * Servlet implementation class CartServlet
15. */
16.public class CartServlet extends HttpServlet {
17.    private static final long serialVersionUID = 1L;
18.
19.    /**
20.     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
21.     */
22.    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
23.        // TODO Auto-generated method stub
24.        response.setContentType("text/html;charset = utf-8");
25.        PrintWriter out = response.getWriter();
26.        //变量cart引用用户的购物车
27.        List<Book> cart = null;
28.        //变量pruFlag标记用户是否买过商品
29.        boolean pruFlag = true;
30.        //获得用户的session
31.        HttpSession session = request.getSession(false);
32.        //如果session为null,pruFlag设置为false
33.
34.        if(session == null) {
35.            pruFlag = false;
36.        }else {
37.            //获得用户购物车
38.            cart = (List) session.getAttribute("cart");
39.            //如果用过的购物车为null,pruFlage设置为False
40.            if(cart == null) {
41.                pruFlag = false;
42.            }
43.        }
44.        /*
45.        * 如果pruFlag为False,表明用户没有购买图书,重定向到ListServlet页面
46.        */
47.
48.        if(pruFlag = false) {
49.            out.write("对不起!您还没有购买任何商品!<br />");
50.        }else {
51.            //否则显示用户购买图书信息
52.            out.write("您购买的图书有: <br />");
53.            double price = 0;
54.            for(Book b:cart) {
55.                out.write(b.getName()+"<br/>");
56.            }
57.        }
58.    }
59.
60.    /**
61.     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
62.     */
63.    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
64.        // TODO Auto-generated method stub
65.        doGet(request, response);
66.    }
67.
68.}

5-3 实现用户登录
IndexServlet.java

1.package login;
2.
3.import java.io.IOException;
4.import javax.servlet.ServletException;
5.import javax.servlet.http.Cookie;
6.import javax.servlet.http.HttpServlet;
7.import javax.servlet.http.HttpServletRequest;
8.import javax.servlet.http.HttpServletResponse;
9.import javax.servlet.http.HttpSession;
10.
11./**
12. * Servlet implementation class IndexServlet
13. */
14.public class IndexServlet extends HttpServlet {
15.    private static final long serialVersionUID = 1L;
16.    /**
17.     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
18.     */
19.    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
20.        // 解决中文乱码
21.        response.setContentType("text/html;charset = utf-8");
22.        //创建或者获取保存用户信息的session对象
23.        HttpSession session = request.getSession();
24.        User user = (User) session.getAttribute("user");
25.        if(user == null) {
26.            response.getWriter().print("您还没有登录,请<a href = 'servlet_test/login.html'>登录</a>");
27.        }else {
28.            response.getWriter().print("您已登录,欢迎你 " + user.getUsername() + " !");
29.            response.getWriter().print("<a href = '/login/LogoutServlet'>退出</a>");
30.            //创建cookie存放Session的标识号
31.            Cookie cookie = new Cookie("JSESSIONID",session.getId());
32.            cookie.setMaxAge(60*30);
33.            cookie.setPath("/login");
34.            response.addCookie(cookie);
35.        }
36.    }
37.
38.    /**
39.     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
40.     */
41.    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
42.        // TODO Auto-generated method stub
43.        doGet(request, response);
44.    }
45.
46.}

LoginServlet.java

1.package login;
2.
3.import java.io.IOException;
4.import java.io.PrintWriter;
5.
6.import javax.servlet.ServletException;
7.import javax.servlet.http.HttpServlet;
8.import javax.servlet.http.HttpServletRequest;
9.import javax.servlet.http.HttpServletResponse;
10.
11./**
12. * Servlet implementation class LoginServlet
13. */
14.public class LoginServlet extends HttpServlet {
15.    private static final long serialVersionUID = 1L;
16.    /**
17.     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
18.     */
19.    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
20.        // TODO Auto-generated method stub
21.        response.setContentType("text/html;charset = utf-8");
22.        String username = request.getParameter("username");
23.        String PSW = request.getParameter("PSW");
24.        PrintWriter pw = response.getWriter();
25.        //假设正确的用户名是JWH 密码是123 (这一段之后可以连接数据库扫描用户)
26.        if(("JWH").equals(username) && ("123").equals(PSW)) {
27.            User user = new User();
28.            user.setUsername(username);
29.            user.setPSW(PSW);
30.            request.getSession().setAttribute("user", user);
31.            response.sendRedirect("/login/IndexServlet");
32.        }else {
33.            pw.write("用户名或密码错误,登录失败");
34.        }
35.    }
36.
37.    /**
38.     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
39.     */
40.    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
41.        // TODO Auto-generated method stub
42.        doGet(request, response);
43.    }
44.
45.}

LogoutServlet.java

1.package login;
2.
3.import java.io.IOException;
4.import javax.servlet.ServletException;
5.import javax.servlet.http.HttpServlet;
6.import javax.servlet.http.HttpServletRequest;
7.import javax.servlet.http.HttpServletResponse;
8.
9./**
10. * Servlet implementation class LogoutServlet
11. */
12.public class LogoutServlet extends HttpServlet {
13.    private static final long serialVersionUID = 1L;
14.    /**
15.     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
16.     */
17.    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
18.        // 将session对象中的user对象移除
19.        request.getSession().removeAttribute("user");
20.        response.sendRedirect("/login/IndexServlet");
21.    }
22.
23.    /**
24.     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
25.     */
26.    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
27.        // TODO Auto-generated method stub
28.        doGet(request, response);
29.    }
30.
31.}

Login.html

1.<!DOCTYPE html>
2.<html>
3.<head>
4.<meta charset="UTF-8">
5.<title>login</title>
6.</head>
7.<body>
8.    <!-- form的action属性:必需的 action 属性规定当提交表单时,向何处发送表单数据 -->
9.    <form name="reg" action="login.LoginServlet" method="post">
10.        用户名:<input name = "username" type = "text" /><br />
11.        密码:<input name = "PSW" type = "password" /><br />
12.            <input type = "submit" value = "提交" id = "bt" />
13.    </form>
14.</body>
15.</html>

五. 实验结果(截图)
此处对上述所有实验内容最终呈现的网页或操作界面进行截图展示
1.购物车实现:




2.实现用户登录


六.心得与体会(不少于100字)

  1. 找到了在word里插入好看的代码的方法:highlight不管用我秃了,好像highlight只能导出来HTML然后再粘贴。我直接用PlanetB网站一键生成代码,舒服多了。

  2. Session和Cookie的区别:
    1). cookie数据存放在客户的浏览器上,session数据放在服务器上。
    2). cookie主要用于登录网站:今天输入用户名密码登录了,第二天也可以直接打开。
    3). 而session主要是购物车:服务器端需要用session储存一些信息来判别。
    可以考虑将登陆信息等重要信息存放为session,其他信息如果需要保留,可以放在cookie中。

    有关session的使用方法https://www.cnblogs.com/xdp-gacl/p/3855702.html

  3. 之前跟着视频做完一直都不知道为什么我那个点击购买的链接做不出来,后来跟着书改完代码发现可以做出来:
    把ListBookServlet.java里那个url去掉<a href></a>标签,放到out.Print里直接用”<a href = ‘”+url+”’>点击购买</a>。

  4. 关于点击购买后404页面的问题:ListBookServlet.java里的Url填错了我吐了。

  5. 关于购买第二本书的时候页面不显示cookie出错的问题:
    PurchaseServlet.java里的if(cart==null)的 } 缺失,导致首次创建完session后没有后续指令。(相当于只有if没有else)

  6. 关于login页面点击提交用户名密码后404,且登录IndexServlet可以正常跳转到login的问题(未解决):
    ★ 猜测1:login.html的action有问题,不知道post到哪了。检测action的url可以正常连接到LoginServlet.java
    解决1:尝试更改form的method,get、post、删除都试过了没用。
    ★ 猜测2:绝壁是LoginServlet出问题了!不能正常检测和链接到IndexServlet
    解决2:逐字逐句的对着书看了一遍,没有错误(疯狂挠头)。response的重定向链接也可以正常跳转。不懂为什么

WEB应用开发设计实验报告四相关推荐

  1. WEB应用开发设计实验报告一

    课程名称 WEB应用开发设计 姓 名 玖十柒97 一.实验课题 Servlet的应用 二. 实验目的 1.使用Eclipse开发Servlet. 2.实现Servlet虚拟路径的映射. 三. 实验内容 ...

  2. html表单实验结论,web前端开发技术实验报告-实验五

    1.长 春 大 学 20 15 2016学年第 二 学期Web前端开发技术 课程实 验 报 告学 院: 计算机科学技术专 业: 软件工程 班 级: 软件14402 学 号: 姓 名: 王 悦 任课教师 ...

  3. 实训报告html前端开发,web前端开发技术实验报告 实验三.doc

    web前端开发技术实验报告 实验三.doc (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 11.90 积分  长 春 大 学 20 15 - 20 ...

  4. web前端开发技术实验与实践(第三版)储久良编著 项目12 设计简易网站导航

    web前端开发技术实验与实践(第三版)储久良编著 项目12 设计简易网站导航 实训三  项目12 设计简易网站导航 一.页面文字素材: 序号 网站名称 URL 1 百  度 http://www.ba ...

  5. 模型机设计计算机组成原理报告,计算机组成原理 实验报告四 基本模型机设计与实现...

    计算机组成原理 实验报告四 基本模型机设计与实现 计算机组成原理实验报告学院:计算机科学与信息 专业: 班级:姓名 学号 实验组实验时间 指导教师 成绩实验项目名称 实验四.基本模型机设计与实现实验目 ...

  6. web前端开发技术实验与实践(第三版)储久良编著 项目13 设计新生课程简介

    web前端开发技术实验与实践(第三版)储久良编著 项目13 设计新生课程简介 实训三  项目13  设计新生课程简介 一.页面文字素材: 英语 基础英语.高级英语.报刊选读.视听.口语.英语写作.翻译 ...

  7. web前端开发技术实验与实践(第三版)储久良编著 项目16 div+CSS页面布局设计

    web前端开发技术实验与实践(第三版)储久良编著 项目16 实训五 项目16 一.页面文字素材: 这是头部信息区. 这是导航信息区. 这是主题信息区. 这是右侧信息区. 这是版权信息区. 二.代码: ...

  8. java课程设计实验报告_javaweb课程设计实验报告

    javaweb课程设计实验报告 1 湖南科技大学计算机科学与工程学院 WEB 编程课程设计报告 题目: 网上购物商店 学 号:1111111111 姓 名: 1 指导老师: 1 完成时间: 11111 ...

  9. html基础实验的实验原理,html网页设计实验报告.doc

    html网页设计实验报告.doc 学 生 实 验 报 告实 验 课 名 称 web 应 用 开 发 技 术实 验 项 目 名 称 静 态 网 页 制 作专 业 名 称计算机科学与技术班 级学 号 学 ...

最新文章

  1. Java对象序列化详解6,Java对象的序列化与反序列化详解
  2. ADO.NET的记忆碎片(二)
  3. java中insert函数
  4. ie打开完成,网页显示空白
  5. mysql如何植入到oracle_MySQL产品的生命周期
  6. 成功的CMMI过程定义
  7. LVM: Logical Volume Manager 逻辑卷管理
  8. 前端实现动画的6种方式详解
  9. 【编辑器】用CodeRunner打造VScode的C++开发环境
  10. 浅谈MySQL索引背后的数据结构及算法
  11. linux 0.11 内核学习 -- bootsect.s, 万里长征第一步
  12. 安卓app开发-02-安卓app快速开发
  13. python_55_局部和全局变量
  14. 一些常见的js问题总结
  15. 程序化炒股软件有哪些?
  16. jrtplib 编译安装配置
  17. 搭建个人gitlab服务器
  18. amCharts之柱形图
  19. 解决IE浏览器无法删除证书的问题
  20. 根据身高体重计算BMI指数 - scala

热门文章

  1. Vue 使用 yarn 报错
  2. MySQL聚簇索引和非聚簇索引的原理及使用
  3. OpenGl学习之glRotate函数
  4. Spark分布式计算框架之SparkStreaming+kafka
  5. python 调用Multipart类型接口上传文件和下载文件
  6. 德声科技代理M-Live音视频播放器
  7. PageAdmin Cms如何实现信息的定时发布
  8. 一日一技:极其简单,用Python写前端
  9. java使用三目运算符来判断成绩
  10. AngularJs实现增加订单、批量发货