用户注册项目解析(2)

二、校验

①、用户名不能为空,②、密码不能为空,③、密码和确认密码要一致,④、真实姓名不能为空,⑤、邮箱要满足邮箱验证规则,⑥、电话号码必须是数字,⑦,角色不能为空

1.在获取表单参数之后在保存数据之前校验逻辑加到servlet中。

1.1如果是空要拼错误信息,然后这么多参数拼接到一起比较麻烦,所以要进行封装。由于逻辑判断条件有7条,逐条写比较繁琐,为了提高可读性需要抽取方法。

1.1.1在获取数据前创建getParameter();方法。

1.1.2将数据封装起来。

1.1.3传入参数。

1.1.4创建一个方法接错误信息的返回值。

1.1.5加入检验逻辑,检验通过提示,检验没通过提示。

1.1.6设定响应的内容类型response.setContentType("text/html");

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    System.out.println("进入Registerservlet doPost方法");

    request.setCharacterEncoding("utf-8");

    response.setCharacterEncoding("utf-8");

    Userinfo u = new Userinfo();

    getParameter(request,u);

    //校验

    String errorMsg = validateUserInfo(u);

    if("".equals(errorMsg)){

    //调用service层方法进行业务处理

    Userservice service = Userservice.getInstance();

    service.register(u);

    errorMsg = "注册成功";

    }

    response.setContentType("text/html");

    PrintWriter writer = response.getWriter();

    writer.write("<html>");

    writer.write("<head><title>注册结果</title></head>");

    writer.write("<body>");

    writer.write(errorMsg);

    writer.write("</body>");

    writer.write("</html>");

    writer.close();

    }

private String validateUserInfo(Userinfo u) {

    StringBuffer errorMsg = new StringBuffer("");

    if(u.getUsername() == null || "".equals(u.getUsername())){

    errorMsg.append("用户名不能为空<br>");

    }

    if(u.getPassword() == null || "".equals(u.getPassword())){

        errorMsg.append("密码不能为空<br>");

    }else{

        if(!u.getPassword().equals(u.getConpassword())){

                errorMsg.append("密码和确认密码必须一致<br>");

        }

}

        if("-1".equals(u.getRole())){

                errorMsg.append("角色不能为空<br>");

        }

                return errorMsg.toString();

        }

private void getParameter(HttpServletRequest request, Userinfo u) {

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

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

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

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

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

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

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

    u.setUsername(username);

    u.setPassword(conPassword);

    u.setRealname(realname);

    u.setEmail(email);

    u.setPhone(phone);

    u.setRole(role);

三、工具类

之前service层只写了注册,由于还有登录等,我们需要一个工具类,将注册等放进去。

1.创建util包,将之前用的DButil包,配置文件,复制过去更改配置文件等值。

2.更改service层,引用工具类。

2.1.1删除之前的驱动加载。

2.1.2c获取到连接,开启事务onn = DButil.getConn();

2.1.3在DButil中将提交,回滚,关闭封装到方法中,throw异常

2.1.4DaoImp中的ps关闭对象的方法也创建在DButil中.

servlet

package www.neuedu.com;

import java.io.IOException;

import java.io.PrintWriter;

import java.sql.PreparedStatement;

import java.util.Enumeration;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import www.model.bean.Userinfo;

import www.model.service.Userservice;

/**

* Servlet implementation class Registerservlet

*/

public class Registerservlet extends HttpServlet {

private static final long serialVersionUID = 1L;


    /**

    * @see HttpServlet#HttpServlet()

    */

    public Registerservlet() {

        super();

        // TODO Auto-generated constructor stub

    }

/**

* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)

*/

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

doPost(request,response);

/**

* HttpServletRequest request当前请求对象

* HttpServletResponse response当前响应对象

*/

}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub

System.out.println("进入Registerservlet doPost方法");

request.setCharacterEncoding("utf-8");

response.setCharacterEncoding("utf-8");

/*String method=request.getMethod();

System.out.println("请求方法"+method);

String uri=request.getRequestURI();

System.out.println("请求uri"+uri);

StringBuffer url=request.getRequestURL();

System.out.println("请求url"+url);

Enumeration<String> enums=request.getHeaderNames();

while(enums.hasMoreElements()){

String name=enums.nextElement();

String value=request.getHeader(name);

System.out.println(name+"值为"+value);

}

System.out.println("=============");

String path=request.getContextPath();

System.out.println("path值"+path); */

Userinfo u = new Userinfo();

getParameter(request,u);

//校验

String errorMsg = validateUserInfo(u);

if("".equals(errorMsg)){

//调用service层方法进行业务处理

Userservice service = Userservice.getInstance();

service.register(u);

errorMsg = "注册成功";

}

response.setContentType("text/html");

PrintWriter writer = response.getWriter();

writer.write("<html>");

writer.write("<head><title>注册结果</title></head>");

writer.write("<body>");

writer.write(errorMsg);

writer.write("</body>");

writer.write("</html>");

writer.close();

}

private String validateUserInfo(Userinfo u) {

/*  在实现数据保存功能时,要考虑是否需要进行检验

*  用户名不能为空

*  密码不能成为空,密码和确认密码必须一致

*  真实姓名不能为空

*  邮箱必须满足邮箱的规则

*  电话号码必须是数字

*  角色不能为空

*/

StringBuffer errorMsg = new StringBuffer("");

if(u.getUsername() == null || "".equals(u.getUsername())){

errorMsg.append("用户名不能为空<br>");

}

if(u.getPassword() == null || "".equals(u.getPassword())){

errorMsg.append("密码不能为空<br>");

}else{

if(!u.getPassword().equals(u.getConpassword())){

errorMsg.append("密码和确认密码必须一致<br>");

}

}

if("-1".equals(u.getRole())){

errorMsg.append("角色不能为空<br>");

}

return errorMsg.toString();

}

private void getParameter(HttpServletRequest request, Userinfo u) {

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

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

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

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

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

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

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

u.setUsername(username);

u.setPassword(conPassword);

u.setRealname(realname);

u.setEmail(email);

u.setPhone(phone);

u.setRole(role);

}

}

service

package www.model.service;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.SQLException;

import org.eclipse.jdt.internal.compiler.batch.Main;

import www.model.bean.Userinfo;

import www.model.dao.UserDaoImp;

import www.model.util.DButil;

public class Userservice<UserDAOImp> {

private Userservice(){

}      //私有构造器

private static Userservice instance= new Userservice();//私有静态实例变量

public static Userservice getInstance(){//公有静态方法

return instance;//返回对象

}

  public void register(Userinfo u)  {

  Connection conn= null;

  try{

        //获取到连接,开启事务

  conn = DButil.getConn();

UserDaoImp dao = new UserDaoImp();

dao.registerUser(u,conn);

//提交

DButil.commit(conn);

} catch (Exception e) {

//回滚

try {

DButil.rollback(conn);

} catch (SQLException e1) {

e1.printStackTrace();

}

} finally{

try {

DButil.closeConn(conn);

} catch (SQLException e) {

e.printStackTrace();

}

}

  }

}

DButil

package www.model.util;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import java.io.InputStream;

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.PreparedStatement;

import java.sql.SQLException;

import java.util.Properties;

public class DButil {

private static String driver = null;

private static String url = null;

private static String username = null;

private static String password = null;

static{

try {

Properties pop = new Properties();

InputStream is  =  null;

is = DButil.class.getClassLoader().getResourceAsStream("db.properties");

try {

pop.load(is);

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

driver = pop.getProperty("driver");

url = pop.getProperty("url");

username = pop.getProperty("username");

password = pop.getProperty("password");

System.out.println(driver);

Class.forName(driver);

} catch (ClassNotFoundException e) {

// TODO Auto-generated catch block

System.out.println("数据库崩了");

}

}

public static Connection getConn() throws ClassNotFoundException, SQLException{

//加载驱动

Connection conn = DriverManager.getConnection(url, username, password);

conn.setAutoCommit(false);

return conn;

}

public static void commit(Connection conn) throws SQLException {

conn.commit();

}

public static void rollback(Connection conn) throws SQLException {

conn.rollback();

}

public static void closeConn(Connection conn) throws SQLException {

conn.close();

}

public static void closePs(PreparedStatement ps) throws SQLException {

ps.close();

}

}

四、登录

准备html

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title></title>

<link  href="css/login.css"  rel="stylesheet" >

<script type="text/javascript"  src="js/login.js"></script>

</head>

<body>

<form action="loginSrvlet" method="post">

<div id="main">

<div id="button1">Login</div>

<div id="button2"  onclick="change2()">Register</div>

<div id="button3">Forget</div>

<div id="input">

<div id="login" onclick="doSubmit()" ></div>

<div id="div1">

<img src="img/username.png">&nbsp;<input type="text" name="username" id="username" placeholder="Username" />

</div>

<div id="div2">

<img src="img/password.png">&nbsp;<input type="password" name="password" id="password" placeholder="Password" />

</div>

<div id="div3">

<div id="yan">Zebra</div>

<input type="checkbox" name="" id="rem" /><label for="rem">Remember</label>&nbsp;

<input type="text" name="" id="yz"  />

<label for="yan">点击更换</label>

</div>

</div>

</div>

</form>

</body>

</html>

准备js

function change2(){

location.href="register.html";

}

function doSubmit(){

//手动提交表单,先拿form再.submit

//document.forms返回页面所有form表单构成的数组

document.forms[0].submit();

}

1.创建loginServlet与创建registerServlet一样


1.1在doPost中写代码设定编码格式,

1.2获取表单参数。

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

doPost(request, response);

}

/**

* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)

*/

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

//设置编码集

request.setCharacterEncoding("utf-8");

response.setCharacterEncoding("utf-8");

//获取表单参数request.getParameter只能用字符串接返回值

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

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

2.调用service层代码进行业务处理。

Userinfo user = Userservice.getInstance().login(username, password);

2.1去service层写方法,写登录的方法。

2.1.1获取连接,try catch一下

2.1.2调用dao层,去dao写方法,daoImp重写。

public Userinfo login(String username,String password);

}

2.1.3 daoImp中都有一个参数Connection,将connection提出来,实例化service里拿到的对象,将conn传进创建对象的时候,关闭连接对象。

2.1.4将接口里的conn参数都去掉,将service的多余的conn参数也去掉。

2.1.5dao层加事务,增删改查。

public Userinfo login(String username, String password) {

Userinfo u=null;

PreparedStatement ps;

try {

ps = conn.prepareStatement(" select * from userinfo "

+" where username = ? and password = ?  " );

ps.setString(1, password);

ps.setString(2, username);

ResultSet rs =  ps.executeQuery();

if(rs.next()){

u = new Userinfo();

u.setUserid(rs.getInt("userid"));

u.setUsername(rs.getString("username"));

u.setPassword(rs.getString("password"));

u.setPhone(rs.getString("phone"));

u.setConpassword(rs.getString("conpassword"));

u.setEmail(rs.getString("email"));

u.setRealname(rs.getString("realname"));

u.setRole(rs.getString("role"));

}

} catch (SQLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return u;

3.判断登录结果-->弹出的页面,(如果失败跳转到登录页面,如果成功跳入主界面)。

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

推荐阅读更多精彩内容