黑马day07 登录注册案例(一)

简介:根据三层架构的思想设计本案例。

1.搭建环境

准备好需要的包和模拟数据库配置文件users.xml

-->cn.itheima.dao

-->cn.itheima.service

-->cn.itheima.domain

-->cn.itheima.web

-->cn.itheima.utils

-->cn.itheima.exception

-->cn.itheima.test

2.建立模拟数据库users.xml

<?xml version="1.0" encoding="UTF-8"?>
<users>
	<user username="admin" password="admin" nickname="admin" email="[email protected]"></user>
</users>

3.建立javaBean users

package cn.itheima.domain;

import cn.itheima.exception.MsgException;

public class User {
	private String username;
	private String password;
	private String password2;
	private String nickname;
	private String email;
	public String getUsername() {
		return username;
	}
	public void setUsername(String username) {
		this.username = username;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getPassword2() {
		return password2;
	}
	public void setPassword2(String password2) {
		this.password2 = password2;
	}
	public String getNickname() {
		return nickname;
	}
	public void setNickname(String nickname) {
		this.nickname = nickname;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public void check()throws MsgException{
		if(username==null || "".equals(username)){
			throw new MsgException("用户名不能为空!");
		}
		if(password==null || "".equals(password)){
			throw new MsgException("密码不能为空!");
		}
		if(password2==null || "".equals(password2)){
			throw new MsgException("确认密码不能为空!");
		}
		if(!password.equals(password2)){
			throw new MsgException("两次密码不一致!");
		}
		if(nickname==null || "".equals(nickname)){
			throw new MsgException("昵称不能为空!");
		}
		if(email==null || "".equals(email)){
			throw new MsgException("邮箱不能为空!");
		}
		if(!email.matches("^\\[email protected]\\w+(\\.\\w+)+$")){
			throw new MsgException("邮箱格式不正确!");
		}
	}

}

4.建立UserDao...实现相应的查询和添加功能(主要通过使用dom树操作xml文件)

package cn.itheima.dao;

import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

import cn.itheima.domain.User;
import cn.itheima.utils.XmlUtil;

public class XmlUserDao {
	/***
	 * 根据用户名查询用户
	 * @param username用户名
	 * @return 根据用户名找到用户的信息封装到javaBean中,没有返回null
	 */
	public User findUserByUsername(String username){
		Document doc = XmlUtil.getDocument();
		Element root = doc.getRootElement();
		List<Element> list = root.selectNodes("//user[@username='"+username+"']");
		if(list.size()>0){//如果找到这个用户就封装到bean中返回user
			Element userEle = list.get(0);
			User user=new User();
			user.setUsername(userEle.attributeValue("username"));
			user.setPassword(userEle.attributeValue("password"));
			user.setNickname(userEle.attributeValue("nickname"));
			user.setEmail(userEle.attributeValue("email"));
			return user;
		}else{//没有找到用户
			return null;
		}

	}
	/**
	 * 通过用户名和密码查找用户,找到就封装到javaBean中,找不到返回null
	 * @param username
	 * @param password
	 * @return
	 */
	public User findUserByUserNameAndPassword(String username,String password){
		Document doc = XmlUtil.getDocument();
		Element root = doc.getRootElement();
		List<Element> list = root.selectNodes("//user[@username='"+username+"' and @password='"+password+"']");
		if(list.size()>0){//如果找到这个用户就封装到bean中返回user
			Element userEle = list.get(0);
			User user=new User();
			user.setUsername(userEle.attributeValue("username"));
			user.setPassword(userEle.attributeValue("password"));
			user.setNickname(userEle.attributeValue("nickname"));
			user.setEmail(userEle.attributeValue("email"));
			return user;
		}else{//没有找到用户
			return null;
		}
	}
	/**
	 * 添加一个用户到数据库中
	 * @param user
	 */
	public void addUserToXml(User user){
		Document doc = XmlUtil.getDocument();
		Element root = doc.getRootElement();
		//1.凭空创建一个<user>标签,并设置属性
		Element userEle = DocumentHelper.createElement("user");
		userEle.setAttributeValue("username", user.getUsername());
		userEle.setAttributeValue("password", user.getPassword());
		userEle.setAttributeValue("nickname", user.getNickname());
		userEle.setAttributeValue("email", user.getEmail());
		//2.挂在到root标签下
		root.add(userEle);
		//3.修改xml文件
		XmlUtil.updateXml();

	}
}

5.建立一个工具类提供获取document和修改xml的方法

package cn.itheima.utils;

import java.io.FileOutputStream;
import java.io.IOException;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

public class XmlUtil {
	private static Document doc=null;
	private static String  path=XmlUtil.class.getClassLoader().getResource("users.xml").getPath();
	static{
		SAXReader reader=new SAXReader();
		try {
			doc = reader.read(path);
		} catch (DocumentException e) {
			e.printStackTrace();
		}
	}
	/**
	 * 返回文档对象
	 * @return
	 */
	public static Document getDocument(){
		return doc;
	}
	/**
	 * 修改xml文件
	 */
	public  static void updateXml(){
		try {
			XMLWriter writer=new XMLWriter(new FileOutputStream(path),OutputFormat.createPrettyPrint());
			writer.write(doc);
			writer.close();
		} catch (IOException e) {
			e.printStackTrace();
			throw new RuntimeException();
		}
	}
}

6.开发service 提供方法注册的方法和检查用户名和密码的方法

package cn.itheima.service;

import cn.itheima.dao.XmlUserDao;
import cn.itheima.domain.User;
import cn.itheima.exception.MsgException;

public class UserSevice {
	XmlUserDao dao=new XmlUserDao();
	/**
	 * 注册用户
	 * @param user
	 * @throws MsgException
	 */
	public void registUser(User user) throws MsgException{
		//1.判断数据库中是不是有用户了
		if(dao.findUserByUsername(user.getUsername())!=null){
			throw new MsgException("用户已经存在");
		}
		//2.添加到数据库中
		dao.addUserToXml(user);
	}
	/**
	 * 检查用户名和密码是否正确
	 * @param username
	 * @param password
	 * @return
	 */
	public User isUser(String username,String password){
		return dao.findUserByUserNameAndPassword(username, password);
	}
}

7.建立异常类MsgExcetion

package cn.itheima.exception;
public class MsgException extends Exception {
	public MsgException() {
	}
	public MsgException(String msg) {
		super(msg);
	}
}

8.开发案例的主页面index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  </head>

  <body>
  	<c:if test="${sessionScope.user==null }">
  		欢迎光临 游客!<hr/><a href="${pageContext.request.contextPath}/regist.jsp">注册</a><hr><a href="${pageContext.request.contextPath}/login.jsp">登录</a>
  	</c:if>
  	<c:if test="${sessionScope.user!=null}">
  		欢迎光临${sessionScope.user.username }!<hr><a href="${pageContext.request.contextPath}/login.jsp">登录</a><hr/><a href="${pageContext.request.contextPath}/servlet/LogoutServlet">注销</a>
  	</c:if>
  </body>
</html>

运行结果示意图:

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-26 07:11:32

黑马day07 登录注册案例(一)的相关文章

黑马day07 登录注册案例(二)

1根据index.jsp我们先开发注册的功能,当点击注册按钮的时候,超链接到注册页面,下面是一个注册的jsp页面 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> &l

Java基础知识强化之集合框架笔记37:用户登录注册案例

1. 登录注册案例分析图解: 2. 用户登录案例 详细分析 和 分包实现: (1)用户登录案例详细分析(面向对象思想) 按照如下的操作,可以让我们更符合面向对象思想: • 有哪些类呢?                 用户类                 测试类       • 每个类有哪些东西呢?                 用户类: 成员变量:用户名,密码                            构造方法:无参构造                            成

登录注册案例

day14总结 今日内容 登陆和注册案例 1.1 上次课内容回顾 1.EL 1.1 EL:表达式语言. 1.2 EL的作用 * 1.2.1 获得数据.(获得域对象中的数据) * 1.2.2 执行运算.(算数.关系.逻辑) * 1.2.3 操作web的常用对象.(pageContext.cookie.param.header) * 1.2.4 调用Java的方法. 2.JSTL 2.1 JSTL:JSP的标准标签库. 2.2 JSTL中Core核心标签库.fmt标签库.fn函数库.xml.sql

IO版的用户登录注册案例(Java)

2017-09-16 这是我在博客园的第一篇学习笔记. Java小白,努力进阶中... 今天学的是用户登录注册功能.4个包:itcast.cn.user包 User.java 用户类,描述用户基本信息,包括成员变量,无参构造函数,带参构造(可有可无).get和set方法 1 package itcast.cn.day22; 2 /* 3 * 用户基本描述包类 4 */ 5 6 public class User { 7 private int userName; 8 private int pa

登录注册案例二

这个项目的登录注册表单最开始想当然的用了blur+focus,功能实现是实现了,然而那个用户体验,啊,有这种东西? 最近又开始做表单,谷歌了一下怎样优雅写表单然后发现了AngularJs...慕课上啃了一下验证视频然后开工用ng.刚好这个项目客户不满意验证表单这里,上面让我改,改就改咯,于是就用上了ng.体验感觉上是上去了,IE8那个兼容不想管了orz. 首先引入ng, 然后在body上加上这句 ng-app="validationApp" ng-controller="ma

黑马day07 登录注冊案例(一)

简单介绍:依据三层架构的思想设计本案例. 1.搭建好开发环境 准备好须要的包和模拟数据库配置文件users.xml -->cn.itheima.dao -->cn.itheima.service -->cn.itheima.domain -->cn.itheima.web -->cn.itheima.utils -->cn.itheima.exception -->cn.itheima.test 2.建立模拟数据库users.xml <?xml versio

用户登录注册案例分析

项目需求: 按软件分层设计思想完成xml文件存储用户信息实现用户注册登录的功能.需求分析: 1.使用JAVAEE的经典三层结构 2.三层结构分别对应的包 M JavaBean com.hitech.domain   Service com.hitech.service   Dao com.hitech.dao                V/C Web/Servlet com.hitech.web     其他包  异常处理 com.hitech.exception     工具类 com.h

登录注册案例一

这个项目只有登录,貌似是我接触的第一个有登录的项目,写的与想死的心都有了,全程看着别人敲..... 又是熟悉的mask遮罩 <div id="mask" style="display: none;"> <div id="artl"> <div class="a-top"> <h4>XX登录</h4> <div id="close">&l

java 17 -1 用户登陆注册案例(集合版)

需求: 用户登录注册案例 按照如下操作,可以让我们更符合面向对象思想: A:这个案例有哪些类 B:每个类中又有哪些东西 C:类与类之间的关系 分析: A:这个案例有哪些类 用户类 测试类 B:每个类中又有哪些东西 用户类: 成员变量:用户名.密码 构造方法:无参构造 成员方法:getXxx().setXxx() 登陆,注册 但,如果用户类的内容过多的时候,维护起来比较麻烦. 所以,为了以后维护起来比较容易,我们需要更清晰的分类: 用户类可以再分为2个类: 用户基本描述类: 成员变量:用户名.密码