JavaWeb程序设计《实训二(会话及会话技术)第五章》

目录

一、IDEA中打开实训所需项目(chapter05)

(1)学习通下载部分源代码(需修改)

(2)在IDEA中打开该项目

二、配置实训项目(chapter05)的所需环境

(1)Java环境变量(选择合适的JDK版本)

(2)Tomcat的安装与启动、调整项目(chapter05)的Tomcat配置

(3)不用手动导入servlet-api.jar包,项目(chapter05)中已经导入

三、开始修改和填写src目录下代码

第一个类:LastAccessServlet.java。按照书本P104~P105添加即可。

第二个类:ListCakeServlet.java。按照书本P110添加即可。

第三个类:PurchaseServlet.java。按照书本P110~P111添加即可。

第四个类:CartServlet.java。按照书本P111添加即可。

第五个类:IndexServlet.java。按照书本P113添加即可。

第六个类:LogoutServlet.java。按照书本P114添加即可。

最后一个修改登录界面:login.html。按照书本P115添加即可。

四、最后对应实训要求,所需的各个截图(请勿直接复制拿去提交!)

使用IDEA旗舰版(2024)完成

一、IDEA中打开实训所需项目(chapter05)

(1)学习通下载部分源代码(需修改)

(第五章——>拿到项目"chapter05")

(2)在IDEA中打开该项目

二、配置实训项目(chapter05)的所需环境

(1)Java环境变量(选择合适的JDK版本)
  • 检查自己的Java的jdk安装的版本(win+R),输入cmd,输入"java -version"。为了和tomcat版本相配,我把自己的JDK17更改成JDK1.8版本的。

  • 具体详细的配置JAVA_HOME可以去看我之前写的博客,有详细介绍!

Maven下载安装、环境配置(超详细)(包括Windows、IDEA)_maven下载安装配置-CSDN博客文章浏览阅读5.5k次,点赞42次,收藏75次。这篇博客主要是记录了如何下载安装Maven ,并且如何在本机Windows配置环境变量。其次写到了如何在IDEA中配置Maven,最后在博客中还讲到了如何配置Java的环境变量......_maven下载安装配置https://blog.csdn.net/m0_74363339/article/details/139768830

(2)Tomcat的安装与启动、调整项目(chapter05)的Tomcat配置
  • 首先去资料找到对应的Tomcat下载版本(这里采用Tomcat8.5版本),然后解压,记住文件的位置(一般放到D盘)。

  • 打开该目录,可以看到它其中的目录结构。

  • 打开bin目录,找到startup.bat,双击它。它就是启动Tomcat的脚本文件。

  • Tomcat服务器启动后,就可以去浏览器地址栏访问:"http://localhost:8080",去访问Tomcat服务器,若显示如下图所示,就表示安装成功了!!(不是https!!!)
  • 若出现问题,可以去检查一下Java的jdk环境配置或者查看是否tomcat启动时默认端口号8080被系统占用,若被占用,可以去其安装目录下查看conf文件,用记事本编辑,修改其启动时的默认端口号变成(0~65535中的一个)(可以看书P56页)

  • 现在打开之前已经在IDEA打开的项目(chapter05),调整该项目原来的Tomcat配置的位置路径,修改成上面安装的Tomcat8.5版本的安装路径。




(3)不用手动导入servlet-api.jar包,项目(chapter05)中已经导入
  • 可以看到:web目录——>WEB-INF——>lib——>servlet.api.jar。这里项目的src爆红是因为你虽然

三、开始修改和填写src目录下代码

  • 第一个类:LastAccessServlet.java。按照书本P104~P105添加即可。

import java.io.IOException;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
//注意注解
@WebServlet(name = "LastAccessServlet",urlPatterns = "/LastAccessServlet")
public class LastAccessServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
            throws ServletException,IOException {
        //指定服务器输出内容的编码方式UTF-8,防止发生乱码
        response.setContentType("text/html;charset=utf-8");
        //获取所有cookie
        Cookie[] cookies = request.getCookies();
        //定义flag的boolean变量,用于判断cookies是否为空
        boolean flag = false;
        //遍历cookie数组
        if (cookies.length > 0 && cookies != null) {
            for (Cookie cookie : cookies) {
                //获取cookie的名称
                String name = cookie.getName();
                //判断名称是否有lastTime
                if ("lastTime".equals(name)) {
                    //该cookie不是第一次访问
                    flag = true;
                    //响应数据
                    //获取cookie的value时间
                    String value = cookie.getValue();
                    System.out.println("解码前:" + value);
                    //URL解码
                    value = URLDecoder.decode(value, "utf-8");
                    System.out.println("解码后:" + value);
                    response.getWriter().write("欢迎回来,您上次访问时间" + "为:" + value);

                    //设置cookie的value
                    //获取当前时间的字符串,重写设置cookie的值,发送给cookie
                    Date date = new Date();
                    SimpleDateFormat timesdf = new SimpleDateFormat("yyyy年MM" + "月dd日 HH:mm:ss");

                    String str_time = timesdf.format(date);
                    System.out.println("编码前:" + str_time);
                    //URL编码
                    str_time = URLEncoder.encode(str_time, "utf-8");
                    System.out.println("编码后:" + str_time);
                    cookie.setValue(str_time);
                    //设置cookie存活时间
                    cookie.setMaxAge(60 * 60 * 24 * 30); //一个月
                    //加入当前cookie请求时间
                    response.addCookie(cookie);
                    break;
                }
            }
            //如果cookies中没有时间,也就是没有访问过
            if( cookies==null || cookies.length==0 || flag == false){
                //设置cookie的value
                //获取当前时间的字符串;重写设置cookie的值,重新发送cookie
                Date date = new Date();
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日"+"HH:mm:ss");
                String str_date = sdf.format(date);
                System.out.println("编码前:" + str_date);
                //URL编码
                str_date=URLEncoder.encode(str_date, "utf-8");
                System.out.println("编码后:" + str_date);
                Cookie cookie = new Cookie("lastTime", str_date);
                //设置cookie存活时间
                cookie.setMaxAge(60 * 60 * 24 * 30);//一个月
                response.addCookie(cookie);
                response.getWriter().write("您好,欢迎您首次访问");
            }
        }
    }

    public void doPost(HttpServletRequest request,HttpServletResponse
        response)throws ServletException,IOException{
        this.doPost(request,response);
   }


}
  • 第二个类:ListCakeServlet.java。按照书本P110添加即可。

package cn.itcast.session.servlet;
import cn.itcast.session.entity.Cake;
import cn.itcast.session.entity.CakeDB;
import java.io.*;
import java.util.Collection;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
@WebServlet(name = "ListCakeServlet",urlPatterns="/ListCakeServlet")
public class ListCakeServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter out = resp.getWriter();
        Collection<Cake> cakes = CakeDB.getAll();
        out.write("本站提供的蛋糕有:<br>");
        for (Cake cake : cakes) {
            String url = "PurchaseServlet?id=" + cake.getId();
            out.write(cake.getName() + "<a href='" + url + "'>点击购买</a><br>");
        }
    }
}
  • 第三个类:PurchaseServlet.java。按照书本P110~P111添加即可。
package cn.itcast.session.servlet;
import cn.itcast.session.entity.Cake;
import cn.itcast.session.entity.CakeDB;
import java.io.IOException;
import java.util.*;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
@WebServlet(name = "PurchaseServlet",urlPatterns="/PurchaseServlet")
public class PurchaseServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        // 获得用户购买的商品
        String id = req.getParameter("id");
        if (id == null) {
            //如果id为null,重定向到ListCakeServlet页面
            String url = "ListCakeServlet";
            resp.sendRedirect(url);
            return;
        }
        Cake cake = CakeDB.getCake(id);
        // 创建或者获得用户的Session对象
        HttpSession session = req.getSession();
        //从Session对象中获得用户的购物车
        List<Cake> cart = (List) session.getAttribute("cart");
        if (cart == null) {
            // 首次购买,为用户创建一个购物车(List集合模拟购物车)
            cart = new ArrayList<Cake>();
            // 将购物城存入Session对象
            session.setAttribute("cart", cart);
        }
        // 将商品放入购物车
        cart.add(cake);
        // 创建Cookie存放Session的标识号
        Cookie cookie = new Cookie("JSESSIONID", session.getId());
        cookie.setMaxAge(60 * 30);
        cookie.setPath("/Servlet");
        resp.addCookie(cookie);
        // 重定向到购物车页面
        String url = "CartServlet";
        resp.sendRedirect(url);
    }
        
}
  • 第四个类:CartServlet.java。按照书本P111添加即可。

package cn.itcast.session.servlet;
import cn.itcast.session.entity.Cake;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
@WebServlet(name = "CartServlet",urlPatterns="/CartServlet")
public class CartServlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter out = resp.getWriter();
        //变量cart引用用户的购物车
        List<Cake> cart = null;
        //变量purFlag标记用户是否买过商品
        boolean purFlag =true;
        //获取用户的session
        HttpSession session = req.getSession(false);
        //如果session为null,则purFlag置为false
        if(session == null){
            purFlag = false;
        }else {
            //获取用户购物车
            cart = (List) session.getAttribute("cart");
            //如果用的购物车为null,则purFlag置为false
            if(cart == null){
                purFlag = false;
            }
        }
        /*
        * 如果purFlag为false,表明用户没有购买蛋糕,则重定向到ListServlet页面
        * */
        if(!purFlag){
            out.write("对不起!您还没有购买任何商品!<br>");
        }else {
            //否则显示用户购买蛋糕的信息
            out.write("您购买的当有:<br>");
            double price = 0;
            for(Cake cake : cart){
                out.write(cake.getName()+"<br>");
            }
        }
    }
}
  • 第五个类:IndexServlet.java。按照书本P113添加即可。

package cn.itcast.session.servlet;
import cn.itcast.session.entity.User;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
@WebServlet(name = "IndexServlet",urlPatterns="/IndexServlet")
public class IndexServlet extends HttpServlet {
    public void doGet(HttpServletRequest request,HttpServletResponse response)
            throws ServletException, IOException {
        // 解决乱码问题
       response.setContentType("text/html;charset=utf-8");
        // 创建或者获取保存用户信息的Session对象
        HttpSession session = request.getSession();
        User user = (User) session.getAttribute("user");
        if (user == null) {
            response.getWriter().print("您还没有登录,情<a href='/chapter05/login.html'>登录</a>");
        } else {
            response.getWriter().print("您已登录,欢迎你," + user.getUsername() + "!");
            response.getWriter().print(
                    "<a href='/chapter05/LogoutServlet'>退出</a>");
            // 创建Cookie存放Session的标识号
            Cookie cookie = new Cookie("JSESSIONID", session.getId());
            cookie.setMaxAge(60*30);
            cookie.setPath("/chapter05");
            response.addCookie(cookie);
        }
    }
    public void doPost(HttpServletRequest request,
                       HttpServletResponse response)
            throws ServletException, IOException {
        doGet(request, response);
    }
}
  • 第六个类:LogoutServlet.java。按照书本P114添加即可。

package cn.itcast.session.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
@WebServlet(name = "LogoutServlet",urlPatterns="/LogoutServlet")
public class LogoutServlet extends HttpServlet {
    public void doGet(HttpServletRequest request,
                      HttpServletResponse response)
            throws ServletException, IOException {
        // 将Session对象中的User对象移除
        request.getSession().removeAttribute("user");
        response.sendRedirect("/chapter05/IndexServlet");
    }
    public void doPost(HttpServletRequest request,
                       HttpServletResponse response)throws ServletException, IOException {
        doGet(request, response);
    }
}
  • 最后一个修改登录界面:login.html。按照书本P115添加即可。

<html>
<head>
    <meta charset="UTF-8">
    <meta http-equiv="Content-Type" content="text/html">
    <title>Title</title>
</head>
<body>
<form name="reg" action="http://localhost:8080/chapter05/LoginServlet"
      method="post">
    用户名:<input name="username" type="text"/><br/>
    密码:<input name="password" type="password"/><br/>
    <input type="submit" value="提交" id="bt"/>
</form>
</body>
</html>

四、最后对应实训要求,所需的各个截图(请勿直接复制拿去提交!

(1)访问地址:http://localhost:8080/chapter05/LastAccessServlet

(2)第二次访问该地址

(3)访问http://localhost:8080/chapter05/ListCakeServlet

(4)点击购买A类蛋糕

(5)访问http://localhost:8080/chapter05/login.html

(6)输入正确的账号和密码(itcast,123)

(7)退出登录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

岁岁岁平安

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值