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>
原文地址:https://www.cnblogs.com/tengpengfei/p/10453979.html