JavaEE MVC 项目创建
JavaEE 三层架构

web层 web/servlet/controller
service层 service & serviceImpl
dao持久层 dao & daoImpl
实体bean对象 pojo/entity/domain/bean
1.创建数据库及相关需要的表
drop database if EXISTS book; create database book; use book; create table t_user( `id` int PRIMARY KEY auto_increment, `username` varchar(20) not null unique, `password` varchar(32) not null, `email` varchar(200) ); insert into t_user(`username`,`password`,`email`) values('admin','admin','admin@atbook.com'); select * from t_user;
2.编写数据库表对应的bean
package com.book.pojo; public class User { private Integer id; private String username; private String password; private String email; public User() { super(); } public User(Integer id, String username, String password, String email) { super(); this.id = id; this.username = username; this.password = password; this.email = email; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } 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 getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Override public String toString() { return "User [id=" + id + ", username=" + username + ", password=" + password + ", email=" + email + "]"; } }
3.编写工具类BaseDao
package com.book.dao; import java.sql.Connection; import java.util.List; import org.apache.commons.dbutils.QueryRunner; import org.apache.commons.dbutils.handlers.BeanHandler; import org.apache.commons.dbutils.handlers.BeanListHandler; import org.apache.commons.dbutils.handlers.ScalarHandler; import com.book.utils.JdbcUtils; public abstract class BaseDao { //使用DBUtils操作数据库 private QueryRunner queryRunner = new QueryRunner(); /* * Update方法用来执行:Insert/Update/Delete语句 */ public int update(String sql,Object...args) { Connection conn = new JdbcUtils().getConnection(); try { return queryRunner.update(conn, sql, args); }catch (Exception e) { e.printStackTrace(); }finally { JdbcUtils.close(conn); } return -1; } /* * 查询返回一个Javabean的sql语句 */ public <T>T queryForOne(Class<T> type ,String sql,Object...args) { Connection conn = new JdbcUtils().getConnection(); try { return queryRunner.query(conn,sql, new BeanHandler<T>(type), args); }catch (Exception e) { e.printStackTrace(); }finally { JdbcUtils.close(conn); } return null; } /* * 查询返回多个JavaBean List的sql语句 */ public <T>List<T> queryForList(Class<T> type,String sql, Object...args){ Connection conn = JdbcUtils.getConnection(); try { return queryRunner.query(conn, sql,new BeanListHandler<T>(type),args); }catch (Exception e) { e.printStackTrace(); }finally { JdbcUtils.close(conn); } return null; } /* * 执行返回一行一列的sql语句 * */ public Object queryForSingleValue(String sql,Object...args) { Connection conn = JdbcUtils.getConnection(); try { return queryRunner.query(conn, sql, new ScalarHandler(), args); }catch (Exception e) { e.printStackTrace(); }finally { JdbcUtils.close(conn); } return null; } }
4.编写数据库表对应的dao接口 UserDao
/** * */ package com.book.dao; import com.book.pojo.User; /** * 处理User数据库的接口 * @author lye * */ public interface UserDao { //* 根据用户名查询用户信息,如果返回null,说明这个用户不存在,反之亦然。 public User queryUserByUserName(String username); //保存用户信息,返回-1表示失败,返回其他数字是sql语句影响的行数 public int saveUser(User user); //根据用户名和密码查询用户,如果返回null,说明这个用户名或密码错误,反之亦然。 public User queryUserByUsernameAndPassword(String username,String password); }
5.实现dao接口 UserDaoImpl
/** * */ package com.book.dao; import com.book.pojo.User; import com.book.test.UserDaoTest; /** * @author lye * */ public class UserDaoImpl extends BaseDao implements UserDao{ @Override public User queryUserByUserName(String username) { String sql = "select `id`,username,`password`,email from t_user where username = ?"; return queryForOne(User.class, sql, username); } @Override public int saveUser(User user) { String sql = "insert into t_user(`username`,`password`,email) values(?,?,?)"; return update(sql, user.getUsername(),user.getPassword(),user.getEmail()); } @Override public User queryUserByUsernameAndPassword(String username, String password) { String sql = "select `id`,username,`password`,email from t_user where username = ? and password = ?"; return queryForOne(User.class, sql, username,password); } }
6.编写service层UserService,用于控制和操作数据,相当于视图层和数据库层的中间连接层
/** * */ package com.book.service; import com.book.pojo.User; /** * @author lye * */ public interface UserService { //注册用户 public void registUser(User user); //登录 public User login(User user); //检查用户名是否可用,返回true表示用户名已存在,返回false表示用户名可用 public boolean existsUsername(String username); }
7.实现Service层接口UserServiceImpl
/** * */ package com.book.service.impl; import com.book.dao.UserDao; import com.book.dao.UserDaoImpl; import com.book.pojo.User; import com.book.service.UserService; /** * @author lye * */ public class UserServiceImpl implements UserService{ private UserDao userDao = new UserDaoImpl(); @Override public void registUser(User user) { userDao.saveUser(user); } @Override public User login(User user) { return userDao.queryUserByUsernameAndPassword(user.getUsername(), user.getPassword()); } @Override public boolean existsUsername(String username) { if(userDao.queryUserByUserName(username) == null) { return false; } return true; } }
8.在web层创建对应视图页面业务的Servlet
1)注册页面RegistServlet
/** * */ package com.book.web; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.book.pojo.User; import com.book.service.UserService; import com.book.service.impl.UserServiceImpl; /** * @ClassName: RegistServlet * @Description: TODO * @author lye * @date Nov 12, 2021 */ public class RegistServlet extends HttpServlet{ UserService userService = new UserServiceImpl(); @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //获取请求参数 String username = req.getParameter("username"); String password = req.getParameter("password"); String email = req.getParameter("email"); String code = req.getParameter("code"); //检查 验证码是否正确 ==写死,要求验证码为:abcde if("abcde".equalsIgnoreCase(code)) { //正确: //检查用户名是否可用 boolean existsUsername = userService.existsUsername(username); if(existsUsername) { //不可用 System.out.println("用户名 " + username +" 已存在"); //跳回注册页面 req.getRequestDispatcher("/pages/user/regist.html").forward(req, resp); }else { //可用 //调用service保存到数据库 userService.registUser(new User(null,username,password,email)); req.getRequestDispatcher("/pages/user/regist_success.html").forward(req, resp); } }else { //不正确 跳回到注册页面 System.out.println("验证码" + code + "错误"); req.getRequestDispatcher("/pages/user/regist.html").forward(req, resp); } } }
2)登录页面LoginServlet
/** * */ package com.book.web; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.book.pojo.User; import com.book.service.UserService; import com.book.service.impl.UserServiceImpl; /** * @ClassName: LoginServlet * @Description: TODO * @author lye * @date Nov 12, 2021 */ public class LoginServlet extends HttpServlet{ UserService userService = new UserServiceImpl(); @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //1 获取请求参数 String username = req.getParameter("username"); String password = req.getParameter("password"); //2.调用userService.login()处理业务 User loginUser = userService.login(new User(null, username, password, null)); //如果等于null ,说明登录失败 if(loginUser == null) { req.getRequestDispatcher("/pages/user/login.html").forward(req, resp); }else { //登录成功 req.getRequestDispatcher("/pages/user/login_success.html").forward(req, resp); } } }
关于分页的分析:


浙公网安备 33010602011771号