Session详解,学习 Session对象一篇文章就够了
目录
1 Session概述
2 Session原理
3 Session使用
3.1 获取Session
3.2 Session保存数据
3.3 Session获取数据
3.4 Session移除数据
4 Session与Request应用区别
4.1 Session和request存储数据
4.2 获取session和request中的值
4.3 session和request区别效果
5 Session的声明周期
5.1 Session有效时间设置
5.2 session销毁
.6 浏览器禁用Cookie解决方案(了解)
6.1 浏览器禁用Cookie的后果
6.2 URL重写
6.3 实现URL重写
7 Session实战权限验证
7.1 创建管理员表manager并添加数据
7.2 创建Web项目
7.3 基础环境搭建
7.4 登录页面
7.5 LoginMgrController
7.6 ShowAllManagerController
7.7 ShowAllManagerJsp
8 Session实战保存验证码
8.1 创建验证码
8.2 登录页面
8.3 LoginMgrController
8.4 ShowAllManagerController
今天的分享就到此结束了
创作不易点赞评论互关三连
1 Session概述
(1)Session用于记录用户的状态。Session指的是一段时间内,单个客户端与Web服务器的一连串相关的交互过程。
(2)在一个Session中,客户可能会多次请求访问同一个资源,也有可能请求访问各种不同的服务器资源。
(3)Session是由服务器端创建的
2 Session原理
(1)Session会为每一次会话分配一个Session对象
(2)同一个浏览器发起的多次请求,同属于一次会话(Session)
(3)首次使用到Session时,服务器会自动创建Session,并创建Cookie存储SessionId发送回客户端
3 Session使用
Session作用域:拥有存储数据的空间,作用范围是一次会话有效
-
一次会话是使用同一浏览器发送的多次请求。一旦浏览器关闭,则结束会话
-
可以将数据存入Session中,在一次会话的任意位置进行获取
-
可传递任何数据(基本数据类型、对象、集合、数组)
3.1 获取Session
Session是服务器端自动创建的,通过request对象获取
package com.cxyzxc.www.servlet01;import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;@WebServlet(name = "SessionServlet01", value = "/SessionServlet01")
public class SessionServlet01 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置请求参数的编码格式,这种方式对get请求方式无效request.setCharacterEncoding("UTF-8");//设置响应编码格式为UTF-8response.setContentType("text/html;charset=UTF-8");//获取Session对象,首次使用到Session时,服务器会自动创建Session,并创建Cookie存储SessionId发送回客户端HttpSession session = request.getSession();System.out.println("ID:" + session.getId());//唯一标记}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
3.2 Session保存数据
使用setArrtibute(属性名,Object)保存数据到session中
package com.cxyzxc.www.servlet01;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;@WebServlet(name = "SessionServlet02", value = "/SessionServlet02")
public class SessionServlet02 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置请求参数的编码格式,这种方式对get请求方式无效request.setCharacterEncoding("UTF-8");//设置响应编码格式为UTF-8response.setContentType("text/html;charset=UTF-8");//获取Session对象,首次使用到Session时,服务器会自动创建Session,并创建Cookie存储SessionId发送回客户端HttpSession session = request.getSession();//将数据存储以键值对的形式到session对象中,可传递任何数据(基本数据类型、对象、集合、数组)session.setAttribute("username","张三");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
3.3 Session获取数据
(1)使用getAttribute("属性名");获取session中数据。
(2)先访问SessionServlet02将数据存储到session对象中,然后通过GetSessionValueServlet01请求获取session中的数据
package com.cxyzxc.www.servlet01;import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;@WebServlet(name = "GetSessionValueServlet01", value = "/GetSessionValueServlet01")
public class GetSessionValueServlet01 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置请求参数的编码格式,这种方式对get请求方式无效request.setCharacterEncoding("UTF-8");//设置响应编码格式为UTF-8response.setContentType("text/html;charset=UTF-8");//获取Session对象HttpSession session = request.getSession();//获取session对象中的值,获取的值是Object类型,转换为其对应的类型String username = (String) session.getAttribute("username");System.out.println("session对象中存储的username值:" + username);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
3.4 Session移除数据
(1)使用removeAttribute("属性名");从session中删除数据
(2)向请求SessionServlet02向session对象中存储数据,然后访问GetSessionValueServlet01可以获取session对象中的值,再访问SessionServlet03移除session对象中存储的数据,最后访问GetSessionValueServlet01获取session对象中的值为null
package com.cxyzxc.www.servlet01;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;@WebServlet(name = "SessionServlet03", value = "/SessionServlet03")
public class SessionServlet03 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置请求参数的编码格式,这种方式对get请求方式无效request.setCharacterEncoding("UTF-8");//设置响应编码格式为UTF-8response.setContentType("text/html;charset=UTF-8");//获取Session对象,首次使用到Session时,服务器会自动创建Session,并创建Cookie存储SessionId发送回客户端HttpSession session = request.getSession();//通过键移除session作用域中的值session.removeAttribute("username");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
4 Session与Request应用区别
(1)request是一次请求有效,请求改变,则request改变
(2)session是一次会话有效,浏览器改变,则session改变
4.1 Session和request存储数据
package com.cxyzxc.www.servlet01;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;@WebServlet(name = "SessionServlet04", value = "/SessionServlet04")
public class SessionServlet04 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置请求参数的编码格式,这种方式对get请求方式无效request.setCharacterEncoding("UTF-8");//设置响应编码格式为UTF-8response.setContentType("text/html;charset=UTF-8");//获取Session对象HttpSession session = request.getSession();//使用session存储数据session.setAttribute("username","zhangsan");//使用request存储数据request.setAttribute("password","123456");//重定向response.sendRedirect("/webProject10_war_exploded/GetSessionValueServlet01");}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
4.2 获取session和request中的值
package com.cxyzxc.www.servlet01;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;@WebServlet(name = "GetSessionValueServlet01", value = "/GetSessionValueServlet01")
public class GetSessionAndRequestValueServlet01 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置请求参数的编码格式,这种方式对get请求方式无效request.setCharacterEncoding("UTF-8");//设置响应编码格式为UTF-8response.setContentType("text/html;charset=UTF-8");//获取Session对象HttpSession session = request.getSession();//获取session对象中的值,获取的值是Object类型,转换为其对应的类型String username = (String) session.getAttribute("username");//获取request对象中的值,获取的值是Object类型,转换为其对应的类型String password = (String) request.getAttribute("password");System.out.println("session对象中存储的username值:" + username);System.out.println("request对象中存储的password值:" + password);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
4.3 session和request区别效果
5 Session的声明周期
-
开始
第一次使用到Session的请求产生,则创建Session
-
结束
-
浏览器关闭,则失效
-
Session超时,则失效
session.setMaxInactiveInterval(seconds);//设置最大有效时间(单位:秒)
-
手工销毁,则失效
session.invalidate();//登录退出,销毁
-
5.1 Session有效时间设置
SessionServlet05类设置session有效期为20秒,先通过请求SessionServlet05类将session存储在,然后在20秒内第一次在GetSessionValueServlet02获取sessionID值,与SessionServlet05类中输出的id值一致,过20秒后在GetSessionValueServlet02类中输出的sessionID值不一致了
package com.cxyzxc.www.servlet01;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;@WebServlet(name = "SessionServlet05", value = "/SessionServlet05")
public class SessionServlet05 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置请求参数的编码格式,这种方式对get请求方式无效request.setCharacterEncoding("UTF-8");//设置响应编码格式为UTF-8response.setContentType("text/html;charset=UTF-8");//获取Session对象,首次使用到Session时,服务器会自动创建Session,并创建Cookie存储SessionId发送回客户端HttpSession session = request.getSession();//设置session有效期,时间单位为秒session.setMaxInactiveInterval(20);//输出sessionid值System.out.println("SessionServlet05类中输出ID:"+session.getId());}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
5.2 session销毁
先使用GetSessionValueServlet03类获取session的id值,然后使用GetSessionValueServlet04类获取session的id值,两个类获取的id值一致,在GetSessionValueServlet04类中输出id值后销毁了session,然后再在GetSessionValueServlet03类中获取id值,就不一致了,就是服务器新建的session对象了
5.2.1 GetSessionValueServlet03类
package com.cxyzxc.www.servlet01;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;@WebServlet(name = "GetSessionValueServlet03", value = "/GetSessionValueServlet03")
public class GetSessionValueServlet03 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置请求参数的编码格式,这种方式对get请求方式无效request.setCharacterEncoding("UTF-8");//设置响应编码格式为UTF-8response.setContentType("text/html;charset=UTF-8");//获取Session对象HttpSession session = request.getSession();//输出sessionid值System.out.println("GetSessionValueServlet03类中输出ID:"+session.getId());}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
5.2.2 GetSessionValueServlet04类
package com.cxyzxc.www.servlet01;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;@WebServlet(name = "GetSessionValueServlet04", value = "/GetSessionValueServlet04")
public class GetSessionValueServlet04 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置请求参数的编码格式,这种方式对get请求方式无效request.setCharacterEncoding("UTF-8");//设置响应编码格式为UTF-8response.setContentType("text/html;charset=UTF-8");//获取Session对象HttpSession session = request.getSession();//输出sessionid值System.out.println("GetSessionValueServlet04类中输出ID:"+session.getId());//销毁sessionsession.invalidate();}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
.6 浏览器禁用Cookie解决方案(了解)
6.1 浏览器禁用Cookie的后果
服务器在默认情况下,会使用Cookie的方式将sessionID发送给浏览器,如果用户禁止Cookie,则sessionID不会被浏览器保存,此时,服务器可以使用URL重写这样的方式来发送sessionID
多次请求GetSessionValueServlet05类输出的session的id值都不相同,并且在网站的Cookie对象中没有session的id值存在
6.2 URL重写
浏览器在访问服务器上的某个地址时,不再使用原来的那个地址,而是使用经过改写的地址(即在原来的地址后面加上了sessionID)
6.3 实现URL重写
response.encodeRedirectURL(String url)生成重写的URL
6.3.1 重写URL
package com.cxyzxc.www.servlet01;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;@WebServlet(name = "GetSessionValueServlet06", value = "/GetSessionValueServlet06")
public class GetSessionValueServlet06 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置请求参数的编码格式,这种方式对get请求方式无效request.setCharacterEncoding("UTF-8");//设置响应编码格式为UTF-8response.setContentType("text/html;charset=UTF-8");//获取Session对象HttpSession session = request.getSession();//输出sessionid值System.out.println("GetSessionValueServlet06类中输出ID:"+session.getId());//重写URL追加session值String newURL = response.encodeURL("/webProject10_war_exploded/GetSessionValueServlet07");System.out.println("重写后的URL:"+newURL);//重定向response.sendRedirect(newURL);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
6.3.1 获取session
package com.cxyzxc.www.servlet01;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;@WebServlet(name = "GetSessionValueServlet07", value = "/GetSessionValueServlet07")
public class GetSessionValueServlet07 extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置请求参数的编码格式,这种方式对get请求方式无效request.setCharacterEncoding("UTF-8");//设置响应编码格式为UTF-8response.setContentType("text/html;charset=UTF-8");//获取Session对象HttpSession session = request.getSession();//输出sessionid值System.out.println("GetSessionValueServlet07类中输出ID:"+session.getId());}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
7 Session实战权限验证
7.1 创建管理员表manager并添加数据
7.2 创建Web项目
创建Web项目,导入相关jar包
-
commons-dbutils-1.7.jar
-
druid-1.1.5.jar
-
mysql-connector-java-5.1.25-bin.jar
-
servlet-api.jar
7.3 基础环境搭建
在项目下创建包目录结构如下
-
com.cxyzxc.www.controller包:调用业务逻辑Servlet
-
com.cxyzxc.www.dao包:数据访问层接口
-
com.cxyzxc.www.dao.impl包:数据访问层接口实现类
-
com.cxyzxc.www.entity包:实体类
-
com.cxyzxc.www.jsp包:打印显示页面Servlet
-
com.cxyzxc.www.service包:业务逻辑层接口
-
com.cxyzxc.www.service.impl包:业务逻辑层接口实现类
-
com.cxyzxc.www.utils包:工具类
-
database.properties:数据库连接及连接池配置文件
7.4 登录页面
7.4.1 login.html
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>管理员登录页面</title><link type="text/css" rel="stylesheet" href="css/login.css"/></head><body><div><form action="LoginMgrController" method="post"><p>账号:<input type="text" name="username"/></p><p>密码:<input type="password" name="password"/></p><p><input type="submit" value="登录"/></p></form></div></body>
</html>
7.4.2 login.css
* {margin: 0;padding: 0;
}div {width: 400px;background-color: #ccc;margin: 30px auto;padding-top: 30px;text-align: center;
}p {margin-top: 10px;
}input {outline: none;
}
7.5 LoginMgrController
package com.cxyzxc.www.controller;import com.cxyzxc.www.entity.Manager;
import com.cxyzxc.www.service.ManagerService;
import com.cxyzxc.www.service.impl.ManagerServiceImpl;import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;@WebServlet(name = "LoginMgrController", value = "/LoginMgrController")
public class LoginMgrController extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1、处理乱码request.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");//2、收参(获取客户端发送过来的请求数据)String username = request.getParameter("username");String password = request.getParameter("password");//3、调用业务方法ManagerService managerService = new ManagerServiceImpl();Manager manager = managerService.login(username, password);//4、处理结果,根据结果做不同的跳转if (manager != null) {//manager不为null,说明账号和密码正确,登录成功//将获取的账号和密码信息存储在session中HttpSession session = request.getSession();session.setAttribute("manager", manager);//跳转到显示所有管理员信息的Servletresponse.sendRedirect("/managerProject01_war_exploded/ShowAllManagerController");} else {//manager为null。说明账号或者密码错误,登录失败response.sendRedirect("/managerProject01_war_exploded/login.html");}}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
7.6 ShowAllManagerController
package com.cxyzxc.www.controller;import com.cxyzxc.www.entity.Manager;
import com.cxyzxc.www.service.ManagerService;
import com.cxyzxc.www.service.impl.ManagerServiceImpl;import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.util.List;@WebServlet(name = "ShowAllManagerController", value = "/ShowAllManagerController")
public class ShowAllManagerController extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1、处理乱码request.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");//通过HttpSession完成权限控制HttpSession session =request.getSession();//获取session中存储的值Manager manager = (Manager)session.getAttribute("manager");//判断获取的值if(manager!=null){//调用业务,只做业务,业务与显示分离ManagerService managerService = new ManagerServiceImpl();List<Manager> managers =managerService.showAllManager();//将获取的数据存储在request作用域中request.setAttribute("managers",managers);//转发,跳转到显示结果的Servletrequest.getRequestDispatcher("/ShowAllManagerJsp").forward(request,response);}else{//说明没有登录,要先去登录才能进行显示response.sendRedirect("/managerProject01_war_exploded/login.html");}}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
7.7 ShowAllManagerJsp
package com.cxyzxc.www.jsp;import com.cxyzxc.www.entity.Manager;import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;@WebServlet(name = "ShowAllManagerJsp", value = "/ShowAllManagerJsp")
public class ShowAllManagerJsp extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1、处理乱码request.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");//2、获取数据List<Manager> managers = (List<Manager>) request.getAttribute("managers");//获取输出流PrintWriter printWriter = response.getWriter();if (managers.size() != 0) {printWriter.println("<html>");printWriter.println("<head>");printWriter.println("<title>所有管理员</title>");printWriter.println("<link type=\"text/css\" rel=\"stylesheet\" href=\"css/table.css\" />");printWriter.println("</head>");printWriter.println("<table border='1px' cellspacing='0'>");printWriter.println("<tr>");printWriter.println(" <th>序号</th>");printWriter.println(" <th>账号</th>");printWriter.println(" <th>密码</th>");printWriter.println(" <th>操作</th>");printWriter.println(" </tr>");for (int i = 0; i < managers.size(); i++) {printWriter.println("<tr>");printWriter.println("<td>" + (i + 1) + "</td>");printWriter.println("<td>" + managers.get(i).getUsername() + "</td>");printWriter.println("<td>" + managers.get(i).getPassword() + "</td>");printWriter.println("<td><a href=\"#\">修改</a> <a href=\"#\">删除</a></td>");printWriter.println("</tr>");}printWriter.println("</table>");printWriter.println("</html>");} else {printWriter.println("<h2>数据库中没有数据查询</h2>");}}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
8 Session实战保存验证码
生成验证码的方式有很多种,可以使用随机数的方式实现,也可以使用ValidateCode类来实现(需要导入ValidateCode.jar包)。在这里,我们学习使用ValidateCode类来生成验证码
8.1 创建验证码
package com.cxyzxc.www.controller;import cn.dsna.util.images.ValidateCode;import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;/*** 此Servlet的作用是生成验证码并将生成的验证码存储到session中、发送到页面中显示*/
@WebServlet(name = "VerificationServlet", value = "/VerificationServlet")
public class VerificationServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置验证码规格ValidateCode validateCode = new ValidateCode(200, 20, 4, 10);//获取验证码String code = validateCode.getCode();//将验证码存储在session中HttpSession session = request.getSession();session.setAttribute("code",code);//将验证码输出到客户端validateCode.write(response.getOutputStream());}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
8.2 登录页面
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>管理员登录页面</title><link type="text/css" rel="stylesheet" href="css/login.css"/></head><body><div><form action="LoginMgrController" method="post"><p>账号:<input type="text" name="username"/></p><p>密码:<input type="password" name="password"/></p><p>验证码:<input type="text" name="verification"/><img src="/managerProject02_war_exploded/VerificationServlet" /></p><p><input type="submit" value="登录"/></p></form></div></body>
</html>
8.3 LoginMgrController
package com.cxyzxc.www.controller;import com.cxyzxc.www.entity.Manager;
import com.cxyzxc.www.service.ManagerService;
import com.cxyzxc.www.service.impl.ManagerServiceImpl;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;@WebServlet(name = "LoginMgrController", value = "/LoginMgrController")
public class LoginMgrController extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1、处理乱码request.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");//2、收参(获取客户端发送过来的请求数据)String username = request.getParameter("username");String password = request.getParameter("password");String inputCodde = request.getParameter("verification");//获取session中的验证码HttpSession session = request.getSession();String codes = (String) session.getAttribute("code");if (!inputCodde.isEmpty() && inputCodde.equalsIgnoreCase(codes)) {//3、调用业务方法ManagerService managerService = new ManagerServiceImpl();Manager manager = managerService.login(username, password);//4、处理结果,根据结果做不同的跳转if (manager != null) {//manager不为null,说明账号和密码正确,登录成功//将获取的账号和密码信息存储在session中HttpSession session2 = request.getSession();session2.setAttribute("manager", manager);//跳转到显示所有管理员信息的Servletresponse.sendRedirect("/managerProject02_war_exploded/ShowAllManagerController");} else {//manager为null。说明账号或者密码错误,登录失败response.sendRedirect("/managerProject02_war_exploded/login.html");}} else {//验证码不对,重新登录response.sendRedirect("/managerProject02_war_exploded/login.html");}}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
8.4 ShowAllManagerController
package com.cxyzxc.www.controller;import com.cxyzxc.www.entity.Manager;
import com.cxyzxc.www.service.ManagerService;
import com.cxyzxc.www.service.impl.ManagerServiceImpl;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.util.List;@WebServlet(name = "ShowAllManagerController", value = "/ShowAllManagerController")
public class ShowAllManagerController extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//通过HttpSession完成权限控制HttpSession session =request.getSession();//获取session中存储的值Manager manager = (Manager)session.getAttribute("manager");//判断获取的值if(manager!=null){//调用业务,只做业务,业务与显示分离ManagerService managerService = new ManagerServiceImpl();List<Manager> managers =managerService.showAllManager();//将获取的数据存储在request作用域中request.setAttribute("managers",managers);//转发,跳转到显示结果的Servletrequest.getRequestDispatcher("/ShowAllManagerJsp").forward(request,response);}else{//说明没有登录,要先去登录才能进行显示response.sendRedirect("/managerProject02_war_exploded/login.html");}}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doGet(request, response);}
}
今天的分享就到此结束了
创作不易点赞评论互关三连
相关文章:
Session详解,学习 Session对象一篇文章就够了
目录 1 Session概述 2 Session原理 3 Session使用 3.1 获取Session 3.2 Session保存数据 3.3 Session获取数据 3.4 Session移除数据 4 Session与Request应用区别 4.1 Session和request存储数据 4.2 获取session和request中的值 4.3 session和request区别效果 5 Sess…...
Java——不同的子序列
题目链接 leetcode在线oj题——不同的子序列 题目描述 给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。 字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新…...
Git 基本操作之Git GUI界面和git命令行如何选择
1. 为啥推荐使用git命令行 我发现公司有很多的同事都喜欢使用git的GUI界面工具,喜欢鼠标点点点就完成了代码的提交,这种方式的确是比较简单便捷,但是却存在风险。先上一个事故给大家醒醒脑。 VScode Git 界面操作引发的惨案 上面的惨案是VS…...
Python编程 动态爱心
作者简介:一名在校计算机学生、每天分享Python的学习经验、和学习笔记。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页 目录 前言 一.所用库 1.random简介 2.math 简介 3.tkinter库的简介 二.实际图 三.…...
JavaScript :基础语法
位置: HTML 中的 Javascript 脚本代码必须位于 <script> 与 </script> 标签之间。 JavaScript 输出方式 window.alert() 弹出警告框。document.write() 将内容写到 HTML 文档中。innerHTML 写入到 HTML 元素。console.log() 写入到浏览器的控制台。 …...
buu [AFCTF2018]Single 1
题目描述: Jmqrida rva Lfmz (JRL) eu m uqajemf seny xl enlxdomrexn uajiderc jxoqarerexnu. Rvada mda rvdaa jxooxn rcqau xl JRLu: Paxqmdyc, Mrrmjs-Yalanja mny oekay. Paxqmdyc-urcfa JRLu vmu m jxiqfa xl giaurexnu (rmusu) en dmnza xl jmrazxdeau. Lxd …...
Linux C++ 200行完成线程池类
文章目录1、atomic使用2、volatile关键字3、条件变量4、成员函数指针使用5、线程池6、主线程先退出对子线程影响7、return、exit、pthread_exit区别8、进程和线程的区别1、atomic使用 原子操作,不可分割的操作,要么完整,要么不完整。 #includ…...
C语言指针剖析(初阶) 最详细!
什么是指针?指针和指针类型野指针指针运算指针和数组二级指针指针数组什么是指针?指针是内存中一个最小单元的编号,也就是地址。1.把内存划分为一个个的内存单元,一个内存单元的大小是一个字节。2.每个字节都给定唯一的编号&#…...
AcWing语法基础课笔记 第三章 C++中的循环结构
第三章 C中的循环结构 学习编程语言语法是次要的,思维是主要的。如何把头脑中的想法变成简洁的代码,至关重要。 ——闫学灿 学习循环语句只需要抓住一点——代码执行顺序! while循环 可以简单理解为循环版的if语句。If语句是判断一次…...
A simple freeD tracking protocol implementation written in golang
可以使用的go版本freed调试代码 可以通过udp发送和接收数据 What is freeD? freeD is a very simple protocol used to exchange camera tracking data. It was originally developed by Vinten and is now supported by a wide range of hard- and software including Unreal…...
简约精美电商小程序【源码好优多】
简介 一款开源的电商系统,包含微信小程序和H5端,为大中小企业提供移动电子商务优秀的解决方案。 后台采用Thinkphp5.1框架开发,执行效率、扩展性、稳定性值得信赖。并且Jshop小程序商城上手难度低,可大量节省定制化开发周期。 功…...
全网详解 .npmrc 配置文件:比如.npmrc的优先级、命令行,如何配置.npmrc以及npm常用命令等
文章目录1. 文章引言2. 简述.npmrc3. 配置.npmrc3.1 .npmrc配置文件的优先级3.2 .npmrc设置的命令行3.3 如何设置.npmrc4. 配置发布组件5. npm常用命令6. 重要备注6.1 yarn6.2 scope命名空间6.3 镜像出错1. 文章引言 今天在某低代码平台开发项目时,看到如下编译配置…...
从0开始学python -31
Python3 模块-1 在前面的几个章节中我们基本上是用 python 解释器来编程,如果你从 Python 解释器退出再进入,那么你定义的所有的方法和变量就都消失了。 为此 Python 提供了一个办法,把这些定义存放在文件中,为一些脚本或者交互…...
Jenkins的使用教程
介绍: Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。 目的: 最重要目的就是把原来分散在各个机器上繁杂的工作全部…...
1.Maven的坐标和依赖
【maven坐标】1.groupId: 通常与域名反向一一对应2.artifactId: 通常使用实际项目名称3.version: 项目当前版本号4.packaging:maven项目的打包方式,默认是jar5.classifier: 定义构建输出的一些附属构件,例如:nexus-indexer-2.0.0.…...
Jenkins 笔记
Jenkins brew install jenkins-lts brew services restart jenkins-lts brew services stop jenkins-lts b999ff5683464346b6d083f894968121 l 软件构建自动化 :配置完成后,CI系统会依照预先制定的时间表,或者针对某一特定事件,…...
Python和Java语言,哪个更适合做自动化测试?
经常有测试新手问我:Python和Java语言,哪个更适合做自动化测试?本来想简单的回答一下的,但又觉得对不起大家对小编的信任。因此,小编今天专门写了一篇文章来回答这个问题。欢迎各位大佬补充~1、什么是自动化测试&#…...
互联网的路由选择协议
互联网的路由选择协议 文章目录互联网的路由选择协议路由选择协议的几个概念分层次路由选择协议内部网关协议RIP协议距离向量算法RIP协议的报文格式内部网关协议OSPFOSPF的报文格式✨OSPF的特点外部网关协议BGPBGP的报文格式参考本篇主要讨论的是路由表中的路由是如何得出来的。…...
接口幂等性处理
1.Token 机制: a首先客户端请求服务端,获取一个 token,每一次请求都获取到一个全新的 token(当然这个 token 会有一个超时时间),将 token 存入 redis 中,然后将 token 返回给客户端。 b客户端…...
数字孪生智慧机场:透视数字化时代下的航空运营
在《智慧民航建设路线图》文件中,民航局明确指出,智慧机场是实现智慧民航的四个核心抓手之一。这一战略性举措旨在推进数字化技术与航空产业的深度融合,为旅客提供更加智能化、便捷化、安全化的出行服务,进一步提升我国民航发展的…...
SpringBoot 文件上传后查看404的问题和解决404后需要访问两次才能查看的问题
文件上传、图片上传的实现见这个: SpringBootVue 实现头像上传功能_Teln_小凯的博客-CSDN博客 在实现上面的功能后,发现查看图片的时候提示404,解决这个方法如下: 1、配置资源静态文件映射 第一个参数是页面请求的地址&#x…...
定时任务使用总结
定时任务表达式生成工具网站:https://cron.qqe2.com/定时任务选型:xxl-job 官方文档:https://www.xuxueli.com/xxl-job/安装定时任务调度中心 xxl-job-admin第一步、先导入xxl-job的数据库:地址:https://gitee.com/xux…...
Jira和Confluence Server版终止支持倒计时365天,企业应对策略汇总
本文对Atlassian最新的Server版政策进行了解读,并给出应对方案;同时我们也将国内热门的替代工具与jira进行了比较细致的对比,以及介绍替换的优惠政策等。今天是2023年2月15日,距离 Atlassian 旗下 Jira、Confluence 等系列产品中国…...
GEE学习笔记九十一:栅格影像叠置分析
最近发现好多人都在问一个问题,两张影像如何取其相交区域?其实这个问题简单来讲就是多张栅格影像进行叠加分析。在GEE中栅格影像不像矢量数据那样有直接的函数来做数据分析,需要我们自己手动写一些代码来实现这些操作。要实现这个功能有很多方…...
linux系统编程入门
一、搭建环境 1、安装 Linux 系统(虚拟机安装、云服务器) https://releases.ubuntu.com/bionic/ 2、安装 XSHELL、XFTP https://www.netsarang.com/zh/free-for-home-school/ 3、安装 visual studio code https://code.visualstudio.com/ 4、Linu…...
JS代码安全防护常见的方式
文章目录1. 常量的混淆1.1 十六进制字符串1.2 unicode字符串1.3 字符串的ASCII码混淆1.4 字符串常量加密1.5 数值常量加密2. 增加逆向分析难度2.1 数组混淆2.2 数组乱序2.3 花指令2.4 jsfuck3. 代码执行流程的防护3.1 流程平坦化3.2 逗号表达式4. 其他代码防护方案4.1 eval加密…...
PHP(13)HTTP协议
PHP(13)HTTP协议一、HTTP请求1. 请求行2. 请求头3. 请求体二、HTTP响应1. 响应行2. 响应头三、设置HTTP响应四、模拟HTTP请求一、HTTP请求 1. 请求行 请求行独占一行。形式:请求方式 资源路径 协议版本号 GET /index.php HTTP/1.1 2. 请求…...
基于支持向量机 (SVM) 用php实现预测气温
Windows 10自带的天气应用有一个基于历史数据预测气温的功能,有一定的参考价值。那么如何去实现这一功能呢?本文采用php进行实现。 使用机器学习方法实现预测当日气温的算法需要涵盖许多的步骤,以下是一种基于支持向量机 (SVM) 的算法的简化…...
MySQL(五)
通过索引进行优化 索引基本知识 索引的优点 1、大大减少了服务器需要扫描的数据量2、帮助服务器避免排序和临时表3、将随机io变成顺序io 索引的用处 1、快速查找匹配WHERE子句的行2、从consideration中消除行,如果可以在多个索引之间进行选择,mysql通常会使用找到…...
Linux常用命令2
目录1.查找find(1)普通用法(2)组合用法2.xargs命令3.管道符4.查看文件内容(1)查看两个文件的差别:diff file1 fille2(2)正序查看文件内容cat(3)倒序查看文件内容tac(4)分页查看文件内容more(5)分页查看文件内容less(6)…...
网站如何兼容大多浏览器/各个广告联盟的标识
以(2 5)对换为例 (2 5) (1 2)(1 5)(1 2)(1 5)(1 2)(1 5)(4 5)(3 4)(2 3)(3 4)(4 5) 当拆解的对换很多时如何看待? 例如最后一种拆解方式, 元素4->5(第一次对换)->4(最后一次对换) 元素5->4(第一次对换)->3(第二次对换)->2(第三次对换且后面的对换中没有关于2的…...
做网站公司那家好/推广获客
pyramid setup参考http://docs.pylonsproject.org/en/latest/docs/pyramid.html今天是2012-03-12讲的都是安装好Python2.7,以及在ubuntu操作系统下面:1.首先装Pyramid,测试语句import setuptools,没有ImportError错误,…...
phpwind做的网站/广告投放
手机CPU天梯图3月版在上一期的“手机CPU怎么看好坏 手机CPU天梯图2019年2月最新版”中,我们为大家聊了如何去判断一看处理器性能,大致最核心的主要是架构、主频、核心、基带、功耗等方面,今天就不再介绍一些参数部分了。以下是手机CPU天梯图2…...
wordpress资源网主题/百度关键字优化价格
IT职场中,有几个看上去就很危险、没有前途的职业;也有一些看上去很美,但前途也很危险的职业。本系列将大致列举其中一些,并给出一些如果已经位于这些职业中,应该如何处理的方法。 如何判断危险职业 整体上有两种危险职…...
建设厅网站怎么打印不出来/广州头条新闻最新
window.alert("hello world.");转载于:https://www.cnblogs.com/Kennytian/archive/2007/02/26/656748.html...
wordpress 自动抓取/天津网站排名提升多少钱
我正在使用Webphere服务器。我正在使用Apache FileUpload方法通过servlet执行文件上传。上传文件时的Ajax请求需要很长时间才能完成我附加了一个侦听器到这个FileUpload,它更新了一个“百分比”字段,表示已经处理了多少百分比的请求。请求被定向到一个if…...