黑马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="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 登录注冊案例(一)的更多相关文章
- Windows Azure Mobiles Services实现client的登录注冊
下文仅仅是简单实现,client以Android端的实现为例: 用户表Account: package com.microsoft.ecodrive.model; public class Accou ...
- 黑马day07 注册案例(二)
1依据index.jsp我们首先制定了注册的功能,当点击注册button什么时候.超链接到注册页面.下面是一个注册jsp页 <%@ page language="java" ...
- YII用户注冊和用户登录(二)之登录和注冊在视图通过表单使用YII小物件并分析
2 登录和注冊在视图通过表单使用YII小物件并分析 <?php $form = $this -> beginWidget('CActiveForm', array( 'enableClie ...
- Android实战简易教程-第二十三枪(基于Baas的用户注冊和登录模块实现!)
接着上两篇文章.我们基于Bmob提供的API实现用户登录功能.总体看一下代码. 1.注冊页面xml: <RelativeLayout xmlns:android="http://sch ...
- Dynamics CRM2013/2015 插件注冊工具登录后无法显示assembly列表问题的解决的方法
自微软从2013版本号推出新的插件注冊器后,随着UI的重大更新后,问题也多了非常多.前面已有博客提到注冊assembly时看不到注冊button(http://blog.csdn.net/vic022 ...
- YII用户注冊和用户登录(三)之模型中规则制定和分析
3 模型中规则制定和分析 YII模型主要分为两类,一个数据模型,处理和数据库相关的增删改查.继承CActiveRecord.还有一个是表单模型,继承CFormModel.不与数据库进行交互.操作与数据 ...
- 从注冊流程 分析怎样安全退出多个Activity 多种方式(附DEMO)
前言 因为一个同学问到我怎样依照一个流程走好之后回到首页.我曾经看到过4个解决方式,后来发现有做个记录和总结的必要,就写了这篇博文. (之前看小强也写过一篇,这里通过自身的分析完整的总结一下下面6种方 ...
- 苹果(APPLE)开发人员账号说明及注冊流程(99美元公司版/个人版及299美元企业版)
APPLE的政策是,要公布到APP STORE必须用99美元的个人版或公司版Apple Developer Programs,要在非商店外下载仅仅能使用299美元的企业版iOS Developer E ...
- 注冊成为Windows Phone开发人员而且解锁Windows Phone 8.1手机
注冊成为Windows Phone开发人员而且解锁Windows Phone 8.1手机 上篇文章介绍了怎样使用Qt Creator和Visual Studio构建Windows Phone 8.1应 ...
随机推荐
- iTex导出PDF
iText导出PDF,所需jar包如下: itext-asian-5.2.0.jar 支持导出中文的jar包 itextpdf-5.5.9.jar PDF核心jar包 bcprov-jdk15on-1 ...
- Linux学习笔记--文件夹结构
暂时先上一张图学习吧,先大致了解好,再进行深入的学习.
- 精确获取对象的类型:Object.prototype.toString()
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/toString
- JavaScript中字符串运算符的使用
字符串运算符是用于两个字符串型数据之间的运算符,它的作用是将两个字符串连接起来.在JavaScript中,可以使用+和+=运算符对两个字符串进行连接运算.其中,+运算符用于连接两个字符串,而+=运算符 ...
- python特性小记(一)
一.关于构造函数和析构函数 1.python中有构造函数和析构函数,和其他语言是一样的.如果子类需要用到父类的构造函数,则需要在子类的构造函数中显式的调用,且如果子类有自己的构造函数,必然不会自动调用 ...
- Dynamics CRM查询实体共享给哪些人
在mscrm中,如果想查询一条记录共享给了哪些人,需要用到PrincipalObjectAccess 表,sql如下: select u.FullName,a.RC_name,sup.SystemUs ...
- 两款工作流JBPM和CCBPM的对比
以国外流行的工作流jbpm4的模式与当今中国开源的ccbpm(ccflow和jflow的总称)流程引擎对照.以便让各位能够了解到中国国情的工作流引擎与国际流行的设计规则的差别.不同.与优缺点. 国外工 ...
- DB120连接TTL--OpenWRT
DB120 TTL线连接 1.解压文件安装USB TTL PL2303HX 驱动 2.插上usb转ttl设备 3.串口调试 4.连接ttl线到db120 5.The END
- Redis 通用key操作命令
1.在redis里面允许模糊查询key,有3个通配符:*,?,[]. *:通配任意字符 ?:通配单个字符 []:通配中括号内的某个字符 例如: 2.randomKey 随机返回所有key中的某个 3. ...
- Tomcat jsp页面显示有问题
1.干掉tomcat下的work文件夹里面的东西,让jsp文件重新编译,相当于清楚缓存 2.work 里面是 jsp 编译的类 ,只要jsp 被访问了,就会被编译,就会生成相应的类 3.tomcat下 ...