zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    UVA 254 Towers of Hanoi
    UVA 701 The Archeologists' Dilemma
    UVA 185 Roman Numerals
    UVA 10994 Simple Addition
    UVA 10570 Meeting with Aliens
    UVA 306 Cipher
    UVA 10160 Servicing Stations
    UVA 317 Hexagon
    UVA 10123 No Tipping
    UVA 696 How Many Knights
  • 原文地址:https://www.cnblogs.com/vaer/p/3928748.html
Copyright © 2011-2022 走看看