zoukankan      html  css  js  c++  java
  • java:Session(概述,三层架构实例(实现接口封装JDBC),Session实现简单购物车实例)

    1.Session概述:

      Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。有关使用 Session 对象的详细信息,请参阅“ASP 应用程序”部分的“管理会话”。注意 会话状态仅在支持 cookie 的浏览器中保留。

      在web中session就代表了一次会话(request.getSession().getAttribute())
      一次建立连接和一次关闭连接称之为会话
      session会在客户端第一次向服务器请求的时候,在服务器上被创建,服务器响应客户端的时候就会传送给客户端,此时sessionID保留在客户端
      当客户端第二次向服务器发送请求的时候会带上sessionid---->首先要寻找相同sessionid,如果找到就标识来过,如果没有找到,服务器就会重新创建一个sessionid返回给客户端

     

    session什么时候被销毁:
      (session的不活动周期)
      A.不活动周期:当在10秒钟之内任意一秒刷新了页面(操作当前session),失效时间会自动重置为10秒,setMaxInactiveInterval设置失效使用
      B.关闭服务器
      C.关闭浏览器
      D.配置session自动失效((tomcat服务器)默认失效时间为30m)
      *****如果使用的是tomcat服务器,不允许修改tomcat的web.xml中的session失效时间
      E.invalidate()方法,强制失效(坚决不让用)

    session常用的方法:
      ******setAttribute(key,value);为session对象设置一个值
      ******getAttribute(key);通过设置的key获取对应的值
      ******removeAttribute(key);通过设置的key移除对应的键值对
      (不常用)getAttributeNames();获取设置的key的值,返回的是一个枚举
      setMaxInactiveInterval(int seconds);设置session的失效时间,单位是秒
      getMaxInactiveInterval();获取session的失效时间,单位是秒
      ******isNew();当前session对象是否为新创建的对象,返回boolean类型

    2.三层架构实例(实现接口封装JDBC):

      三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer)、业务逻辑层(Business Logic Layer)、数据访问层(Data access layer)。区分层次的目的即为了“高内聚低耦合”的思想。在软件体系架构设计中,分层式结构是最常见,也是最重要的一种结构。微软推荐的分层式结构一般分为三层,从下至上分别为:数据访问层、业务逻辑层(又或称为领域层)、表示层。

      三层架构的父子包示例:

      

      Entity下实体类Teacher,实现序列化,并重写HashCode和Equals方法

    package cn.zzsxt.lee.web.entity;
    
    import java.io.Serializable;
    
    /**
     * @description 教师实体类
     * @author Seven Lee
     * @date 2017年7月21日上午11:48:12
     *
     */
    public class Teacher implements Serializable {
        private static final long serialVersionUID = 1L;
    
        private String id;
        private String name;
        private String password;
    
        public Teacher() {
    
        }
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getPassword() {
            return password;
        }
    
        public void setPassword(String password) {
            this.password = password;
        }
    
        @Override
        public int hashCode() {
            final int prime = 31;
            int result = 1;
            result = prime * result + ((id == null) ? 0 : id.hashCode());
            result = prime * result + ((name == null) ? 0 : name.hashCode());
            result = prime * result + ((password == null) ? 0 : password.hashCode());
            return result;
        }
    
        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            Teacher other = (Teacher) obj;
            if (id == null) {
                if (other.id != null)
                    return false;
            } else if (!id.equals(other.id))
                return false;
            if (name == null) {
                if (other.name != null)
                    return false;
            } else if (!name.equals(other.name))
                return false;
            if (password == null) {
                if (other.password != null)
                    return false;
            } else if (!password.equals(other.password))
                return false;
            return true;
        }
    
        @Override
        public String toString() {
            return "Teacher [id=" + id + ", name=" + name + ", password=" + password + "]";
        }
    
    }

      Dao下的ITeacherDao接口,规范格式:

    package cn.zzsxt.lee.web.dao;
    
    import cn.zzsxt.lee.web.entity.Teacher;
    
    /**
     * @description 教师Dao
     * @author 
     * @date 2017年7月21日下午2:24:10
     *
     */
    public interface ITeacherDao {
    
        /**
         * @description 通过账号密码查询教师信息
         * @return
         */
        Teacher selectTeacherByNameAndPassword(Teacher teacher) throws Exception;
    
        /**
         * @description 修改教师信息
         * @return
         */
        int updateTeacher();
    
        /**
         * @description 删除教师
         * @return
         */
        int deleteTeacher();
    
        /**
         * @description 新增教师信息
         * @return
         */
        int addTeacher();
    
    }

      Dao.Impl下的TeacherDaoImpl,实现接口并封装JDBC:

    package cn.zzsxt.lee.web.dao.impl;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    
    import cn.zzsxt.lee.web.dao.ITeacherDao;
    import cn.zzsxt.lee.web.entity.Teacher;
    
    public class TeacherDaoImpl implements ITeacherDao {
    
        @Override
        public Teacher selectTeacherByNameAndPassword(Teacher teacher) throws Exception {
            // 1.加载驱动
            Class.forName("oracle.jdbc.driver.OracleDriver");
            // 2.获取连接
            Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "scott", "123456");
            // 3.获取预编译statement
            String sql = "select * from teacher where name=? and password=?";
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, teacher.getName());
            ps.setString(2, teacher.getPassword());
            // 4.调用executeQuery();返回结果集
            ResultSet rs = ps.executeQuery();
            // 遍历结果集
            Teacher t = new Teacher();
            while (rs.next()) {
                t.setId(rs.getString("id"));
                t.setName(rs.getString("name"));
                t.setPassword(rs.getString("password"));
            }
            return t;
        }
    
        @Override
        public int updateTeacher() {
            return 0;
        }
    
        @Override
        public int deleteTeacher() {
            return 0;
        }
    
        @Override
        public int addTeacher() {
            return 0;
        }
    
    }

      登录界面,预跳转至处理登录界面:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    
    <title>My JSP 'login.jsp' starting page</title>
    
    
    </head>
    
    <body>
    
    
        <form action="deal_login.jsp" method="post">
    
            用户名:
            <input type="text" name="username" />
            <br /> 密码:
            <input type="password" name="pwd" />
            <br />
            <input type="submit" value="提交" />
    
    
        </form>
    
    
    
    
    </body>
    </html>

      登录处理界面,预跳转至主页:

    <%@ page language="java"
        import="java.util.*, java.sql.*, cn.zzsxt.lee.web.entity.*, cn.zzsxt.lee.web.dao.*, cn.zzsxt.lee.web.dao.impl.*"
        pageEncoding="UTF-8"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    
    <title>My JSP 'deal_login.jsp' starting page</title>
    
    
    </head>
    
    <body>
    
    
        <%
            // 第一步:获取input框中的值
            String username = request.getParameter("username");
            String pwd = request.getParameter("pwd");
            Teacher teacher = new Teacher();
            teacher.setName(username);
            teacher.setPassword(pwd);
            ITeacherDao teacherDao = new TeacherDaoImpl();
          Teacher t = teacherDao.selectTeacherByNameAndPassword(teacher); 
            
      

         
    if (t.getId() != null && !"".equals(t.getId())) { //登录成功 request.getSession().setAttribute("teacher", t); request.getRequestDispatcher("index.jsp").forward(request, response); }

         
    %> </body> </html>

      主页:(Web项目自带的主页建议删除后重新创建)

    <%@ page language="java" import="java.util.*, cn.zzsxt.lee.web.entity.*"
        pageEncoding="UTF-8"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    
    <title>My JSP 'index.jsp' starting page</title>
    </head>
    
    <body>
        <%
            Teacher teacher = (Teacher) request.getSession().getAttribute("teacher");
        %>
        <h1>
    
            欢迎登录:<%=teacher.getName()%></h1>
    </body>
    </html>

     3.session实现简单购物车:

       登录界面:

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        
        <title>My JSP 'login.jsp' starting page</title>
        
    
      </head>
      
      <body>
      
      
          <form action="deal_login.jsp" method="post">
              用户名:<input type="text" name="username" /><br />
              密码:<input type="password" name="pwd" />
              <input type="submit" value="提交" />
          </form>
      
      
      </body>
    </html>

      登录处理界面:

    <%@ page language="java"
        import="java.util.*, cn.zzsxt.lee.web.entity.*, cn.zzsxt.lee.web.dao.*, cn.zzsxt.lee.web.dao.impl.*"
        pageEncoding="UTF-8"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    
    <title>My JSP 'deal_login.jsp' starting page</title>
    
    
    </head>
    
    <body>
    
    
        <%
            String uname = request.getParameter("username");
            String password = request.getParameter("pwd");
    
            User user = new User();
            user.setUsername(uname);
            user.setPassword(password);
    
            IUserDao userDao = new UserDaoImpl();
            User u = userDao.selectUserByNameAndPwd(user);
            if (u.getId() != null && !"".equals(u.getId())) {
                // 登录成功
                request.getSession().setAttribute("user", u);// 创建session对象,并且调用setAttribute方法进行保存
                IStudentsDao studentDao = new StudentsDaoImpl();
                List<Student> stuList = studentDao.selectAllStudents();
                // 当很多页面都需要使用这个数据的时候,就保存session(登录以后的用户信息)
                // 临时需要取出的数据,使用request(商品的展示,增改)
                if (stuList.size() > 0) {
                    // 说明有值
                    request.setAttribute("list", stuList);
                    request.getRequestDispatcher("index.jsp").forward(request, response);
                } else {
                    // 查询出的数据为null,不能跳转
                    // 但是已经登录成功了
                    response.sendRedirect("404.jsp");
                }
            } else {
                // 登录失败
            }
        %>
    
    
    </body>
    </html>

      主页选购:

    <%@ page language="java" import="java.util.*, cn.zzsxt.lee.web.entity.*"
        pageEncoding="UTF-8"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    <title>My JSP 'index.jsp' starting page</title>
    </head>
    
    <body>
        <%
            request.getSession();// 获取session对象
            request.getSession(false);// 如果getSession()方法中的参数为false,直接从request中获取session(获取session对象),如果获取不到,就直接返回null,并不会创建一个session对象
                                        //如果参数为true,总是创建一个新的session
                                        // session 不会被new的,是直接被获取的
                                        //其实session自动会创建很多对象等着被使用,request.getSession();
                                        // 防止session创建新的对象
            User user = (User) request.getSession(false).getAttribute("user");
            if (user != null) {
                System.out.println("我是有值的");
        %><h1>
            欢迎你:<%=user.getUsername()%></h1>
        <%
            } else {
                // 提示,用户未登录请登录
            }
        %>
    
    
    
        <table>
            <thead>
                <tr>
                    <th>学生编号</th>
                    <th>学生用户名</th>
                    <th>学生密码</th>
                    <th>操作</th>
                </tr>
            </thead>
    
            <tbody>
    
    
    
                <%
                    List<Student> list = (List<Student>) request.getAttribute("list");
    
                    for (int i = 0; i < list.size(); i++) {
                %>
                <tr>
                    <td><%=list.get(i).getId()%></td>
                    <td><%=list.get(i).getStuName()%></td>
                    <td><%=list.get(i).getStuPwd()%></td>
                    <td><a href="add_cart.jsp?id=<%=list.get(i).getId() %>">添加购物车</a></td>
                </tr>
    
                <%
                    }
                %>
            </tbody>
        </table>
    
    </body>
    </html>

      处理添加购物车界面:

    <%@ page language="java"
        import="java.util.*, cn.zzsxt.lee.web.entity.*, cn.zzsxt.lee.web.dao.*, cn.zzsxt.lee.web.dao.impl.*"
        pageEncoding="UTF-8"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    
    <title>My JSP 'add_cart.jsp' starting page</title>
    
    
    </head>
    
    <body>
        <h1>购物车:</h1>
        <%
            Student stu = null;
            String id = request.getParameter("id");// 学生id
            if (id != null && !"".equals(id)) {
                // 如果id不为null,必定能经过sql,不报错
                IStudentsDao studentDao = new StudentsDaoImpl();
                stu = studentDao.selectStuById(id);
            } else {
                stu = new Student();
            }
            // 如果页面第一次被访问,直接获取stuList,永远为null
            List<Student> listStu = (List<Student>) request.getSession().getAttribute("stuList");
            if (stu.getId() != null && !"".equals(stu.getId())) {
                if (listStu != null) {
                    listStu.add(stu);
                } else {
                    // 初始化
                    listStu = new ArrayList<Student>();
                    listStu.add(stu);
                }
                request.getSession().setAttribute("stuList", listStu);
                response.sendRedirect("cart.jsp");
            } else {
                response.sendRedirect("404.jsp");
            }
        %>
    </body>
    </html>

      购物车界面:

    <%@ page language="java" import="java.util.*, cn.zzsxt.lee.web.entity.*"
        pageEncoding="UTF-8"%>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
    
    <title>My JSP 'cart.jsp' starting page</title>
    
    
    </head>
    
    <body>
    
        <h1>
            <a href="">删除购物车</a>
        </h1>
        <%
            List<Student> listStu = (List<Student>) request.getSession(false).getAttribute("stuList");
            if (listStu.size() > 0) {
                for (int i = 0; i < listStu.size(); i++) {
                    System.out.println(listStu.get(i).getStuName());
                }
            } else {
                System.out.println("添加购物车失败,请重新添加 ");
            }
        %>
    
    </body>
    </html>
  • 相关阅读:
    shipyard-----------docker容器的可视化管理
    dockerfile制作镜像
    docker容器ip地址的设定
    docker镜像文件的安装和容器的操作
    Docker网络模式
    docker整体了解
    spring的aop学习(1)
    SqlSessionFactory的创建过程
    spring+springMVC+Maven+mysql环境搭建
    dubbo入门示例
  • 原文地址:https://www.cnblogs.com/kuangzhisen/p/7219021.html
Copyright © 2011-2022 走看看