zoukankan      html  css  js  c++  java
  • 记账本开发记录——第十六天(2020.2.3)

    写在前面:关于昨天的问题,在发完博客后捣鼓了俩小时搞好了。顺带着基本问题也解决了,是因为时区问题,c3p0默认时间为美国时间,而我们的电脑都是中国时间,时区不一致就没法用(咱也不知道为啥),至于数据库存储数据乱码问题,在连接数据库时写好连接的编码,并且在后台写好编码就可将问题解决。可以看到配置可真是个令人上头的玩意...

    今日的学习:今天学习了会话技术Cookie&Session。通过这两个会话技术,可以解决很多业务上的基本问题,如验证码的校验,不同的用户显示不同的界面,如不同人的购物车不同,就可以通过设置session进行实现。

    首先是会话技术的概念:从打开一个浏览器访问某个站点,到关闭这个浏览器的整个过程,称为一次会话。可以看到会话的概念是比较广泛的。在会话技术中有两种:cookie和session,cookie存在于本地,session存在于服务器端,由此便可看出cookie是可以被本浏览器清除的(清理垃圾时候的选项),而session存在于服务端,也就加大了服务端的压力。

    下面是关于cookie的创建和发送的demo:

    package cookie;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * Servlet implementation class SendCookieServlet
     */
    @WebServlet("/Send")
    public class SendCookieServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public SendCookieServlet() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
            //1.创建cookie对象
            Cookie cookie = new Cookie("name", "liuge");
            //1.1 为cookie设置持久化时间-----存放在磁盘上的时间
            cookie.setMaxAge(60*10);//10分钟----时间设置为0代表删除cookie
            //1.2 为cookie设置携带的路径
            //cookie.setPath("/Day16/Send");//访问Send资源时才携带cookie
            //cookie.setPath("/Day16");//访问Day16下的所有资源都携带cookie
            //cookie.setPath("/");//访问目前tomcat下的所有的资源都携带cookie
            //2.将cookie中存储的信息发送到客户端——头
            response.addCookie(cookie);
            
            
        }
    
        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            doGet(request, response);
        }
    
    }

    得到cookie的demo:

    package cookie;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * Servlet implementation class GetCookieServlet
     */
    @WebServlet("/GetCookieServlet")
    public class GetCookieServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public GetCookieServlet() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
            //获得客户端携带的cookie数据
            Cookie[] cookies = request.getCookies();
            //通过cookie的名称获得想要的cookie
            for(Cookie cookie:cookies) {
                //获得cookie的名称
                String cookiename = cookie.getName();
                if(cookie!=null) {
                   if(cookiename.equals("name")) {
                    //获得该cookie的值
                    String cookieValue = cookie.getValue();
                    System.out.println(cookieValue);
                }
                }
            }
        }
    
        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            doGet(request, response);
        }
    
    }

    根据cookie的特性,做了一个显示上回访问时间的demo:

    package lastaccesstime;
    
    import java.io.IOException;
    import java.util.Date;
    import java.text.SimpleDateFormat;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.Cookie;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import com.mysql.fabric.xmlrpc.base.Data;
    
    /**
     * Servlet implementation class LastAccessTimeServlet
     */
    @WebServlet("/LastAccessTime")
    public class LastAccessTimeServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public LastAccessTimeServlet() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            //获得当前时间
            Date date =new Date();
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd-hh:mm:ss");
            String currentTime = format.format(date);
            //1.创建cookie 记录当前的最新的访问时间
            Cookie cookie = new Cookie("lastAccessTime",currentTime);
            cookie.setMaxAge(60*10*500);
            response.addCookie(cookie);
            //2.获得客户端携带的cookie ----lastAccessTime
            String lastAccessTime = null;
            Cookie[] cookies = request.getCookies();
            if(cookies!=null) {
                for(Cookie coo:cookies) {
                    if("lastAccessTime".equals(coo.getName())) {
                        lastAccessTime = coo.getValue();
                    }
                }
            }
            response.setContentType("text/html;charset=UTF-8");
            if(lastAccessTime==null) {
                response.getWriter().write("您是第一次访问");
            }
            else {
                response.getWriter().write("您上次访问时间是:"+lastAccessTime);
            }
        }
    
        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            doGet(request, response);
        }
    
    }

    需要注意的是,新版本的tomcat无法存储空格,cookie也无法存储中文。

    之后是关于session的创建和发送demo:

    package session;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    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;
    
    /**
     * Servlet implementation class SessionServlet1
     */
    @WebServlet("/SessionServlet1")
    public class SessionServlet1 extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public SessionServlet1() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
            //创建该客户端(会话)的私有session区域
            /*request.getSession()方法内部会判断该客户端是否在服务器端已经存在session
             * 如果该客户端在此服务器不存在session 那么就会创建一个新的session对象
             * 如果该客户端在服务求已存在session 就会获得已经存在的该session返回
             */
            HttpSession session = request.getSession();
            
            session.setAttribute("name", "tom");
            String id = session.getId();//该session对象的id
            //手动创建一个存储JSESIONID的Cookie 为该cookie设置持久时间
            Cookie cookie = new Cookie("JSESSIONID", id);
            cookie.setPath("/Day16/");
            cookie.setMaxAge(60*10);
            response.addCookie(cookie);
            response.getWriter().write("JSESSIONID:"+id);
        }
        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            doGet(request, response);
        }
    
    }

    以及显示session的demo:

    package session;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    /**
     * Servlet implementation class SessionServlet2
     */
    @WebServlet("/Session2")
    public class SessionServlet2 extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public SessionServlet2() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
            //从session中获得存储的数据
            HttpSession session = request.getSession();
            String attribute = (String) session.getAttribute("name");
            response.getWriter().write(attribute);
        }
    
        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            doGet(request, response);
        }
    
    }

    最后,根据session实现了一个验证码校验功能:

    package login;
    
    import java.io.IOException;
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    /**
     * Servlet implementation class Login
     */
    @WebServlet("/Login")
    public class LoginServlet extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public LoginServlet() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
            //验证码的校验
            //获得页面输入的验证
            request.setCharacterEncoding("UTF-8");
            String checkCode_client = request.getParameter("checkCode");
            //获得生成图片的文字的验证码
            String checkCode_session = (String) request.getSession().getAttribute("checkcode_session");
            //将二者进行比对
            if(!checkCode_session.equals(checkCode_client)) {
                request.setAttribute("loginInfo", "您的验证码不正确");
                request.getRequestDispatcher("/login.jsp").forward(request, response);
                return;
            }
            
            //获得页面的用户名和密码进行数据库的校验
            //...
        }
    
        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            doGet(request, response);
        }
    
    }

    今日总结:可以看到,通过cookie和session的使用,可以实现一些很简单的业务流程。日后也可在自己的网站中实现。

  • 相关阅读:
    Linux下的CPU使用率与服务器负载的关系与区别
    zabbix修改Template OS Linux模版使已使用内存(Used memory)更准确
    mysql查询时间戳和日期的转换
    python logging模块
    网络编程(TCP)
    网络编程(UDP)
    计算机网络
    IO流(字符流)
    IO流(字节流)
    算法
  • 原文地址:https://www.cnblogs.com/wushenjiang/p/12257753.html
Copyright © 2011-2022 走看看