JavaWeb简单用户登录注册实例代码(有验证码)
需求
- 编写login登录界面(用户名,密码,验证码,登陆按钮,注册按钮)
- 设计关系数据库(编号,用户名,密码)
- 编写注册功能,将数据存储在数据库中。(姓名不能重复,设为主键,重复会注册失败)
- 编写登录功能。首先获取验证码,先判断验证码是否正确,不正确则显示验证码错误。验证码正确后再获取用户名和密码,进行数据库的搜索比对,若正确则重定向到成功的界面,并且将用户名显示。
jar包
技术选型
Servlet+JSP+Mysql+JDBCTemplate+Druid+BeanUtils+Tomcat
效果图
验证码或者用户名和密码错误
NavicatPremium显示Mysql内容
注册功能
源码
登录主界面login.jsp
<%@pagecontentType="text/html;charset=UTF-8"language="java"%>Login
用户名 密码 验证码 ${requestScope.login_error}${requestScope.checkcode_error}
注册界面register.jsp
<%@pagecontentType="text/html;charset=UTF-8"language="java"%>Title
用户名 密码 ${requestScope.register_success}${requestScope.register_error}
成功界面success.jsp
<%@pagecontentType="text/html;charset=UTF-8"language="java"%>Title <%--${requestScope.user},欢迎您
--%><%=request.getSession().getAttribute("user")%>,欢迎您
先编辑好JDBCUtils工具类
packagecn.code.util; importcom.alibaba.druid.pool.DruidDataSourceFactory; importjavax.sql.DataSource; importjava.io.IOException; importjava.io.InputStream; importjava.sql.Connection; importjava.sql.SQLException; importjava.util.Properties; /** *JDBC工具类使用Durid连接池 */ publicclassJDBCUtils{ privatestaticDataSourceds; static{ try{ //加载配置文件 Propertiespro=newProperties(); //使用ClassLoader加载配置文件,获取字节输入流 InputStreamis=JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"); pro.load(is); //初始化连接池对象 ds=DruidDataSourceFactory.createDataSource(pro); }catch(Exceptione){ e.printStackTrace(); } } /** *获取连接池对象 */ publicstaticDataSourcegetDataSource(){ returnds; } /** *获取连接connection对象 */ publicstaticConnectiongetConnection()throwsSQLException{ returnds.getConnection(); } }
创建我们的用户类实体User
packagecn.code.domain; /* 用户的实体类 */ publicclassUser{ privateintid; privateStringusername; privateStringpassword; publicintgetId(){ returnid; } publicvoidsetId(intid){ this.id=id; } publicStringgetUsername(){ returnusername; } publicvoidsetUsername(Stringusername){ this.username=username; } publicStringgetPassword(){ returnpassword; } publicvoidsetPassword(Stringpassword){ this.password=password; } @Override publicStringtoString(){ return"User{"+ "id="+id+ ",username='"+username+'\''+ ",password='"+password+'\''+ '}'; } }
编写Dao来操作数据库,里面有login和add两个方法Userdao
packagecn.code.dao; importcn.code.domain.User; importcn.code.util.JDBCUtils; importorg.springframework.dao.DataAccessException; importorg.springframework.jdbc.core.BeanPropertyRowMapper; importorg.springframework.jdbc.core.JdbcTemplate; importjava.sql.Connection; importjava.sql.SQLException; importjava.sql.Statement; /** *操作数据库中User表的类 */ publicclassUserDao{ //声明JDBCTemplate对象,以便方法公用 privateJdbcTemplatetemplate=newJdbcTemplate(JDBCUtils.getDataSource()); /** *登录方法 * *@paramloginUser目前只有用户名和密码 *@returnuser包含用户全部数据 */ publicUserlogin(UserloginUser){ //编写SQL Stringsql="select*fromuserwhereusername=?andpassword=?"; //调用query方法 try{ Useruser=template.queryForObject(sql, newBeanPropertyRowMapper(User.class), loginUser.getUsername(),loginUser.getPassword()); returnuser; }catch(DataAccessExceptione){ e.printStackTrace(); returnnull; } } /** *注册方法 * *@paramuser目前只包含用户名和密码 *@return是否注册成功 */ publicbooleanadd(Useruser){ //编写SQL Stringsql="insertintouser(username,password)VALUES('"+user.getUsername()+"','"+user.getPassword()+"')"; booleanflag=false; intnum=0; try{ //创建数据库连接 Connectionconn=JDBCUtils.getConnection(); Statementstate=null; flag=false; num=0; state=conn.createStatement(); num=state.executeUpdate(sql); }catch(SQLExceptione){ e.printStackTrace(); } if(num>0)flag=true; returnflag; } }
登录的Servlet
packagecn.code.servlet; importcn.code.dao.UserDao; importcn.code.domain.User; importjavax.servlet.ServletException; importjavax.servlet.annotation.WebServlet; importjavax.servlet.http.HttpServlet; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; importjavax.servlet.http.HttpSession; importjava.io.IOException; @WebServlet("/loginServlet") publicclassLoginServletextendsHttpServlet{ protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ //设置字符编码 request.setCharacterEncoding("utf-8"); //获取参数 Stringusername=request.getParameter("username"); Stringpassword=request.getParameter("password"); Stringcheckcode=request.getParameter("checkcode"); //获取生成的验证码 HttpSessionsession=request.getSession(); Stringcheckcode_session=(String)session.getAttribute("checkcode_session"); //防止验证码存储删除Session中存储的验证码 session.removeAttribute("checkcode_session"); //判断验证码是否正确 if(checkcode_session!=null&&checkcode_session.equalsIgnoreCase(checkcode)){ //equalsIgnoreCase忽略大小写的比较 //验证码正确 UserloginUser=newUser(); loginUser.setUsername(username); loginUser.setPassword(password); Useruser=newUserDao().login(loginUser); if(user!=null){ //用户名以及密码正确 //登录成功 //存储用户信息 session.setAttribute("user",username);//因为是两次请求,所以用Session //重定向到success.jsp response.sendRedirect(request.getContextPath()+"/success.jsp"); }else{ //用户名及密码错误 //登录失败 //存储提示信息到request request.setAttribute("login_error","用户名或密码错误"); //转发到登录页面 request.getRequestDispatcher("/login.jsp").forward(request,response); } }else{ //验证码不正确 //存储提示信息到request request.setAttribute("checkcode_error","验证码错误"); //转发到登录页面 request.getRequestDispatcher("/login.jsp").forward(request,response); } } protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ this.doPost(request,response); } }
注册的Servlet
packagecn.code.servlet; importcn.code.dao.UserDao; importcn.code.domain.User; importjavax.servlet.ServletException; importjavax.servlet.annotation.WebServlet; importjavax.servlet.http.HttpServlet; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; importjava.io.IOException; @WebServlet("/registerServlet") publicclassRegisterServletextendsHttpServlet{ protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ request.setCharacterEncoding("utf-8"); Stringusername=request.getParameter("username"); Stringpassword=request.getParameter("password"); UserregisterUser=newUser(); registerUser.setUsername(username); registerUser.setPassword(password); booleanflag=newUserDao().add(registerUser); if(flag){ request.setAttribute("register_success","注册成功"); request.getRequestDispatcher("/register.jsp").forward(request,response); }else{ request.setAttribute("register_error","账号以被注册,注册失败"); request.getRequestDispatcher("/register.jsp").forward(request,response); } } protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ this.doPost(request,response); } }
在页面中画验证码(可点击更换)Servlet
packagecn.code.checkcode; importjavax.imageio.ImageIO; importjavax.servlet.ServletException; importjavax.servlet.annotation.WebServlet; importjavax.servlet.http.HttpServlet; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; importjava.awt.*; importjava.awt.image.BufferedImage; importjava.io.IOException; importjava.util.Random; //简易验证码 @WebServlet("/checkCodeServlet") publicclassCheckCodeServletextendsHttpServlet{ protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ intwidth=100; intheight=50; //创建一对象,在内存中代表图片(验证码图片对象) BufferedImageimage=newBufferedImage(width,height,BufferedImage.TYPE_INT_BGR); //美化图片 //填充背景色 Graphicsg=image.getGraphics();//画笔对象 g.setColor(Color.ORANGE); g.fillRect(0,0,width,height); //画边框 g.setColor(Color.BLUE); g.drawRect(0,0,width-1,height-1); Stringstr="QWERTYUIOPASDFGHJKLZXCVBNM1234567890zxcvbnmlkjhgfdsaqwertyuiop"; //生成随机角标 StringBuildersb=newStringBuilder(); Randomran=newRandom(); for(inti=1;i<=4;i++){ intindex=ran.nextInt(str.length()); //获取字符 charch=str.charAt(index); sb.append(ch); //写验证码 g.drawString(ch+"",width/5*i,height/2); } Stringcheckcode_session=sb.toString(); //将验证码存入session request.getSession().setAttribute("checkcode_session",checkcode_session); //画干扰线 g.setColor(Color.RED); //随机生成坐标点 for(inti=0;i<6;i++){ intx1=ran.nextInt(width); intx2=ran.nextInt(width); inty1=ran.nextInt(height); inty2=ran.nextInt(height); g.drawLine(x1,y1,x2,y2); } //将图片输出到页面展示 ImageIO.write(image,"jpg",response.getOutputStream()); } protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{ this.doPost(request,response); } }
到此这篇关于JavaWeb简单用户登录注册实例代码(有验证码)的文章就介绍到这了,更多相关JavaWeb用户登录注册内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。