• Java_Web之状态管理


    回顾及作业点评:

    (1)JSP如何处理客户端的请求?

    使用response对象处理响应

    (2)请描述转发与重定向有何区别?

    转发是在服务器端发挥作用,通过forward方法将提交信息在多个页面间进行传递。客户端浏览器的地址栏不会显示出转向后的地址

    重定向是在客户端发挥作用,通过请求新的地址实现页面转向,在地址栏中可以显示转向后的地址

    (3)JSP如何实现数据库访问?

    使用JDBC访问数据库

    预习检查:
    (1)除了request对象和response对象,JSP还包括哪些内置对象?
    1、Cookie  2、session是JSP内置对象   3、application对象
    (2)Cookie的作用?
    1、对特定对象的追踪   2、统计网页浏览次数  3、简化登录

    (3)请说明session对象与application对象的区别?
    在一次会话范围内容有效,在会话期间与session绑定的对象皆属于该范围
    在一个应用服务器范围内有效,当应用服务启动后即创建该对象,并向所有用户所共享

     

    本章目标

    掌握Cookie的原理及应用

    掌握session的原理及应用

    掌握application的原理及应用

    本章任务

    一、使用Cookie实现保存已访问的信息

    (1)什么是Cookie?

    Cookie是Web服务器保存在客户端的一系列文本信息

    Cookie的作用

    对特定对象的追踪

    统计网页浏览次数

    简化登录

    安全性能 容易信息泄露

    (2)Cookie的语法

    第一步:导入包
    import="javax.servlet.http.Cookie"
    
    第二步:创建Cookie
    Cookie newCookie=new Cookie("parameter", "value");
    parameter:用于代表cookie的名称(key)
    value:用于表示当前key名称所对应的值
    
    第三步:写入Cookie
    response.addCookie(newCookie)

    (3)设置Cookie属性的常用方法

    类型          方法名称                  说  明
    void       setMaxAge(int expiry)      设置Cookie的有效期,以秒为单位
    
    
    void       setValue(String value)     在Cookie创建后,对Cookie进行赋值 
    
    
    String     getName()                  获取Cookie的名称
    
    
    String     getValue()                 获取Cookie的值
    
    
    String     getMaxAge()                获取Cookie的有效时间,以秒为单位
    案例:
    ------从登录验证页面表单中获取用户名------
    <%
           String username=reqeust.getParameter("username");
    //以key/value的形式创建Cookie
    创建Cookie,使用response的addCookie方法保存Cookie
    
    Cookie uname=new Cookie("uname", username); 
    response.addCookie(uname);
    ... ...
    %>
    -----在显示页面显示用户名---------------
    <%//获取请求中的Cookie,以数组方式保存
    使用reqeust获取Cookie数组,通过cookie的名称获取对应的内容
    
           Cookie cookies[ ]=request.getCookies();
           //循环遍历数组,得到key=uname的Cookie
          for(int i=0;i<cookies.length;i++){
                  Cookie ucookie=cookies[i];
                  if(ucookie.getName().equals("uname”));//判断Cookie的名称
     %>
        欢迎你:<%=ucookie.getValue() %>//获取key对应的value,输出显示
        <%  }  %>

    二、使用session对象实现页面访问控制

    (1)如图:

    (2)什么是会话?
    一个会话就是浏览器与服务器之间的一次通话,包含浏览器与服务器之间的多次请求、响应过程

    (3)JSP内置对象session

     (4)session与窗口的关系
    一个session对应一个窗口,那么通过超链接打开的窗口是否也是新的session呢?
    答案:不是
    每个session对象都与浏览器一一对应 重新开启一个浏览器,相当于重新创建一个session对象重新开启一个IE窗口,直接访问系统首页面
    通过超链接打开的新窗口,新窗口的session与其父窗口的session相同

    (5)使用session实现访问控制

    在控制页面获取用户请求的登录信息进行验证
    ------登录处理页面的代码片断------
    <%
    if (rs.next()) {  //如果是已注册用户
    在session中存放用户登录信息
    
    session.setAttribute("LOGINED_USER", loginedUser);
    response.sendRedirect("index.jsp");
    } else {
    response.sendRedirect("login.html");
    }
    %>
    
    
    --如果session中不存在该用户的登录信息,转入登录页面--
    
    <%
    User user = (User) session.getAttribute("LOGINED_USER");
    if (user == null) {
    response.sendRedirect("login.jsp");
    }
    %>

    (6)include指令
    除了首页面,其它页面中同样需要加入登录验证,       有没有办法避免冗余代码的出现?
    可以将一些共性的内容写入一个单独的文件中,然后通过include指令引用该文件,从而降低代码的冗余问题,也便于修改共性内容

    案例:创建登录验证文件 loginControl.jsp
    <%@ page import="org.jbit.bean.User"%>
    <%
    User user = (User) session.getAttribute("LOGINED_USER");
    if (user == null) {
    response.sendRedirect("login.html");
    }
    %>
    在后台首页面中使用include指令引用登录验证文件
    <%@ include file="loginControl.jsp"    %>

    (7)Cookie与session的比较
    session是在服务器端保存用户信息,Cookie是在客户端保存用户信息
    session中保存的是对象,Cookie保存的是字符串
    session随会话结束而关闭,Cookie可以长期保存在客户端
    Cookie通常用于保存不重要的用户信息,重要的信息使用session保存

    三、使用application对象实现统计在线人数

    (1)JSP内置对象application

    application类似于系统的“全局变量”,用于实现用户之间的数据共享 application对象的常用方法:

    void setAttribute(String key, Object value):以键/值的方式,将一个对象的值存放到application中 application.setAttribute("LOGINED_USER", new ArrayList());

    Object getAttribute(String key):根据键去获取application中存放对象的值

    if (application.getAttribute("LOGINED_USER") != null) {       List loginedUsers = (List) application.getAttribute("LOGINED_USER"); }

    (2)application对象

    (3)实现访问人数统计2-1

    创建登录处理页面
    ------登录处理页面代码片断------
    if (rs.next()) {
    User logineduser = new User(name, pass);
    session.setAttribute("LOGINED_USER", logineduser);
    List loginedUsers = new ArrayList();  //访问者列表
    if (application.getAttribute("LOGINED_USER") != null) 
    loginedUsers = (List) application.getAttribute("LOGINED_USER");
    loginedUsers.add(logineduser); //把新登录用户的信息存入访问者列表中
    application.setAttribute("LOGINED_USER", loginedUsers);
    response.sendRedirect("index.jsp");
    }
    创建已访问人数统计页面
    
    ------已访问人数统计页面代码片断------
    <%  List loginedUsers = new ArrayList();  //访问者列表
    if (application.getAttribute("LOGINED_USER") != null) 
    loginedUsers = (List) application.getAttribute("LOGINED_USER"); 
    %>
    目前,有<%=loginedUsers.size()%>人已经访问过本网站!<br><br>

    (4)JSP内置对象的范围

  • 相关阅读:
    ActiveReports 9实战教程(1): 手把手搭建环境Visual Studio 2013 社区版
    分享产品发布的10条经验
    Mobile first! Wijmo 5 + Ionic Framework之:Hello World!
    Java知识回顾 (14)网络编程
    Java知识回顾 (13)序列化
    idea下java项目的打包与使用
    Java知识回顾 (12) package
    Java知识回顾 (11) 异常处理
    创建表时 ORA-00955: 名称已由现有对象使用
    工作笔记—hibernate之QueryCriteria
  • 原文地址:https://www.cnblogs.com/wlx520/p/4497109.html
Copyright © 2020-2023  润新知