一、如何实现一个项目的用户注册功能的步骤?
1. 先获取前端的值(这还只是web层
2. 现在需要创建一个UserService类,吧数据传到service层的架构
3. service层就是专门来处理业务的逻辑的
a。先判断用户是否存在,如果存在就不可以注册
(1)如何判断用户是不是存在呢
1,需要用到dao层来和数据库里面的信息进行比对,先创建一个UserDao的类在
2. 在UserDao类中写一个checkUser方法,来从数据库中进行比对
3. 如果数据库中没有这个用户,就可以注册(回到service层)
b。如果不存在就把用户注册信息存储到数据库中(也就是调用dao层去实现注册方法)
1. 在userDao层写一个register方法,先拿到连接池的数据源
2. 然后调用QuaryRunner对象去调用对象的增删改查方法(需要注意返回值)
3. 写SQL语句 是取数据还是修改数据的语句,
4. 对返回的数据进行判断
c。在service层去调用UserDao层的方法,并且返回的register的boolan值类型给servlet
4. 在servlet中去调用service层做出的逻辑判断是判断在给浏览器做出一些回复,是注册失败还是成功
(成功就重定向到登录界面)
知识点总结:什么是三层架构?
1. web层 就是先从静态的前端页面拿到你想得到的值 (其实也就是servlet的使用)
2. service层 专门处理业务逻辑的(比如看是不是这个用户被注册了,
如果被注册了需要保存数据就需要调用dao层去跟数据库打交道)
3. dao层 也就是专门负责跟所有的数据库打交道的(通常都会用到JDBC的知识)
4. 为什么还要建一个bean的文件层,因为当你想要操作数据库的时候每一张表也就是一个实体
所以你也需要去建一个实体类的对象,这样能比较容易去操作每个实体的属性
第一步先创建一个servlet类来获取前端的参数
@WebServlet(name = "RegisterServlet" ,urlPatterns = "/register")
public class RegisterServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
String password = request.getParameter("password");
String email = request.getParameter("email");
UserService userService= new UserService();
//这一步是通过service层做出的逻辑判断是 否注册成功
boolean register = userService.register(name,password,email);
//下一步是请求重定向,如果注册成功,就response给浏览器一个登陆的界面
if (register){
response.sendRedirect(request.getContextPath()+"login.jsp");
}
else {
//因为需要打印给浏览器含有中文,所以需要设置一下字体
response.setContentType("text/html;charset=utf-8");
response.getWriter().write("注册失败哦");
}
//如果失败就在客户端浏览器上打印出注册失败的字样
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
}
第二步是在第一步的基础上创建一个service层的service类对象
package webPackage.service;
import webPackage.bean.User;
import webPackage.dao.UserDao;
import java.sql.SQLException;
public class UserService {
public boolean register(String name, String password,String email){
boolean register=false;
UserDao userDao = new UserDao();
boolean checkUser = userDao.checkUser(name); //返回的否的话 就说明可以注册
if (checkUser) {
register = userDao.register(name, password, email);//如果没有就去注册
}
//然后把返回值返回给servlet
return register;
}
public User login(String name, String password) throws SQLException {
UserDao userDao= new UserDao();
User user = userDao.login(name, password);
return user;
}
}
第三步是dao层,也就是你需要创建一个类操作数据库的类
package webPackage.dao;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import webPackage.bean.User;
import java.sql.SQLException;
/*
知识点:如何使用c3p0连接池去对数据库进行增删改查
1. 先创建ComboPooledDataSource 拿到连接池中的数据源
2. 需要创建一个相对应的QueryRunner用的时候用这个对象在
去调用你需要的查询方式(如果是插入需要返回值就是影响的行数)
一、如何在dao层取到数据库中的信息和用户的信息进行比对,看数据库中是否有
1. 需要用到c3p0连接池的有关配置需要配合QueryRunner对象使用
*
*
* */
public class UserDao {
//需要在这个类的里面写一个方法来判断用户的数据和数据库中的数据进行比对
public boolean checkUser(String name){
try {
ComboPooledDataSource dataSource= new ComboPooledDataSource();
QueryRunner queryRunner= new QueryRunner(dataSource);
String sql= "select name from user where name=?";
User user = queryRunner.query(sql, new BeanHandler<User>(User.class),name);
//如果在数据库中没有查询到用户的信息就说明可以注册,否则 就不能注册提示已注册
if (user==null){//说明么有查询到该用户
return true;
}
else {
return false;
}
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
public boolean register(String name, String password, String email) {
try {
ComboPooledDataSource dataSource= new ComboPooledDataSource();
QueryRunner queryRunner = new QueryRunner(dataSource);
String sql = "insert into user values(null,?,?,?)";
//插入数据库的时候返回值是影响的行数
int row = queryRunner.update(sql, name, password, email);
if (row>0){ //如果返回影响的行数大于0说插入数据库成功
return true;
}
else {
return false;
}
} catch (SQLException e) {
e.printStackTrace();
return false;
}
}
/*
* 这个是利用和数据库对比实现的登录的方法(返回的是一个user对象)
* 1. 先取到数据库的资源,然后和数据库进行比对(需要用到JDBC的知识)
* */
public User login(String name, String password) throws SQLException {
ComboPooledDataSource dataSource= new ComboPooledDataSource();
QueryRunner queryRunner= new QueryRunner(dataSource);
String sql = "select * from user where name=? and password=?";
User user = queryRunner.query(sql, new BeanHandler<User>(User.class),name,password);
return user;
}
}