• Session登录!(连接数据库Oracle)


    一、Session是什么?

    服务器为了保存用户状态而创建的一个特殊的对象。一个Session会占用一个浏览器,只要浏览器不关闭就会一直存在。

    解释:当浏览器第一次访问服务器时,服务器创建一个session对象(该对象有一个唯一的ID)。

    重点:Session是存在于服务器上的(Session会占用资源,所以非必要信息尽量不使用Session存储,其他信息如需保留可使用Cookie来存放于浏览器)。

    二、Session的作用

    解释:Session用于保存每个用户的专用信息,每个客户端用户访问时,服务器都为每个用户分配一个唯一的会话ID(Session ID) . 它的生存期是用户持续请求时间再加上一段时间。
    Session中的信息保存在Web服务器内容中,保存的数据量可大可小。当 Session超时或被关闭时将自动释放保存的数据信息。由于用户停止使用应用程序后它仍然在内存中保持一段时间,因此使用Session对象使保存用户数据的方法效率很低。对于小量的数据,使用Session对象保存还是一个不错的选择。

    三、Session的优缺点

    优点

    1. 如果要在诸多Web页间传递一个变量,那么用Session变量要比通过QueryString传递变量可使问题简化。

    2. 可以是任何格式,存储量理论上是无限大的,数据难以被篡改,获取,不容易丢失。

    3. 可以不用声明就使用,且不用考虑到释放问题。

    缺点

    1. 占用服务器资源。

    2. 没有分布式架构,无法支持横向发展。

    3. 过度使用,代码可读性降低。

    四、Session登录代码实现(这里不考虑登陆失败!):

    4.1)目录结构:

    4.2)登录页面:index.jsp

    <%--
      Created by IntelliJ IDEA.
      User: Laugh"
      Date: 2021/12/20
      Time: 10:24
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Login/登录</title>
    </head>
    <body style="margin: auto;text-align: center">
        <form action="loginer" method="post">
            <p style="margin-top: 80px">
                用户名称:<input type="text" name="name" />
            </p>
            <p>
                用户名称:<input type="password" name="pwd" />
            </p>
            <input type="submit" value="提交"/>
        </form>
    </body>
    </html>

    4.3)管理员页面:GuanLiYuan.jsp

    <%@ page import="com.entity.User" %>
    <%--
      Created by IntelliJ IDEA.
      User: Laugh"  管理员
      Date: 2021/12/20
      Time: 10:37
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <%
            User user = (User) session.getAttribute("user");
            if (user == null ){ //如果user等于null 则证明没有登录
                session.setAttribute("msg","请登录!");
                response.sendRedirect("index.jsp");
            }
        %>
        欢迎<%=user.getUsername() %><span>管理员</span>登录
    </body>
    </html>

    4.4)普通用户页面:PuTongYongHu.jsp

    <%@ page import="com.entity.User" %>
    <%--
      Created by IntelliJ IDEA.
      User: Laugh" 普通用户
      Date: 2021/12/20
      Time: 10:38
      To change this template use File | Settings | File Templates.
    --%>
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <%
        User user = (User) session.getAttribute("user");
        if (user == null ){ //如果user等于null 则证明没有登录
            session.setAttribute("msg","请登录!");
            response.sendRedirect("index.jsp");
        }
    %>
    欢迎<%=user.getUsername() %><span>普通用户</span>
    </body>
    </html>

    4.5)实体创建:User

    package com.entity;
    import java.sql.Date;
    
    public class User {
        private int userid;
        private String username;
        private String userpwd;
        private Date userdate;
        private int userrole;
    
        public User() {
        }
    
        public User(int userid, String username, String userpwd, Date userdate, int userrole) {
            this.userid = userid;
            this.username = username;
            this.userpwd = userpwd;
            this.userdate = userdate;
            this.userrole = userrole;
        }
    
        public int getUserid() {
            return userid;
        }
    
        public void setUserid(int userid) {
            this.userid = userid;
        }
    
        public String getUsername() {
            return username;
        }
    
        public void setUsername(String username) {
            this.username = username;
        }
    
        public String getUserpwd() {
            return userpwd;
        }
    
        public void setUserpwd(String userpwd) {
            this.userpwd = userpwd;
        }
    
        public Date getUserdate() {
            return userdate;
        }
    
        public void setUserdate(Date userdate) {
            this.userdate = userdate;
        }
    
        public int getUserrole() {
            return userrole;
        }
    
        public void setUserrole(int userrole) {
            this.userrole = userrole;
        }
    }

    4.6)工具类:util(这里是工具类,连接数据库使用,可直接替换为自己的库,注意:账号密码等信息不要错误哦)

    package com.JDBC;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    
    public class util {
        private static Connection conn = null;
        public static Connection getConnection() {
            try {
                if(conn==null || conn.isClosed()) {
                    Class.forName("oracle.jdbc.driver.OracleDriver");
                    conn = DriverManager.getConnection("jdbc:oracle:thin:@XXX.XXX.XX.XX:25220:XXXX", "数据库账号", "数据库密码");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return conn;
        }
    
        //检测是否连接数据库成功
        /*
         * public static void main(String[] args) { System.out.println(getConnection());
         * System.out.println(getConnection()); }
         */
    }

    4.7)登录逻辑层(没有使用Util工具类)

    package com.zgtt;
    import com.entity.User;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import java.io.IOException;
    import java.sql.*;
    import java.util.ArrayList;
    import java.util.List;
    
    @WebServlet("/loginer")
    public class C extends HttpServlet {
    
        static List<User> users = new ArrayList<>();
        @Override
        protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            req.setCharacterEncoding("utf-8");
            resp.setCharacterEncoding("utf-8");
            //获取用户信息: 账号 / 密码
            String name = req.getParameter("name");
            String pwd = req.getParameter("pwd");
            String sql = "select * from Manger where USERNAME=? and USERPWD =?";
            PreparedStatement ps = null;
            Connection conn = null;
            ResultSet rs = null;
            try {
                Class.forName("oracle.jdbc.driver.OracleDriver");
                conn = DriverManager.getConnection("jdbc:oracle:thin:@XXX.XXX.XX.XX:25220:ttdb", "数据库账号", "数据库密码");
                ps = conn.prepareStatement(sql);
                ps.setString(1,name);
                ps.setString(2,pwd);
                rs = ps.executeQuery();
    
                //如过有下一个则成功
                if(rs.next()){
                    User user = new User(rs.getInt(1),rs.getString(2),rs.getString(3),rs.getDate(4),rs.getInt(5));
                    //绑定Session
                    HttpSession session = req.getSession();
                    session.setAttribute("user",user);
                    req.getServletPath();
                    if (user.getUserrole() == 1 ){
                        resp.sendRedirect("GuanLiYuan.jsp");
                    }else {
                        resp.sendRedirect("PuTongYongHu.jsp");
                    }
                }else {
                    resp.sendRedirect("index.jsp");
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        @Override
        protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            doGet(req, resp);
        }
    }

    注意:连接数据库一定要有这个!!!

    4.8)数据库表

    五、实例介绍:Session已插入!

    判断登录用户为管理员!

    登录其他账户判断用户为普通用户!

    六、总结:

    当用户登陆成功后浏览器会显示插入的Session,咱们可以F12查看到!

    扩充:再次demo中我加了分角色展示页面,也可放开思维去拓展,根据用户Role去判断他是什么用户,进行不同方面拓展!

    重点:Session可以存放东西多,但是比较占用服务器,会给造成不必要消耗。推荐大数据且不重要数据存放在Cookie中,类似于账号密码可存放再Session中。

  • 相关阅读:
    IOS开发调用系统相机和打开闪光灯
    iOS 判断输入字符串长度函数
    Mac下Cocos2d和Cocos2dx安装
    同样的一辈子,不同的结果!
    Mac OS 和 iOS 操作系统架构
    摄影师张梦格App项目总结
    Mac下WorkPress平台的安装与搭建
    dagger与spring注解对比
    git rebase 命令参数
    初识Devexpress ChartControl 之 动态添加stepline及TextAnnotation
  • 原文地址:https://www.cnblogs.com/superyonng/p/16053960.html
Copyright © 2020-2023  润新知