zoukankan      html  css  js  c++  java
  • JSP九大内置对象之session以及eclispe如何关联源码

    一、session的特点及其实例

    session:同一次会话共享
     a.浏览网站:开始->关闭
     b.购物:浏览、付款、退出
     c.电子邮件:浏览、写邮件、退出
      从一次开始到一次结束,是一次会话。
      客户端第一次访问服务器时:(因为不存在Cookie的JSESSIONID,无法匹配成功,所以分配)
      客户通过浏览器访问服务器,服务端产生一个session来接待他,产生的session自带一个sessionID(通过sessionID来区分不同的session),服务端会将产生的sessionID复制一份,即JSESSIONID,服务端会将JSESSIONID包含在Cookie中发送给服务器。(服务端和客户端通过Cookie和session对应起来,两者的连接者是通过JSESSIONID和sessionID相同的原理来匹配,实现一一对应)
      客户端第二/n次访问时,直接对客户端已有的Cookie中的JSESSIONID和服务端的session中的sessionID进行匹配,如果匹配成功(JSESSIONID和sessionid相同),说明不是第一次访问,无需登录,实现一一对应。

      类似于商城的存包处
      客户端:顾客;
      服务端:商场存包处;
      顾客第一次存包:先判断有没有钥匙(JSESSIONID),没有,就分配一个。
      顾客第二次存包:判断有没有钥匙(JSESSIONID),有,就进行匹配,找到对应的箱子(session).

      session特点:
      a.session存储在服务端。
      b.session是在同一个客户请求时共享。
      c.session实现机制:第一次用户请求时产生sessionID,并复制给Cookie的JSESSIONID,然后发送给客户端。

      session方法:
      String getID():获取sessionID
      boolean isNew():判断是否是新用户(第一次访问)。
      void invalidate():使session失效(退出登录、注销)。
      //失效只失效当前session

      void getAttribute()
      Object setAttribute()

      void setMaxInactiveInterval():设置最大有效非活动时间
      //如设该时间为30分钟,就是当你从此处离开一段时间,如在30分钟内,可以直接继续操作,如超过30分钟,则需要重新登录。
      int getMaxInactiveInterval():获取当前最大有效非活动时间
     
      浏览器的session共享

    实例

    login.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    
      <form action="check.jsp" method="post">
             用户名<input type="text" name="uname" > <br/> 
             密码<input type="password" name="upwd"> <br/>
             <input type="submit" value="登录"> <br/>
      </form>
    </body>
    </html>

    check.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
          <%
              //设置编码
              request.setCharacterEncoding("utf-8");
              //获取用户名和密码
              String name=request.getParameter("uname");
              String pwd=request.getParameter("upwd");
              //进行检验,此处未使用数据库,以此替代
              if(name.equals("张志伟")&&pwd.equals("123456"))//假设用户及密码
              {
                  //如果登录成功,获取两个session
                  session.setAttribute("uname", name);
                  session.setAttribute("upwd", pwd);
                  
                  //将sessionID打印到控制台
                  System.out.println("sessionID"+session.getId());
                  //设置最大非活动有效时间为50秒
                  session.setMaxInactiveInterval(50);
                  
                  Cookie cookie= new Cookie("uname",name);
                  response.addCookie(cookie);
                  
                  request.getRequestDispatcher("welcome.jsp").forward(request, response);
              }
              else
              {//登陆失败
                  response.sendRedirect("login.jsp");
              }
           %>
    </body>
    </html>

    welcome.jsp

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
         欢迎您:
         <%
              String name = (String)session.getAttribute("uname");
              //如果客户没有登录,直接通过地址访问,获取的name值为null,就让它返回登录界面去登陆
              if(name!=null)
              {
                  out.print(name);
                  
         %>
         
         <a href="invalidate.jsp">注销</a>
         <% 
              }
              else
              {
                  request.getRequestDispatcher("login.jsp");
              }
         %>
    </body>
    </html>

    invalidate.jsp此页面是注销页面,负责使session失效

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
            <%
               //删除全部session
               session.invalidate();
            
               //重定向到登录页面
               response.sendRedirect("login.jsp");
               //删除指定的部分
               //session.removeAttribute("uname");
            %>
    </body>
    </html>

    a.jsp此页面的存在是为了检查session是否失效成功,并检验sessionID和JSESSIONID是否匹配成功。

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
         <%
            out.print( session.getAttribute("uname"));
         
            Cookie []cookies=request.getCookies();
            for(Cookie cookie:cookies)
            {
                if(cookie.getName().equals("JSESSIONID"))
                {
                    System.out.println(cookie.getValue());
                }
            }
         %>
    </body>
    </html>

    下面是测试截图

     点击登录,经过check.jsp的校验,跳转至welcome.jsp

    此时的a.jap显示了通过session获取的name

    控制台中输出了sessionID和cookie.getValue(),

    前者说明登录成功,后者说明sessionID和JSESSIONID成功匹配

    在点击注销后,name为null,说明使session失效成功

     

    cookie和session的区别
                            cookie                         session
      保存的位置             客户端                          服务端
      安全性                 较不安全                        较安全
      保存的内容             String                          Object

    此处不注意会报错。

    session的返回对象value是Object类型

     cookie的保存是String类型

    三、如何使eclispe关联源代码

    首先按住Ctrl,将鼠标移动至要关联的类,如Cookie,Cookie下会出现一条蓝线,单击它。

     到Tomcat官网去下载配套源码包(请参照之前的博客)

    http://tomcat.apache.org/

     下载Source Code Distributions中的zip,建议将这些安装包放到一起,便于寻找

     点击后进行关联,找到刚才下载的zip源码包

    点击OK即可,再次按住Ctrl点击Cookie,即可查看源代码

     Ctrl+O

    查看

    Ctrl+shift+T:查找session的源码

  • 相关阅读:
    20172313 2018-2019-1 《程序设计与数据结构》第七周学习总结
    20172313 2018-2019-1 《程序设计与数据结构》第六周学习总结
    20172313 2018-2019-1 《程序设计与数据结构》课堂测试修改报告
    20172313 2018-2019-1 《程序设计与数据结构》第五周学习总结
    2019_软工实践_个人总结
    2019_软工实践_Beta收官
    2019_软工实践_Beta(5/5)
    2019_软工实践_Beta(4/5)
    2019_软工实践_Beta(3/5)
    2019_软工实践_Beta(2/5)
  • 原文地址:https://www.cnblogs.com/yeyueweiliang/p/12197222.html
Copyright © 2011-2022 走看看