欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2021-12-23 21:07:36
...

页面:
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>