admin管理员组文章数量:1794759
Session
个人博客地址
验证码为随机生成,服务器从 session 获取验证码,并和用户输入的验证码进行比对,结果通过 requesrt 转发到 success.jsp 和 login.jsp
login.jsp
简单登陆页面:
<html>
<head><title>登陆</title><script>window.onload = function () {document.getElementById("img").onclick = function(){this.src="/day16/checkCodeServlet?time="+new Date().getTime();}}</script><style>div{color:red;}</style>
</head>
<body><form action="/day16/loginServlet" method="post"><table align="center"><tr><td>用户名</td><td><input type="text" name="username"></td></tr><tr><td>密码</td><td><input type="password" name="password"></td></tr><tr><td>验证码</td><td><input type="text" name="checkCode"></td></tr><tr><td colspan="2"><img src="/day16/checkCodeServlet" id="img"></td></tr><tr><td colspan="2"><input type="submit" value="登陆"></td></tr></table></form><div><%=request.getAttribute("cc_error")==null? "":request.getAttribute("cc_error")%></div><div><%=request.getAttribute("login_error")==null?"":request.getAttribute("login_error")%></div>
</body>
</html>
success.jsp
登陆成功后跳转到该页面,并获取用户信息展示:
<html>
<head><title>Title</title>
</head>
<body><h1><%=request.getSession().getAttribute("user") %>,欢迎您</h1>
</body>
</html>
LoginServlet
获取 session 中验证码信息,进行比对,并转发结果到相关页面。
@WebServlet("/loginServlet")
public class LoginServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//设置request编码request.setCharacterEncoding("utf-8");//获取参数String username = request.getParameter("username");String password = request.getParameter("password");String checkCode = request.getParameter("checkCode");//获取生成的验证码HttpSession session = request.getSession();String checkCode_session = (String) session.getAttribute("checkCode_session");//删除session中存储的验证码session.removeAttribute("checkCode_session");//判断验证码是否正确if(checkCode_session != null &&checkCode_session.equalsIgnoreCase(checkCode)){//忽略大小写比较字符串//验证码正确//判断用户名和密码是否一样if ("zhangsan".equals(username)&&"123".equals(password)){//查询数据库//登陆成功//存储用户信息session.setAttribute("user",username);//重定向到success.jspresponse.sendRedirect(request.getContextPath()+"/success.jsp");}else {//登陆失败//存储提示信息到requestrequest.setAttribute("login_error","用户名或密码错误");//转发到登陆页面request.getRequestDispatcher("/login.jsp").forward(request,response);}}else {//验证码不一致//存储提示信息到requestrequest.setAttribute("cc_error","验证码错误");//转发到登陆页面request.getRequestDispatcher("/login.jsp").forward(request,response);}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}
}
CheckCodeServlet
生成随机验证码,并存入 session 。
@WebServlet("/checkCodeServlet")
public class CheckCodeServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {int width = 100;int height = 50;//创建一个对象,在内存中画图(验证码图片对象)BufferedImage image = new BufferedImage(width,height,BufferedImage.TYPE_3BYTE_BGR);//美化图片//填充背景色Graphics g = image.getGraphics();//画笔对象g.setColor(Color.pink);//设置画笔颜色g.fillRect(0,0,width,height);//画边框g.setColor(Color.BLUE);g.drawRect(0,0,width -1,height-1);String str = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";//生成随机脚标Random ran = new Random();StringBuilder sb = new StringBuilder();//写验证码for (int i = 1; i <= 4; i++) {int index = ran.nextInt(str.length());//获取字符char ch = str.charAt(index);sb.append(ch);g.drawString(ch+"",width/5*i,height/2);}String checkCode_session = sb.toString();//将验证码存入sessionrequest.getSession().setAttribute("checkCode_session",checkCode_session);//画干扰线g.setColor(Color.green);//随机生成坐标点for (int i = 0; i < 10; i++) {int x1 = ran.nextInt(width);int x2 = ran.nextInt(width);int y1 = ran.nextInt(height);int y2 = ran.nextInt(height);g.drawLine(x1,y1,x2,y2);}//键土拍你输出到页面展示ImageIO.write(image,"jpg",response.getOutputStream());}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request,response);}
}
本文标签: session
版权声明:本文标题:Session 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1692734855a176613.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论