• JSP(5)—Session的创建以及简单使用


    页面:
    1.案例

    <body>
    
        <!-- 
            把书的信息以Cookie方式传回给浏览器,删除一个Cookie
                1.确定要被删除的Cookie是以ATGUIGU_BOOK_开头的cookie,数量大于或等于5,且若从Books.jsp页面中
            传入的book不在ATGUIGU_BOOK_的cookie中则删除较早的那个cookie(ATGUIGU_BOOK_数组的第一个Cookie)
            若在其中,则删除该Cookie
                2.把从books.jsp传入的book作为一个Cookie返回
         -->
        <h4>Book Detail Page</h4>
        Book:<%=request.getParameter("book") %>
        <br><br>
        <a href="books.jsp">Return</a>
    
        <%
            //步骤2.获取表单数据
            //获取表单提交的参数
            String book = request.getParameter("book");
    
            //步骤3.获取Cookie
            //获取Cookie,初始有一个Cookie:JSESSIONID,它是有Tomcat服务器产生的传到浏览器中,首次访问book.jsp页面
            //传到浏览器存到集合中,再次访问时又有新的Cookie存到集合中,该Cookie会存到集合中的第一位,以此每次获取到Cookie
            //都会放到集合第一位上
            Cookie[] cookies = request.getCookies();
            System.out.println("cookie_size:"+cookies.length);
            System.out.println("cookie_Name:"+cookies[0].getName());
            //步骤4.创建集合变量,以备使用
            //保存所有的以ATGUIGU_BOOK_开头的Cookie
            List<Cookie> bookCookies = new ArrayList<Cookie>();
    
            //步骤5.创建临时Cookie,用于记录要删除的Cookie
            //用来保存和books.jsp传入的book匹配的那个Cookie
            Cookie tempCookie = null;
    
            //步骤6.从浏览器中获取的Cookie,是否不为空,获取长度大于零
            //判断Cookie总是否有cookie
            if(cookies != null && cookies.length > 0){
                //遍历所有的Cookie
                for(Cookie cookie : cookies){
                    String cookieName = cookie.getName();
                    //判断该Cookie是否是以ATGUIGU_BOOK_开头的
                    if(cookieName.startsWith("ATGUIGU_BOOK_")){
    
                        //步骤7.从浏览器中传过来的Cookie中,找到Cookie的Name是以“ATGUIGU_BOOK_”开头的都保存到集合中去
                        //把这些满足条件的cookie放到集合中去
                        bookCookies.add(cookie);
    
                        //步骤8.判断刚刚传进来的表单参数是否和集合中的某一元素相同,是的话就使用tempCookie记录下来
                        if(cookie.getValue().equals(book)){
                            tempCookie = cookie;
                        }
                    }
                }
            }
    
            //步骤9.判断集合中的元素是否超过5个,或者没有重复的表单参数传进来,就把要集合的第一个元素赋给变量tempCookie
            //如果集合中元素超过5个,就删除
            if(bookCookies.size() >= 5 && tempCookie == null){
                tempCookie = bookCookies.get(0);
            }
    
            //步骤10.tempCookie的setMaxAge()方法设置值为0表示,让浏览器删除CookieName为tempCookie的Cookie,并返回浏览器
            //若在其中就删除
            if(tempCookie != null){
                tempCookie.setMaxAge(0);
                response.addCookie(tempCookie);
            }
    
            //步骤11.返回不止一个Cookie,另外创建一个Cookie对象,把获得的表单参数作为CookieValue,返回给浏览器,浏览器执行步骤1.2
            //把books.jsp传入的表单参数book作为一个Cookie返回
            Cookie cookie = new Cookie("ATGUIGU_BOOK_" + book,book);
            response.addCookie(cookie);
    
        %>
    
    </body>

    2.案例

    <body>
    
    
        <!-- page指令中session属性设置为false,表示页面禁用session隐含变量,但是可以使用其他的显式的HttpSession对象 -->
        <%
            //无法使用Session对象,session.getid();
            //page指令中session的值为false,所以不能使用session隐含对象,但是可以使用显式的session对象
            out.println("session:"+session.getId()+"<br>");
        %>
    
    
        <!-- 页面禁用session,又没有和其他JSP页面相关联,直接访问该页面,则session为空-->
        <!-- 页面禁用session,但是有和其他JSP页面相关联,先访问该相关联页面,在访问该页面,则session为相关联页面的session --> 
        <%  
            //HttpSession session = request.getSession(false);
            //out.println(session);
        %>
    
        <!-- 页面不禁用session,request.getSession(true)等同于request.getSession() -->       
         <% 
            HttpSession session1 = request.getSession(false);
            //HttpSession session2 = request.getSession();
            out.println("session1:"+session1.getId()+"<br>");
            //out.println("session2:"+session2.getId()+"<br>");
         %> 
    
        <!-- 销毁session对象方法,session cookie存在与浏览器内存中,其随着浏览器的关闭而消失 -->
        <%
            //立即失效,每次访问session都不一致
            //session1.invalidate();
            //服务器下载当前web应用
    
            //session过期时间,即规定时间内没有访问session就失效,默认1800s,可以在apache根目录下web.xml文件中修改默认的时间,其单位是分钟
            //out.println("过期时间:"+session1.getMaxInactiveInterval());
            //设置过期时间4,其单位是秒
            //session1.setMaxInactiveInterval(10);
            //out.println("过期时间:"+session1.getMaxInactiveInterval());
        %>  
    
        <!-- 持久化session -->
        <%
    
        %>  
    </body>

    3.案例:把登录信息存储到session中
    hello.jsp

    <body>
    
        session的基本信息:
        <br>
        SessionId:<%=session.getId() %>
        <br><br><br>
        isNew:<%=session.isNew() %>
        <br><br><br>
        getMaxInactiveInterval:<%=session.getMaxInactiveInterval() %>   
        <br><br><br>
        CreateTime:<%=session.getCreationTime() %>
        <br><br><br>
        LastAccessTime:<%=session.getLastAccessedTime() %>
        <br><br><br>    
        Hello:<%=request.getParameter("username") %>    
        <br><br><br>
    
        <%
            //把参数存到session中去
            session.setAttribute("username", request.getParameter("username"));
        %>
    
        <a href="<%=response.encodeUrl("login.jsp") %>">重新登录</a>    
        &nbsp;&nbsp;    
        <a href="<%=response.encodeUrl("logout.jsp") %>">注销</a>
    
    
    </body>

    login.jsp

    <body>
    
        session的基本信息:
        <br><br><br>
        SessionId:<%=session.getId() %>
        <br><br><br>
        isNew:<%=session.isNew() %>
        <br><br><br>
        getMaxInactiveInterval:<%=session.getMaxInactiveInterval() %>   
        <br><br><br>
        CreateTime:<%=session.getCreationTime() %>
        <br><br><br>
        LastAccessTime:<%=session.getLastAccessedTime() %>
        <br><br><br>
        <%
            Object username = session.getAttribute("username");
            username = username == null ? "" : username;
        %>
        <!-- 浏览器禁用Cookie时仍然能够把session id传递回服务器,所使用的技术:URL重写 -->
        <form action="<%=response.encodeUrl("hello.jsp") %>" method="post">
            username:<input type="text" name="username" value="<%=username %>"/>
            <input type="submit" value="Submit">
        </form>
    
    </body>

    logout.jsp

    <body>
    
        session的基本信息:
        <br>
        SessionId:<%=session.getId() %>
        <br><br><br>
        isNew:<%=session.isNew() %>
        <br><br><br>
        getMaxInactiveInterval:<%=session.getMaxInactiveInterval() %>   
        <br><br><br>
        CreateTime:<%=session.getCreationTime() %>
        <br><br><br>
        LastAccessTime:<%=session.getLastAccessedTime() %>
        <br><br><br>    
        Bye:<%=session.getAttribute("username") %>  
        <br><br><br>
        <%
            //销毁session
            session.invalidate();
        %>
        <a href="login.jsp">重新登录</a>
    </body>
  • 相关阅读:
    java 接口和抽象类的一个最大的区别
    python 简化数据结构的初始化二 支持关键字参数
    python 简化数据结构的初始化一
    python @staticmethod
    python @classmethod
    codeskulptor hosts
    An Introduction to Interactive Programming in Python (Part 1) -- Week 2_2 练习
    An Introduction to Interactive Programming in Python (Part 1) -- Week 2_1 练习
    mysql-5.7.14-winx64免安装版在win10下的详细配置过程
    python 反模式
  • 原文地址:https://www.cnblogs.com/tengpengfei/p/10453979.html
Copyright © 2020-2023  润新知