现在的位置: 主页 > 联系方式 > 文章列表

简单的登陆注册的实现+验证码和表单验证

作者:程力专用汽车股份有限公司 来源:www.chLiw.com 发布时间:2017-09-10 09:40:49
简单的登陆注册的实现+验证码和表单验证

昨天做了一个登录注册的小实例今天回忆一遍并且通过博客的方式写下来

首先先po上JavaWeb 的经典三层框架

这里写图片描述

注意 的是每个层都应该完成自己应该完成的不能完成别的层该做的事,不然耦合性太高

首先先确定登陆和注册需要两个页面 login.jsp regist.jsp 再加上一个欢迎首页 welcome.jsp 登陆成功才能看见 (session 实现)

需要LoginServlet.java 和 RegistServlet.java
因为有验证码 所以再创建一个 VerifyCodeServlet.java
servlet 用来处理页面请求 然后调用方法 把结果响应到页面
然后创建一个实体类 与登陆注册先关的实体类 User.java

业务逻辑层实现与登陆注册相关业务

数据层 以xml 代替

分析完了然后导入项目所需要的包
commons-logging-1.1.3 jar //用来把map中的数据封装到bean对象中
commons-beanutils-1.9.2.jar
dom4j-1.6.1.jar //以下两个是解析xml用
jaxen-1.1.6.jar
ashin-utils.jar // 自己生成的工具包 里面有生成验证码的代码

自定义jar包中的代码:

public static T toBean(Map map,Class clazz){ try { /* * 创建指定类型的javabean对象 */ //System.out.println(map); //有值{Ben=whoami2, Ashin=whoami, Aken=whoami3} T bean = clazz.newInstance(); /* * 把数据封装到bean中 */ BeanUtils.populate(bean,map); //System.out.println(bean); //无值 /* * 返回javabean对象 */ return bean; } catch (Exception e) { throw new RuntimeException(e); } } public class VerifyCode { private int w =70; private int h =35; private Random r = new Random(); //定义有那些字体 private String[] fontNames ={"宋体","华文楷体","黑体","微软雅黑","楷体_GB2312"}; //定义有那些验证码的随机字符 private String codes = "23456789abcdefghjkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ"; //生成背景色 private Color bgColor = new Color(250,250,250); //用于gettext 方法 获得生成的验证码文本 private String text; //生成随机颜色 private Color randomColor(){ int red =r.nextInt(150); int green =r.nextInt(150); int blue =r.nextInt(150); return new Color(red,green,blue); } //生成随机字体 private Font randomFont(){ int index = r.nextInt(fontNames.length); String fontName = fontNames[index]; int style =r.nextInt(4); int size =r.nextInt(5)+24; return new Font(fontName, style, size); } //画干扰线 private void drawLine(BufferedImage image){ int num = 3; Graphics2D g2 = (Graphics2D) image.getGraphics(); for(int i =0;i

创建包

com.ashin.beans 对应实体类 > User.java >username >password >verifycode com.ashin.service 业务层 >UserService.java >UserException.java //自定义异常类 com.ashin.web.servlet web层 >LoginServlet.java >RegistServlet.java >VerifyCodeServlet com.ashin.dao 数据层 >UserDao.java

下面贴部分代码 并会注释

实体类就不多写了 只是多了个VerifyCode 属性用于验证码

先把userservice 贴出来以便后面的理解

/** * 第一个方法通过名字查询用户返回一个用户对象 调用的是userdao的findUserByName()方法 * 并通过adduser()在数据库中添加一个用户 * 第二个方法 登陆时调用 来判断用户名是否存在 密码是否正确 * 返回的userexception都来自自定义异常类 * @param user * @throws UserException */ private UserDao userdao = new UserDao(); public void regist(User user) throws UserException{ User _user = userdao.findUserByName(user.getUsername()); if(_user != null ) throw new UserException("用户名"+user.getUsername()+",已经被注册了"); userdao.addUser(user); } public User login(User form) throws UserException { User _user = userdao.findUserByName(form.getUsername()); if(_user == null) throw new UserException("用户名"+form.getUsername()+",不存在请去注册"); if( ! _user.getPassword().equals(form.getPassword())) throw new UserException("密码不正确"); return _user; }

自定义异常类

创建UserException 类 只需继承Exception 类并实现父类构造方法即可

regist.jsp

<script type="text/javascript"> function _change(){ var ele = document.getElementById("verifyCode"); ele.src="http://blog.csdn.net/ashinli/article/details/?xxx="+new Date().getTime(); //只要后面的参数变化的话就会再次发送请求实现验证码换一张的效果 } </script> /** 注释块: 这边的${msg } 用于显示错误信息 如果RegistServlet 捕获到错误会把异常加入request 域 并转发到 次页面进行输出 需要引入标签库 <%@ taglib prefix="c" uri="" %> input标签中的el表达式用于回显 用户名及密码 后面的${errors.password }是显示表单验证时返回的错误信息 */注册

${msg }

企业建站2800元起,携手武汉肥猫科技,做一个有见地的颜值派!更多优惠请戳:武汉做网站多少钱 http://www.45qun.com

上一篇:PHP数组函数基础知识 下一篇:最后一页