• Servlet 4 JSP EL Cookie Session 商品浏览记录案例 购物车案例


    JSP
    JSP三种脚本元素
    EL表达式(获取域中的数据)
    Cookie
    记录最新访问时间,获得cookie中上次访问时间,显示浏览器页面上
    商品浏览记录案例
    Session
    验证码登录案例
    购物车案例
    持久Session案例(Session的JSESSIONID保存到Cookie中)
    ------------------------------------------------------------------
    在做练习的时候:
    有些字段是不能小写的,例如:JSESSIONID.
    输出HTML标签时,<a>标签少打了个 ' 导致页面无显示内容,但源码中有内容

    JSP

    <%@ 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>
    </head>
    <body>
    <h1>Hello JSP</h1>
    <%=new java.util.Date().toLocaleString() %>
    </body>
    </html>

    JSP三种脚本元素

    <%@ 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>
    </head>
    <body>
    <h1>学习JSP三种脚本元素</h1>
    <!--  JSP 声明脚本, 会被翻译为 Servlet成员变量、方法 -->
    <%!
       int a = 10;
       class A {
           // 内部类
       }
    %>
    
    <!-- JSP 脚本表达式 ,输出HTML源代码 , 不能以 ;结尾 -->
    <%="aaa"+"bbb" %>
    <%="<h1>Hello</h1>" %>
    
    <!-- JSP脚本代码中 嵌入任意java代码 -->
    <%
        for(int i =0 ;i <10 ;i++){
            // 输出i 到浏览器 
            out.print(i);
        }
    %>
    </body>
    </html>
    <%@ 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>
    </head>
    <body>
    <%
        // 可以嵌入任意java代码, 由多个 % 共同组成一段java代码, 脚本片段可以断开
        for(int i = 0;i < 10 ;i++){
    %>
        <h1>两个脚本片段中间可以编写HTML代码</h1>
    <%        
        }
    %>
    </body>
    </html>

    EL表达式(获取域中的数据)

    <%@ 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>
    </head>
    <body>
    <!-- ServletContext 允许将一个数据保存到ServletContext ,这个数据全局数据,可以被多个Servlet共享 -->
    <!-- HttpServletRequest 允许将一个数据 保存 request对象中,通过请求转发,将数据传递另一个Servlet  -->
    
    <%
        // 将数据 保存ServletContext中
        getServletContext().setAttribute("name","传智播客");
        
        
        // 将数据 保存request中
        request.setAttribute("address","北京");
    %>
    
    <!-- 取出上面保存两个值,输出浏览器端 -->
    <%=getServletContext().getAttribute("name") %>
    <%=request.getAttribute("address") %>
    
    <!-- 通过EL表达式 取出 name和address的值 -->
    ${ applicationScope.name}
    ${requestScope.address }
    
    <hr/>
    
    <!-- 访问一个不存在的属性 -->
    传统%方式 : <%=request.getAttribute("city") %> <br/>
    EL方式: ${requestScope.city } <br/>
    </body>
    </html>

    Cookie
    记录最新访问时间,获得cookie中上次访问时间,显示浏览器页面上

    package cn.itcast.cookie;
    
    import java.io.IOException;
    import java.util.Date;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * 记录最新访问时间,获得cookie中上次访问时间,显示浏览器页面上
     * 
     * @author seawind
     * 
     */
    public class VisitServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 判断是否存在cookie 信息
            Cookie[] cookies = request.getCookies(); // 获得所有cookie信息
            // 在cookies 数组中查找指定名称cookie
            Cookie lastVisitCookie = findCookie(cookies, "lastvisit");
            if (lastVisitCookie == null) {
                // 不存在上次访问时间
                response.setContentType("text/html;charset=utf-8");
                response.getWriter().println("欢迎第一次访问XXX网站!");
            } else {
                // 存在上次访问时间
                long lastvisittimes = Long.parseLong(lastVisitCookie.getValue()); // 假设保存时间是毫秒
                response.setContentType("text/html;charset=utf-8");
                response.getWriter().println(
                        "您上次的访问时间是:" + new Date(lastvisittimes).toLocaleString());
            }
    
            // 向客户端写回最新访问时间
            Cookie newLastVisitCookie = new Cookie("lastvisit", System
                    .currentTimeMillis()
                    + "");
            newLastVisitCookie.setMaxAge(60 * 60);// 保存cookie 1小时
            newLastVisitCookie.setPath("/");
            response.addCookie(newLastVisitCookie);
        }
    
        // Cookie格式========== Cookie: name=value,name=value,name=value
        // 客户端对于同一个网站会存在很多个cookie
        private Cookie findCookie(Cookie[] cookies, String name) {
            if (cookies == null) {
                // 不存在任何cookie
                return null;
            } else {
                // 存在cookie,查找指定cookie
                for (Cookie cookie : cookies) {
                    if (cookie.getName().equals(name)) {
                        // 找到了
                        return cookie;
                    }
                }
    
                // 没有找到
                return null;
            }
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    
    }

    商品浏览记录案例

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@page import="cn.itcast.utils.CookieUtils"%>
    <!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>
    </head>
    <body>
    <!-- 商品列表 -->
    <h1>商品列表</h1>
    <a href="/day7/show?id=1">Java编程大全</a>
    <a href="/day7/show?id=2">MYSQL秘笈</a>
    <a href="/day7/show?id=3">设计模式入门</a>
    <a href="/day7/show?id=4">数据结构和算法</a>
    <a href="/day7/show?id=5">软件工程</a>
    <a href="/day7/show?id=6">面向对象程序设计</a>
    
    <!-- 浏览记录 -->
    <h1>浏览记录</h1>
    <h2><a href="/day7/clear">清空记录</a></h2>
    <%
        // 获得history对应商品编号
        Cookie historyCookie = CookieUtils.findCookie(request.getCookies(),"history");
        if(historyCookie == null){
            // 没有浏览记录
            out.println("<h2>无任何商品浏览记录!</h2>");
        }else{
            // 有浏览记录
            String value = historyCookie.getValue();
            String[] ids = value.split(",");
            String[] names = {"Java编程大全","MYSQL秘笈","设计模式入门","数据结构和算法","软件工程","面向对象程序设计"};
            for(String id : ids){
                out.println(names[Integer.parseInt(id)-1]+"<br/>");
            }
        }
    %>
    </body>
    </html>
    package cn.itcast.cookie;
    
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import cn.itcast.utils.CookieUtils;
    
    /**
     * 查看商品信息,将浏览记录 保存到cookie 中
     * 
     * @author seawind
     * 
     */
    public class ShowProductServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 从请求参数中 获得商品 id
            String id = request.getParameter("id");
            // 获得history 对应cookie信息
            Cookie historyCookie = CookieUtils.findCookie(request.getCookies(),
                    "history");
    
            // 判断historyCookie是否存在
            if (historyCookie == null) {
                // 不存在,这是浏览的第一个商品
                Cookie cookie = new Cookie("history", id);
                cookie.setMaxAge(60 * 60 * 24 * 14);// 两个星期
                cookie.setPath("/");
                response.addCookie(cookie);
            } else {
                // 商品浏览记录已经存在
                // 判断该商品是否已经在浏览记录中,如果在
                String value = historyCookie.getValue();
                String[] ids = value.split(",");
                if (!checkExist(ids, id)) {
                    // 7,8 +,+ 3
                    Cookie cookie = new Cookie("history", value + "," + id);
                    cookie.setMaxAge(60 * 60 * 24 * 14);// 两个星期
                    cookie.setPath("/");
                    response.addCookie(cookie);
                }
            }
    
            response.setContentType("text/html;charset=utf-8");
            response.getWriter().println(
                    "商品浏览成功!<a href='/day7/cookie/product.jsp'>返回 </a>");
        }
    
        // 判断商品编号 是否已经存在 浏览记录中
        private boolean checkExist(String[] ids, String id) {
            for (String eachId : ids) {
                if (eachId.equals(id)) {
                    // id已经存在
                    return true;
                }
            }
            return false;
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    
    }
    package cn.itcast.cookie;
    
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * 删除 history 持久cookie
     * 
     * @author seawind
     * 
     */
    public class ClearServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            Cookie cookie = new Cookie("history", "");
            cookie.setMaxAge(0);
            cookie.setPath("/");
    
            response.addCookie(cookie);
    
            response.sendRedirect("/day7/cookie/product.jsp");
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    
    }
    package cn.itcast.utils;
    
    import javax.servlet.http.Cookie;
    
    public class CookieUtils {
        // 根据name 查找指定cookie
        public static Cookie findCookie(Cookie[] cookies, String name) {
            if (cookies == null) {
                // 不存在任何cookie
                return null;
            } else {
                // 存在cookie,查找指定cookie
                for (Cookie cookie : cookies) {
                    if (cookie.getName().equals(name)) {
                        // 找到了
                        return cookie;
                    }
                }
    
                // 没有找到
                return null;
            }
        }
    }

    Session
    验证码登录案例

    <%@ 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>
    </head>
    <body>
    <h1>登陆后 欢迎页面</h1>
    <%
        String username = (String)request.getSession().getAttribute("username");
        if(username == null){
            // 未登陆
            out.println("您还未登陆,<a href='/day7/session/login.jsp'>去登陆</a>");
        }else{
            // 已经登陆
            out.println("欢迎您,"+username);
        }
    %>
    </body>
    </html>
    <%@ 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">
        function change(){
            document.getElementById("myimg").src = "/day7/checkimg?"+new Date().getTime();
        }
    </script>
    </head>
    <body>
    <h1>登陆页面</h1>
    <h2 style="color:red;">${requestScope.msg }</h2>
    <form action="/day7/login" method="post">
        <table>
            <tr>
                <td>用户名</td>
                <td><input type="text" name="username" /></td>
            </tr>
            <tr>
                <td>密码</td>
                <td><input type="password" name="password"/> </td>
            </tr>
            <tr>
                <td>验证码</td>
                <td><input type="text" name="checkcode" /> <img src="/day7/checkimg" onclick="change();" id="myimg" style="cursor: pointer;"/></td>
            </tr>
            <tr>
                <td colspan="2"><input type="submit" value="登陆" /></td>
            </tr>
        </table>
    </form>
    </body>
    </html>
    package cn.itcast.session;
    
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * 进行登陆操作
     * 
     * @author seawind
     * 
     */
    public class LoginServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 获得用户名、密码和 验证码
            request.setCharacterEncoding("utf-8");
            String username = request.getParameter("username");
            String password = request.getParameter("password");
            String checkcode = request.getParameter("checkcode");
    
            // 判断验证码是否正确
            String checkcode_session = (String) request.getSession().getAttribute(
                    "checkcode_session");
            request.getSession().removeAttribute("checkcode_session");
            if (checkcode_session == null || !checkcode_session.equals(checkcode)) {
                // 验证码输入错误
                // 重定向跳回 login.jsp 无法携带信息,转发可以
                request.setAttribute("msg", "验证码输入错误!");
                request.getRequestDispatcher("/session/login.jsp").forward(request,
                        response);
                return;
            }
    
            // 判断用户名和密码是否正确 ,假设用户名和密码都是admin/admin
            if ("admin".equals(username) && "admin".equals(password)) {
                // 登陆成功
                // 将登陆信息保存session
                request.getSession().setAttribute("username", username);
                response.sendRedirect("/day7/session/welcome.jsp");
            } else {
                // 登陆失败
                request.setAttribute("msg", "用户名或者密码错误!");
                request.getRequestDispatcher("/session/login.jsp").forward(request,
                        response);
            }
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    
    }
    package cn.itcast.session;
    
    import java.awt.Color;
    import java.awt.Font;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.image.BufferedImage;
    import java.io.IOException;
    import java.util.Random;
    
    import javax.imageio.ImageIO;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * 生成验证码图片
     * 
     * @author seawind
     * 
     */
    public class CheckImgServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 禁止缓存
            // response.setHeader("Cache-Control", "no-cache");
            // response.setHeader("Pragma", "no-cache");
            // response.setDateHeader("Expires", -1);
    
            int width = 120;
            int height = 30;
    
            // 步骤一 绘制一张内存中图片
            BufferedImage bufferedImage = new BufferedImage(width, height,
                    BufferedImage.TYPE_INT_RGB);
    
            // 步骤二 图片绘制背景颜色 ---通过绘图对象
            Graphics graphics = bufferedImage.getGraphics();// 得到画图对象 --- 画笔
            // 绘制任何图形之前 都必须指定一个颜色
            graphics.setColor(getRandColor(200, 250));
            graphics.fillRect(0, 0, width, height);
    
            // 步骤三 绘制边框
            graphics.setColor(Color.WHITE);
            graphics.drawRect(0, 0, width - 1, height - 1);
    
            // 步骤四 四个随机数字
            Graphics2D graphics2d = (Graphics2D) graphics;
            // 设置输出字体
            graphics2d.setFont(new Font("宋体", Font.BOLD, 18));
    
            // String words =
            // "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890";
            String words = "u7684u4e00u4e86u662fu6211u4e0du5728u4ebau4eecu6709u6765u4ed6u8fd9u4e0au7740u4e2au5730u5230u5927u91ccu8bf4u5c31u53bbu5b50u5f97u4e5fu548cu90a3u8981u4e0bu770bu5929u65f6u8fc7u51fau5c0fu4e48u8d77u4f60u90fdu628au597du8fd8u591au6ca1u4e3au53c8u53efu5bb6u5b66u53eau4ee5u4e3bu4f1au6837u5e74u60f3u751fu540cu8001u4e2du5341u4eceu81eau9762u524du5934u9053u5b83u540eu7136u8d70u5f88u50cfu89c1u4e24u7528u5979u56fdu52a8u8fdbu6210u56deu4ec0u8fb9u4f5cu5bf9u5f00u800cu5df1u4e9bu73b0u5c71u6c11u5019u7ecfu53d1u5de5u5411u4e8bu547du7ed9u957fu6c34u51e0u4e49u4e09u58f0u4e8eu9ad8u624bu77e5u7406u773cu5fd7u70b9u5fc3u6218u4e8cu95eeu4f46u8eabu65b9u5b9eu5403u505au53ebu5f53u4f4fu542cu9769u6253u5462u771fu5168u624du56dbu5df2u6240u654cu4e4bu6700u5149u4ea7u60c5u8defu5206u603bu6761u767du8bddu4e1cu5e2du6b21u4eb2u5982u88abu82b1u53e3u653eu513fu5e38u6c14u4e94u7b2cu4f7fu5199u519bu5427u6587u8fd0u518du679cu600eu5b9au8bb8u5febu660eu884cu56e0u522bu98deu5916u6811u7269u6d3bu90e8u95e8u65e0u5f80u8239u671bu65b0u5e26u961fu5148u529bu5b8cu5374u7ad9u4ee3u5458u673au66f4u4e5du60a8u6bcfu98ceu7ea7u8ddfu7b11u554au5b69u4e07u5c11u76f4u610fu591cu6bd4u9636u8fdeu8f66u91cdu4fbfu6597u9a6cu54eau5316u592au6307u53d8u793eu4f3cu58ebu8005u5e72u77f3u6ee1u65e5u51b3u767eu539fu62ffu7fa4u7a76u5404u516du672cu601du89e3u7acbu6cb3u6751u516bu96beu65e9u8bbau5417u6839u5171u8ba9u76f8u7814u4ecau5176u4e66u5750u63a5u5e94u5173u4fe1u89c9u6b65u53cdu5904u8bb0u5c06u5343u627eu4e89u9886u6216u5e08u7ed3u5757u8dd1u8c01u8349u8d8au5b57u52a0u811au7d27u7231u7b49u4e60u9635u6015u6708u9752u534au706bu6cd5u9898u5efau8d76u4f4du5531u6d77u4e03u5973u4efbu4ef6u611fu51c6u5f20u56e2u5c4bu79bbu8272u8138u7247u79d1u5012u775bu5229u4e16u521au4e14u7531u9001u5207u661fu5bfcu665au8868u591fu6574u8ba4u54cdu96eau6d41u672au573au8be5u5e76u5e95u6df1u523bu5e73u4f1fu5fd9u63d0u786eu8fd1u4eaeu8f7bu8bb2u519cu53e4u9ed1u544au754cu62c9u540du5440u571fu6e05u9633u7167u529eu53f2u6539u5386u8f6cu753bu9020u5634u6b64u6cbbu5317u5fc5u670du96e8u7a7fu5185u8bc6u9a8cu4f20u4e1au83dcu722cu7761u5174u5f62u91cfu54b1u89c2u82e6u4f53u4f17u901au51b2u5408u7834u53cbu5ea6u672fu996du516cu65c1u623fu6781u5357u67aau8bfbu6c99u5c81u7ebfu91ceu575au7a7au6536u7b97u81f3u653fu57ceu52b3u843du94b1u7279u56f4u5f1fu80dcu6559u70edu5c55u5305u6b4cu7c7bu6e10u5f3au6570u4e61u547cu6027u97f3u7b54u54e5u9645u65e7u795eu5ea7u7ae0u5e2eu5566u53d7u7cfbu4ee4u8df3u975eu4f55u725bu53d6u5165u5cb8u6562u6389u5ffdu79cdu88c5u9876u6025u6797u505cu606fu53e5u533au8863u822cu62a5u53f6u538bu6162u53d4u80ccu7ec6";
            Random random = new Random();// 生成随机数
    
            // 为了将验证码保存Session
            StringBuffer buffer = new StringBuffer();
    
            // 定义x坐标
            int x = 10;
            for (int i = 0; i < 4; i++) {
                // 随机颜色
                graphics2d.setColor(new Color(20 + random.nextInt(110), 20 + random
                        .nextInt(110), 20 + random.nextInt(110)));
                // 旋转 -30 --- 30度
                int jiaodu = random.nextInt(60) - 30;
                // 换算弧度
                double theta = jiaodu * Math.PI / 180;
    
                // 生成一个随机数字
                int index = random.nextInt(words.length()); // 生成随机数 0 到 length - 1
                // 获得字母数字
                char c = words.charAt(index);
    
                // 将生成汉字 加入buffer
                buffer.append(c);
    
                // 将c 输出到图片
                graphics2d.rotate(theta, x, 20);
                graphics2d.drawString(String.valueOf(c), x, 20);
                graphics2d.rotate(-theta, x, 20);
                x += 30;
            }
    
            // 将验证码内容保存session
            request.getSession().setAttribute("checkcode_session",
                    buffer.toString());
    
            // 步骤五 绘制干扰线
            graphics.setColor(getRandColor(160, 200));
            int x1;
            int x2;
            int y1;
            int y2;
            for (int i = 0; i < 30; i++) {
                x1 = random.nextInt(width);
                x2 = random.nextInt(12);
                y1 = random.nextInt(height);
                y2 = random.nextInt(12);
                graphics.drawLine(x1, y1, x1 + x2, x2 + y2);
            }
    
            // 将上面图片输出到浏览器 ImageIO
            graphics.dispose();// 释放资源
            ImageIO.write(bufferedImage, "jpg", response.getOutputStream());
    
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    
        /**
         * 取其某一范围的color
         * 
         * @param fc
         *            int 范围参数1
         * @param bc
         *            int 范围参数2
         * @return Color
         */
        private Color getRandColor(int fc, int bc) {
            // 取其随机颜色
            Random random = new Random();
            if (fc > 255) {
                fc = 255;
            }
            if (bc > 255) {
                bc = 255;
            }
            int r = fc + random.nextInt(bc - fc);
            int g = fc + random.nextInt(bc - fc);
            int b = fc + random.nextInt(bc - fc);
            return new Color(r, g, b);
        }
    
    }

    购物车案例

    <%@ 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>
    </head>
    <body>
    <!-- 商品列表页面 -->
    <h1>商品列表</h1>
    <h2><a href="/day7/session/cart.jsp">查看购物车</a></h2>
    Java编程大全 <a href="/day7/buy?id=1">购买</a> <br/>
    MySQL秘笈 <a href="/day7/buy?id=2">购买</a> <br/>
    设计模式入门 <a href="/day7/buy?id=3">购买</a> <br/>
    软件工程模式 <a href="/day7/buy?id=4">购买</a> <br/>
    敏捷开发 <a href="/day7/buy?id=5">购买</a> <br/>
    项目管理精要 <a href="/day7/buy?id=6">购买</a> <br/>
    
    </body>
    </html>
    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <%@page import="java.util.Map"%>
    <%@page import="java.util.Set"%>
    <!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>
    </head>
    <body>
    <!-- 显示Session中保存 购物车数据 -->
    <%
        Map<String,Integer> map = (Map<String,Integer>)request.getSession().getAttribute("cart"); 
        if(map == null){
            // 购物车对象不存在
            out.println("<h2>购物车无任何商品信息!</h2>");
        }else{
            // 购物车对象已经存在
            out.println("<h1>商品列表</h1>");
            out.println("<a href='/day7/clearCart'>清空购物车</a><br/>");
            Set<String> keySet = map.keySet();
            for(String productName: keySet){
                int number = map.get(productName);// 购买数量
                out.println("商品名称: " + productName +", 购买数量:" + number + "<br/>");
            }
        }
    %>
    </body>
    </html>
    package cn.itcast.session;
    
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.Map;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    /**
     * 添加商品到购物车
     * 
     * @author seawind
     * 
     */
    public class BuyServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 获得购买商品 id
            String id = request.getParameter("id");
            // 获得id 对应商品名称
            String[] names = { "Java编程入门", "MySQL秘笈", "设计模式入门", "软件工程模式", "敏捷开发",
                    "项目管理精要" };
            String productName = names[Integer.parseInt(id) - 1];
    
            // 判断Session中购物车是否存在
            HttpSession session = request.getSession();
            Map<String, Integer> cart = (Map<String, Integer>) session
                    .getAttribute("cart");
            if (cart == null) {
                // 购物车不存在
                cart = new HashMap<String, Integer>();
            }
    
            // 判断购买商品是否存在于购物车中,商品名称就是map的key
            if (cart.containsKey(productName)) {
                // 商品已经在购物车中
                int number = cart.get(productName);// 取出原来数量
                cart.put(productName, number + 1);// 数量+1 放回购物车
            } else {
                // 商品不在购物车中
                cart.put(productName, 1);// 保存商品到购物车,数量为1
            }
    
            // 将购物车对象保存Session
            session.setAttribute("cart", cart);
    
            // 给用户提示
            response.setContentType("text/html;charset=utf-8");
            response.getWriter().println(
                    "商品已经添加到购物车!<a href='/day7/session/product.jsp'>返回</a>");
    
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    
    }
    package cn.itcast.session;
    
    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;
    
    /**
     * 清空购物车
     * 
     * @author seawind
     * 
     */
    public class ClearCartServlet extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 删除购物车 cart对象
            HttpSession session = request.getSession();
    
            // 删除购物车cart对象
            session.removeAttribute("cart");
    
            // 跳转cart.jsp
            response.sendRedirect("/day7/session/cart.jsp");
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    
    }

    持久Session案例(Session的JSESSIONID保存到Cookie中)

    package cn.itcast.session;
    
    import java.io.IOException;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    /**
     * 第一次访问 创建Session对象,将数据保存到Session中
     * 
     * @author seawind
     * 
     */
    public class SessionServlet1 extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 第一次访问,创建新的Session对象
            HttpSession session = request.getSession();
    
            // 将jsessionid 写到持久cookie中
            Cookie cookie = new Cookie("JSESSIONID", session.getId());
            cookie.setMaxAge(60 * 60 * 24);
            cookie.setPath("/");
            response.addCookie(cookie);
    
            // 保存数据到Session
            session.setAttribute("name", "冰箱");
    
            // 生成链接 --- 使用URL重写
            String url = "/day7/session2";// 拼jsessionid
            url = response.encodeURL(url);
            response.getWriter().println("<a href='" + url + "'>session2</a>");
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    
    }
    package cn.itcast.session;
    
    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;
    
    /**
     * 从Session读取 已经保存信息 显示到浏览器上
     * 
     * @author seawind
     * 
     */
    public class SessionServlet2 extends HttpServlet {
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            // 获得Session对象,因为不是第一次访问,获得之前已经存在Session
            HttpSession session = request.getSession();
    
            // 获得之前保存name数据
            String name = (String) session.getAttribute("name");
    
            // 显示浏览器上
            response.setContentType("text/html;charset=utf-8");
            response.getWriter().println("name:" + name);
        }
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)
                throws ServletException, IOException {
            doGet(request, response);
        }
    
    }

    web.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" 
        xmlns="http://java.sun.com/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
      <servlet>
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>cn.itcast.servlet.HelloServlet</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>VisitServlet</servlet-name>
        <servlet-class>cn.itcast.cookie.VisitServlet</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>ShowProductServlet</servlet-name>
        <servlet-class>cn.itcast.cookie.ShowProductServlet</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>ClearServlet</servlet-name>
        <servlet-class>cn.itcast.cookie.ClearServlet</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>SessionServlet1</servlet-name>
        <servlet-class>cn.itcast.session.SessionServlet1</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>SessionServlet2</servlet-name>
        <servlet-class>cn.itcast.session.SessionServlet2</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>BuyServlet</servlet-name>
        <servlet-class>cn.itcast.session.BuyServlet</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>ClearCartServlet</servlet-name>
        <servlet-class>cn.itcast.session.ClearCartServlet</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>CheckImgServlet</servlet-name>
        <servlet-class>cn.itcast.session.CheckImgServlet</servlet-class>
      </servlet>
      <servlet>
        <servlet-name>LoginServlet</servlet-name>
        <servlet-class>cn.itcast.session.LoginServlet</servlet-class>
      </servlet>
    
    
    
    
    
    
    
    
    
    
      <servlet-mapping>
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>VisitServlet</servlet-name>
        <url-pattern>/visit</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>ShowProductServlet</servlet-name>
        <url-pattern>/show</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>ClearServlet</servlet-name>
        <url-pattern>/clear</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>SessionServlet1</servlet-name>
        <url-pattern>/session1</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>SessionServlet2</servlet-name>
        <url-pattern>/session2</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>BuyServlet</servlet-name>
        <url-pattern>/buy</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>ClearCartServlet</servlet-name>
        <url-pattern>/clearCart</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>CheckImgServlet</servlet-name>
        <url-pattern>/checkimg</url-pattern>
      </servlet-mapping>
      <servlet-mapping>
        <servlet-name>LoginServlet</servlet-name>
        <url-pattern>/login</url-pattern>
      </servlet-mapping>
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>
  • 相关阅读:
    快捷JS PHP
    css userAgent (简易浏览器区分) PHP
    http://fw.qq.com/ipaddress PHP
    JS竖排文字 PHP
    奇怪的body PHP
    使用36进制,无损压缩GUID到26位 PHP
    链接<a>执行JS PHP
    纯JS省市区三级联动 PHP
    Table 样式 PHP
    Exceeded storage allocation. The server response was: 4.3.1 Message size exceeds fixed maximum message size
  • 原文地址:https://www.cnblogs.com/vaer/p/3928748.html
Copyright © 2020-2023  润新知