什么是Session;request.getSession().setAttribute()

Session:会话控制,是服务器为了保存用户状态而创建的一个特殊的对象。=>用于存储信息的一个对象

 

 

 当我们在服务端使用session时,首先要获取session,下面这个图就对服务器获取session的一些情况进行了说明。

 

 

 

Session常用方法

————————————————————————————————
resquest.getSession():得到请求游览器(客户端)对应的session。如果没有,那么就创建应该新的session。如果有那么就返回对应的session

setAttribute(String s, Object o):在session存放属性

getAttribute(String s):从session中得到s所对应的属性

========================================================

removeAttribute(String s):从session中删除s对应的属性

getId():得到session所对应的id

invalidate():使session立即无效

setMaxInactiveInterval(int i):设置session最大的有效时间。注意,这个有效时间是两次访问服务器所间隔的最大时间,如果超过最大的有效时间,那么这个session就失效了。

以房产管理系统登陆界面举例【login.jsp】

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>登录</title>
    <link rel="stylesheet" href="<%=request.getContextPath()%>/resources/css/style.css">
    <link rel="stylesheet" href="<%=request.getContextPath()%>/resources/css/index_work.css">
    <style>
        #cont {
            text-align: center;
            margin-left: 240px;
            padding: 20px;
        }
    </style>
</head>
<body>
<jsp:include page="top.jsp"/>
<div id="cont" style="margin-top: 140px ">
    <form method="post" action="${pageContext.request.contextPath}/LoginServlet?type=trueLogin">
        <div style="margin-top: 30px">
            <label style="color: white">
                用户名:&nbsp;
                <input type="text" name="username">
            </label>
        </div>

        <div style="margin-top: 30px">
            <label style="color: white">
                &nbsp; &nbsp;密码:&nbsp;
                <input type="password" name="password">
            </label>
        </div>
        <div style="margin-top: 30px; padding-left: 60px" >
            <select name="state">
                <option>客户</option>
                <option>经纪人</option>
                <option>管理员</option>
            </select>
        </div>

        <div style="margin-top:50px">
            &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            <input type="submit" value="登录">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
            <input type="button" value="注册" onclick="location.href='/LoginServlet?type=toRes'">
        </div>
        <jsp:include page="bottom.jsp"/>
    </form>
    <h1 style="color: white">${mes}</h1>
</div>
</body>
<%request.getSession().setAttribute("mes", null);%>
</html>

【LoginServlet.java】

@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        设置对客户端请求进行重新编码,防止乱码
        req.setCharacterEncoding("UTF-8");
//它是一种获取参数的方法,把jsp文件中的数据读取出来,然后就可以封装利用
        String type = req.getParameter("type");
//        校验
        System.out.println(type);
        if (type == null) {
/*
            在学习jsp与后台数据交互内容时,我们会接触到两种类型的跳转
            客户首先发送一个请求到服务器端,服务器端发现匹配的servlet,并指定它去执行,当这个servlet执行完之后,它要调用getRequestDispacther()方法,把请求转发给指定的test.jsp
            即在servlet中调用转发语句

            假设你去办理某个执照,

            重定向:你先去了A局,A局的人说:“这个事情不归我们管,去B局”,然后,你就从A退了出来,自己乘车去了B局。

            转发:你先去了A局,A局看了以后,知道这个事情其实应该B局来管,但是他没有把你退回来,而是让你坐一会儿,自己到后面办公室联系了B的人,让他们办好后,送了过来。

*/
            req.getRequestDispatcher("/WEB-INF/login.jsp").forward(req, resp);
        }
        switch (type) {
            case "trueLogin": {
//                接收信息,得到用户名和密码
                String userName = req.getParameter("username");
                String passWord = req.getParameter("password");
                String state = req.getParameter("state");
                if (userName == null || passWord == null || "".equals(userName.trim()) || "".equals(passWord.trim())) {
                    req.getSession().setAttribute("mes", "您的账号或密码不能为空!");
                    resp.sendRedirect("/LoginServlet");
                    return;
                }
                if (state.equals("客户")) {
                    CustomerServiceImpl customerService = new CustomerServiceImpl();
                    Customer customer = customerService.login(userName);
                    if (customer == null) {
                        req.getSession().setAttribute("mes", "您的账号不正确!请重新输入...");
                        resp.sendRedirect("/LoginServlet");
                        return;
                    }
                    if (customer.getPassword().equals(passWord)) {
                        req.getSession().setAttribute("customer", customer);
                        resp.sendRedirect("/Customer?type=toIndividual");
                    } else {
                        req.getSession().setAttribute("mes", "您的密码不正确!请重新输入...");
                        resp.sendRedirect("/LoginServlet");
                    }
                }
                if (state.equals("经纪人")) {
                    RealestateServiceImpl realestateService = new RealestateServiceImpl();
                    Realestate realestate = realestateService.login(userName);
                    if (realestate == null) {
                        req.getSession().setAttribute("mes", "您的账号不正确!请重新输入...");
                        resp.sendRedirect("/LoginServlet");
                        return;
                    }
                    if (realestate.getPassword().equals(passWord)) {
                        req.getSession().setAttribute("realestate", realestate);
                        resp.sendRedirect("/Property?type=toToIndividual");
                        return;
                    } else {
                        req.getSession().setAttribute("mes", "您的密码不正确!请重新输入...");
                        resp.sendRedirect("/LoginServlet");
                    }
                }
                if (state.equals("管理员")) {
                    AdminService adminService = new AdminServiceImpl();
                    AdminEntity adminEntity = adminService.getAdminByUserName(userName);
                    if (adminEntity == null) {
                        req.getSession().setAttribute("mes", "您的账号不正确!请重新输入...");
                        resp.sendRedirect("/LoginServlet");
                        return;
                    }
                    if (adminEntity.getPwd().equals(passWord)) {
                        req.getSession().setAttribute("adminEntity", adminEntity);
                        resp.sendRedirect("/AdminServlet?type=admin");
                        return;
                    } else {
                        req.getSession().setAttribute("mes", "您的密码不正确!请重新输入...");
                        resp.sendRedirect("/LoginServlet");
                        return;
                    }
                }
                break;
            }
            case "toRes": {
                req.getRequestDispatcher("/WEB-INF/register.jsp").forward(req, resp);
                break;
            }
            case "trueRes": {
                String userName = req.getParameter("username");
                String passWord = req.getParameter("password");
                String z_passWord = req.getParameter("z_password");
                Integer state = Integer.valueOf(req.getParameter("state"));
                if (state == null || "".equals(state) || userName == null || passWord == null || z_passWord == null || userName.trim().equals("") || passWord.trim().equals("") || z_passWord.trim().equals("")) {
                    req.getSession().setAttribute("mes", "您的账号、密码、确认密码不能为空!");
                    req.getRequestDispatcher("/WEB-INF/register.jsp").forward(req, resp);
                } else if (passWord.equals(z_passWord)) {
                    AdminService adminService = new AdminServiceImpl();
                    AdminEntity adminEntity = new AdminEntity();
                    adminEntity.setUserName(userName);
                    adminEntity.setPwd(passWord);
                    adminEntity.setState(state);
                    boolean b = adminService.addUser(adminEntity);
                    if (b) {
                        req.getSession().setAttribute("mes", "注册成功...");
                        resp.sendRedirect("/LoginServlet");
                    }
                } else {
                    req.getSession().setAttribute("mes", "您输入的两次密码不一致!");
                    req.getRequestDispatcher("/WEB-INF/register.jsp").forward(req, resp);
                }
                break;
            }
            case "loginExit": {
                resp.sendRedirect("/LoginServlet");
            }
        }
    }
}

 



参考链接:https://blog.csdn.net/m0_51545690/article/details/123384986

 

posted @ 2022-11-14 21:54  喝着农药吐泡泡o  阅读(1411)  评论(0编辑  收藏  举报