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

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="admin@qq.com"></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("^\\w+@\\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;
} }
/**
* 通过username与password查找用户,找到就封装到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 提供方法注冊的方法和检查username和password的方法

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);
}
/**
* 检查username与password是否正确
* @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>

执行结果示意图:

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

  1. Windows Azure Mobiles Services实现client的登录注冊

    下文仅仅是简单实现,client以Android端的实现为例: 用户表Account: package com.microsoft.ecodrive.model; public class Accou ...

  2. 黑马day07 注册案例(二)

    1依据index.jsp我们首先制定了注册的功能,当点击注册button什么时候.超链接到注册页面.下面是一个注册jsp页 <%@ page language="java" ...

  3. YII用户注冊和用户登录(二)之登录和注冊在视图通过表单使用YII小物件并分析

    2 登录和注冊在视图通过表单使用YII小物件并分析 <?php $form = $this -> beginWidget('CActiveForm', array( 'enableClie ...

  4. Android实战简易教程-第二十三枪(基于Baas的用户注冊和登录模块实现!)

    接着上两篇文章.我们基于Bmob提供的API实现用户登录功能.总体看一下代码. 1.注冊页面xml: <RelativeLayout xmlns:android="http://sch ...

  5. Dynamics CRM2013/2015 插件注冊工具登录后无法显示assembly列表问题的解决的方法

    自微软从2013版本号推出新的插件注冊器后,随着UI的重大更新后,问题也多了非常多.前面已有博客提到注冊assembly时看不到注冊button(http://blog.csdn.net/vic022 ...

  6. YII用户注冊和用户登录(三)之模型中规则制定和分析

    3 模型中规则制定和分析 YII模型主要分为两类,一个数据模型,处理和数据库相关的增删改查.继承CActiveRecord.还有一个是表单模型,继承CFormModel.不与数据库进行交互.操作与数据 ...

  7. 从注冊流程 分析怎样安全退出多个Activity 多种方式(附DEMO)

    前言 因为一个同学问到我怎样依照一个流程走好之后回到首页.我曾经看到过4个解决方式,后来发现有做个记录和总结的必要,就写了这篇博文. (之前看小强也写过一篇,这里通过自身的分析完整的总结一下下面6种方 ...

  8. 苹果(APPLE)开发人员账号说明及注冊流程(99美元公司版/个人版及299美元企业版)

    APPLE的政策是,要公布到APP STORE必须用99美元的个人版或公司版Apple Developer Programs,要在非商店外下载仅仅能使用299美元的企业版iOS Developer E ...

  9. 注冊成为Windows Phone开发人员而且解锁Windows Phone 8.1手机

    注冊成为Windows Phone开发人员而且解锁Windows Phone 8.1手机 上篇文章介绍了怎样使用Qt Creator和Visual Studio构建Windows Phone 8.1应 ...

随机推荐

  1. Integer应该用==还是equals

    问题引出:“Integer应该用==还是equals” 讨论这个问题之前我们先放一段代码 public static void main(String[] args) { Integer a1 = 2 ...

  2. 每日算法——新型在线LCA

    在线LCA一般大家都会用倍增吧,时间复杂度O(nlogn),空间复杂度O(nlogn),都是非常严格的复杂度限制,并且各种边界处理比较麻烦,有没有更快更好的办法呢? 我们发现,在树链剖分时,我们不经意 ...

  3. A - Fox And Snake

    Problem description Fox Ciel starts to learn programming. The first task is drawing a fox! However, ...

  4. 题解报告:hdu 1848 Fibonacci again and again(尼姆博弈)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1848 Problem Description 任何一个大学生对菲波那契数列(Fibonacci num ...

  5. Java面试概念之String、StringBuffer与StringBuilder的区别

    参考博客 http://www.cnblogs.com/lchzls/p/6711375.html java中String.StringBuffer.StringBuilder是Java编程中经常使用 ...

  6. 【WPF】使用 XAML 的 Trigger 系统实现三态按钮

    利用 WPF 的 Trigger 系统,也可以很简单的只使用xmal实现三态按钮.在Window或UserControl的资源中声明按钮的style并加入触发功能.使用的时候直接在button里复写s ...

  7. js-内置对象及相关语法

    1:如图(视频截取的) this指的是当前标签的对象. var ary=new Array("mark","jay","leslie"); ...

  8. 复习java基础第二天(异常处理)

    一.常见的异常类型: public class TestException { public static void main(String[] args) { int i = 10; //数学异常: ...

  9. 安装rails卡住很慢 出现302 Moved Temporarily

    在MAC上安装rails的时候,使用命令$ gem install rails 发现一直没响应,使用$ gem install rails-V命令发现,安装会在中间卡住,出现302 Moved Tem ...

  10. Window8.1下安装Matplotlib库

    有两种方法: 直接选用一些预打包库软件,如WinPython, Python(x,y), Enthought Canopy, or Continuum Anaconda.这些软件中已包含有Matplo ...