Servlet中cookies例子

本文介绍了一个基于Servlet的应用示例,通过两个Servlet实现了一种简单的会员开卡及消费流程。用户可以在网页上申请开卡并进行点餐消费,整个过程中使用Cookies来保存用户的开卡信息和消费状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Servlet中cookies例子

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>办卡页面</title>
    <script type="application/javascript">
​
        function addParamaters() {
            //参数中加时间戳或随机数,防止浏览器缓存GET请求
            // document.getElementById("times").value = new Date().valueOf();
            //返回 1 到 100 之间的随机数
            document.getElementById("times").value = Math.floor((Math.random() * 100) + 1);
​
        }
    </script>
</head>
<body onload="addParamaters();">
<center>
    <font style="color:red;font-size: 40px;">新会员申请开卡</font>
    <form action="/myWeb/one">
    <table border="1">
        <tr>
            <td>用户名</td>
            <td><input type="text" name="userName"/></td>
        </tr>
        <tr>
            <td>预存金额</td>
            <td><input type="text" name="money"/><input type="hidden" id="times" name="times" value=""/></td>
        </tr>
        <tr>
            <td><input type="submit" value="申请开卡"/></td>
            <td><input type="reset" /></td>
        </tr>
    </table>
    </form>
</center>
</body>
</html>

OneServlet.java

public class OneServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("OneServlet start running...");
        String userName,money;
        //1.调用请求对象读取【请求头】参数信息
        userName = request.getParameter("userName");
        money = request.getParameter("money");
        //2.开卡
        Cookie card1 = new Cookie("userName",userName);
        Cookie card2 = new Cookie("money",money);
        //3.设置cookie存储在硬盘1分钟,不受浏览器关闭影响
        card1.setMaxAge(60);
        //4.发卡,将Cookie写入到响应头交给浏览器
        response.addCookie(card1);
        response.addCookie(card2);
        //5.响应头中设置浏览器不缓存GET请求(max-age=0 缓存0s,no-store也可以)
//        response.setHeader( "Cache-Control" , "max-age=0");
//        response.setHeader( "Cache-Control" , "no-store");
        //6.通知浏览器将【点餐页面】内容写入到响应体交给浏览器(请求转发)
        request.getRequestDispatcher("index_2.html").forward(request,response);
        System.out.println("OneServlet over running...");
    }
}

index_2.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>点餐页面</title>
</head>
<body>
<center>
    <font style="color: red;font-size: 40px;">点餐页面</font>
    <form action="/myWeb/two">
       食物类型:<br/>
        <input type="radio" name="food" value="饺子"/>饺子(30元)<br/>
        <input type="radio" name="food" value="面条"/>面条(20元)<br/>
        <input type="radio" name="food" value="盖饭"/>盖饭(15元)<br/>
        <input type="submit" value="划卡消费"/>
    </form>
</center>
</body>
</html>

TwoServlet.java

public class TwoServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
​
        int jzMoney = 30;
        int gfMoney = 15;
        int mtMoney = 20;
​
        String food;
        String userName = null;
        int money = 0;
        int xfMoney = 0;
        int balance = 0;
        Cookie newCard = null;
        Cookie cookieArray[];
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out = response.getWriter();
        //1.读取请求头参数信息,得到用户点餐食物类型
        food = request.getParameter("food");
        //2.读取请求中的cookie
        cookieArray = request.getCookies();
        //3.刷卡消费
        for (Cookie card : cookieArray){
            String key = card.getName();
            String value = card.getValue();
            if("userName".equals(key)){
                userName = value;
            }else{
                money = Integer.parseInt(value);
                if("饺子".equals(food)){
                    if(jzMoney > money){
                        out.print("用户 "+userName + " 余额不足,请充值,当前余额 "+money);
                    }else{
                        newCard = new Cookie("money",(money-jzMoney)+"");
                        xfMoney = jzMoney;
                        balance = money-jzMoney;
                    }
                }else if("面条".equals(food)){
                    if(mtMoney > money){
                        out.print("用户 "+userName + " 余额不足,请充值,当前余额 "+money);
                    }else{
                        newCard = new Cookie("money",(money-mtMoney)+"");
                        xfMoney = mtMoney;
                        balance = money-mtMoney;
                    }
                }else if("盖饭".equals(food)){
                    if(gfMoney > money){
                        out.print("用户 "+userName + " 余额不足,请充值,当前余额 "+money);
                    }else{
                        newCard = new Cookie("money",(money-gfMoney)+"");
                        xfMoney = gfMoney;
                        balance = money-gfMoney;
                    }
                }
            }
​
        }
​
        //4.将会员卡反还给用户(复写Cookie)
        newCard.setMaxAge(60);
        response.addCookie(newCard);
        //5.将消费记录写入到响应体
        out.print("用户 "+userName+" 购买【"+food+"】1份"+" 本次消费 "+xfMoney+" 余额 "+balance);
    }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>OneServlet</servlet-name>
        <servlet-class>controller.OneServlet</servlet-class>
    </servlet>
    <servlet>
        <servlet-name>TwoServlet</servlet-name>
        <servlet-class>controller.TwoServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>TwoServlet</servlet-name>
        <url-pattern>/two</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>OneServlet</servlet-name>
        <url-pattern>/one</url-pattern>
    </servlet-mapping>
</web-app>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值