二、用户模块


-----------前台



1.用户模块

                 注册            激活                登录              退出



---------entity


package com.book.user.entity;

import java.io.Serializable;

/**

* @author qiao

*

*user用户类

*/

public class Userss implements Serializable {

private String ids;

private String uname;

private String upwd;

private String email;

private String ucode;//激活时的uuid码

private int state;//0是已经注册未激活;1是已经正常激活可以登录

public String getIds() {

return ids;

}

public void setIds(String ids) {

this.ids = ids;

}

public String getUname() {

return uname;

}

public void setUname(String uname) {

this.uname = uname;

}

public String getUpwd() {

return upwd;

}

public void setUpwd(String upwd) {

this.upwd = upwd;

}

public String getEmail() {

return email;

}

public void setEmail(String email) {

this.email = email;

}

public String getUcode() {

return ucode;

}

public void setUcode(String ucode) {

this.ucode = ucode;

}

public int getState() {

return state;

}

public void setState(int state) {

this.state = state;

}

public Userss() {

super();

// TODO Auto-generated constructor stub

}

public Userss(String ids, String uname, String upwd, String email,

String ucode, int state) {

super();

this.ids = ids;

this.uname = uname;

this.upwd = upwd;

this.email = email;

this.ucode = ucode;

this.state = state;

}

@Override

public String toString() {

return "Userss [ids=" + ids + ", uname=" + uname + ", upwd=" + upwd

+ ", email=" + email + ", ucode=" + ucode + ", state=" + state

+ "]";

}

}


---------dao


package com.book.user.dao;

import java.sql.SQLException;

import org.apache.commons.dbutils.QueryRunner;

import org.apache.commons.dbutils.handlers.BeanHandler;

import com.book.user.entity.Userss;

import cn.itcast.jdbc.TxQueryRunner;

/**

* @author qiao

*        用户操作数据库部分

*/

public class UserDaoImpl {

private QueryRunner qr = new TxQueryRunner();

// 根据用户名查询用户

public Userss findByUsername(String username) {

try {

String sql = "select * from userss where uname=?";

return qr.query(sql, new BeanHandler(Userss.class),username);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

throw new RuntimeException("出错了!findByUserName");

}

}

// 根据邮箱得到一个用户

public Userss findByEmail(String email) {

try {

String sql = "select * from userss where email=?";

return qr.query(sql, new BeanHandler(Userss.class), email);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

throw new RuntimeException("出错了,findByEmail");

}

}

// 添加用户到数据库

public void add(Userss userss) {

try {

String sql = "insert into userss values(?,?,?,?,?,?)";

// 注意和问号顺序一致

Object[] params = { userss.getIds(),   userss.getUname(),userss.getUpwd(), userss.getEmail(), userss.getUcode(),userss.getState() };

//添加数据到数据库中

qr.update(sql, params);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

//准备激活

public Userss findByCode(String code){

try {

String sql = "select * from userss where ucode=?";

return qr.query(sql, new BeanHandler(Userss.class),code);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

throw new RuntimeException("出错了,findByCode");

}

}

//激活的本质

public void updateState(String uid,int state){

try {

String sql="update userss set state=? where ids=?";

qr.update(sql, state,uid);

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

--------service

/**

* @author qiao

*

*用户自定义异常类

*/

public class UserssException extends Exception {

public UserssException() {

super();

// TODO Auto-generated constructor stub

}

public UserssException(String message) {

super(message);

// TODO Auto-generated constructor stub

}

}


/**

* @author qiao

*

*业务逻辑类

*/

public class UserBizImpl {

private UserDaoImpl udao;

public UserBizImpl() {

udao=new UserDaoImpl();

}

//用户注册功能

public void register(Userss form) throws UserssException{

//根据姓名查询用户

Userss userss=udao.findByUsername(form.getUname());

if(userss!=null){

throw new UserssException("用户已经被注册!");

}

userss=udao.findByEmail(form.getEmail());

if(userss!=null){

throw new UserssException("邮箱已经被注册!");

}

//表单传过来的数据放入数据库

udao.add(form);

}

//激活方法

public void active(String code) throws UserssException{

//使用code查询用户

Userss users = udao.findByCode(code);

//激活码无效

if(users==null){

throw new UserssException("激活码无效");

}

if(users.getState()==1){

throw new UserssException("你已经激活了,无须再次激活");

}

udao.updateState(users.getIds(), 1);

}

//登录

public Userss login(Userss form) throws UserssException{

/*

* 1.使用username查询,得到user

* 2.如果user为null,抛出异常(用户不存在)

* 3.校验form和user的密码,如果不想等,则密码错误

* 4.查询用户状态,如果为0,尚未激活

* 5.返回user

*/

Userss userss = udao.findByUsername(form.getUname());

if(userss==null){

throw new UserssException("用户不存在!");

}

if(!userss.getUpwd().equals(form.getUpwd())){

throw new UserssException("密码错误");

}

if(userss.getState()==0){

throw new UserssException("尚未激活");

}

return userss;

}

}


-----servlet

/** * 所有和userss类相关的操作都放在当前类 */

public class UsersServlet extends BaseServlet {

private UserBizImpl biz = new UserBizImpl();

/**

* 注册方法

*  @param request

*@param response

* @return

* @throws ServletException

* @throws IOException

*/

public String regist(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

/** * 1.封装表单数据到form对象中 Userss form

* 2.补全ids ucode state

* 3.输入校验 * 如果有错误信息保存一下,去regist.jsp显示

* 4.调用biz的注册方法

* 5.发送邮件

* 6.成功了保存信息到msg.jsp */

//request.getParameter("")    //表单的name属性必须和实体类的属性一致

Userss form=CommonUtils.toBean(request.getParameterMap(),Userss.class);form.setIds(CommonUtils.uuid());//设置uuid//激活码用64位form.setUcode(CommonUtils.uuid()+CommonUtils.uuid());//用户状态 未激0

form.setState(0);//校验可能产生错误,来个Map存一下错误信息Maperrors = new HashMap();

//用户名校验

String username=form.getUname();

if(username==null||username.trim().isEmpty()){

errors.put("username", "用户名不能为空");

}else if(username.length()<3||username.length()>10){

errors.put("username", "用户名长度不合法");

}

//密码校验

//邮箱校验

if(errors.size()>0){

//有错误,保存错误到regist.jsp中

request.setAttribute("msg", errors);

request.setAttribute("form", form);

//请求转发

return "f:/jsps/user/regist.jsp";

}

try {

//异常处理

biz.register(form);

} catch (UserssException e) {

// TODO Auto-generated catch block

e.printStackTrace();

request.setAttribute("msg", e.getMessage());

request.setAttribute("form", form);

//请求转发

return "f:/jsps/user/regist.jsp";

}

//5.发送邮件

//读取配置文件email_template.properties的文件

Properties props = new Properties();

props.load(this.getClass().getClassLoader().getResourceAsStream("email_template.properties"));

String host=props.getProperty("host");//服务器主机

String uname=props.getProperty("uname");//用户名

String pwd=props.getProperty("pwd");//授权码

String from=props.getProperty("from");//发件人

String subject=props.getProperty("subject");//主题

//收件人

String to=form.getEmail();

String content=props.getProperty("content");

//使用uuid替换内容中的{0}

content=MessageFormat.format(content, form.getUcode());

//使用发邮件的小工具

Session session=MailUtils.createSession(host, uname, pwd);

//构建邮件需要的东西

Mail mail = new Mail(from, to, subject, content);//创建邮件对象

try {

//发送邮件

MailUtils.send(session, mail);

} catch (MessagingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//邮件发送成功了

request.setAttribute("msg", "恭喜你,注册成功了,请马上到邮箱进行激活!");

return "f:/jsps/msg.jsp";

}

/**

* 激活方法

*

* @param request

* @param response

* @return

* @throws ServletException

* @throws IOException

*/

public String active(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

/**

* 1.获取激活码

* 2.调用biz地方法完成激活

* 3.有错误保存错误信息

* 4.跳转到指定页面

*/

String code = request.getParameter("code");

try {

biz.active(code);

request.setAttribute("msg", "恭喜你,激活成功了,可以去登录");

} catch (UserssException e) {

// TODO Auto-generated catch block

e.printStackTrace();

request.setAttribute("msg", e.getMessage());

}

return "f:/jsps/msg.jsp";

}

/**

* 登录方法

*

* @param request

* @param response

* @return

* @throws ServletException

* @throws IOException

*/

public String login(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

/**

* 1.封装表单数据到form中

* 2.输入校验

* 3.调用biz完成登录

* 4.保存用户信息 ,存session中到处都可以用

*/

Userss form=CommonUtils.toBean(request.getParameterMap(), Userss.class);

try {

//调用登陆方法

Userss userss=biz.login(form);

request.getSession().setAttribute("session_user", userss);

request.getSession().setAttribute("cart", new Cart());

return "r:/index.jsp";

} catch (UserssException e) {

// TODO Auto-generated catch block

e.printStackTrace();

//出问题了

request.setAttribute("msg", e.getMessage());

request.setAttribute("form", form);

return "f:/jsps/user/login.jsp";

}

}

/**

* 退出方法

*

* @param request

* @param response

* @return

* @throws ServletException

* @throws IOException

*/

public String quit(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

request.getSession().invalidate();//销毁session

return "r:/index.jsp";

}

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,560评论 18 399
  • 一. Java基础部分.................................................
    wy_sure阅读 3,785评论 0 11
  • 1、不安全的随机数生成,在CSRF TOKEN生成、password reset token生成等,会造成toke...
    nightmare丿阅读 3,668评论 0 1
  • 很多时候,我们总是在说自己很忙,不能好好吃饭,没有时间午睡,总是那样匆匆。可是,不管多忙 ,我们都会给自己忙里偷闲...
    123君阅读 214评论 0 1