本文实例为大家分享了javaweb实现用户登录与注册功能的具体代码,供大家参考,具体内容如下 用到的知识 客户端:html CSS js (Jquery) 服务器:Java基础&nb
本文实例为大家分享了javaweb实现用户登录与注册功能的具体代码,供大家参考,具体内容如下
服务器:Java基础 JSP Servlet JDBC Tomcat
用到的jar包 druid数据库连接池 dbutils JDBC数据库操作工具 mysql jar包
总体结构:
客户端数据库部分网址
服务器部分采用JavaEE三层架构
(1)、表现层:通俗讲就是展现给用户的界面,即用户在使用一个系统的时候他的所见所得。
(2)、业务逻辑层:针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑处理。
(3)、数据访问层:该层所做事务直接操作数据库,针对数据的增添、删除、修改、查找等。
先创建基本的文件夹架构,三层的文件夹依次为WEB ,servlet ,DAO。 此外还有其他相关文件夹工具类utils,JAVABean类pojo,测试类test 。依次实现从DAO层到Servce层再到Web层。
文件夹架构
资源文件 jdbc.properties
username=root
passWord=123456
url=jdbc:mysql://localhost:3306/book
driverClassName=com.mysql.jdbc.Driver
initialSize=5
maxActive=10
0.写好JAVABean User类
package com.book.pojo;
public class User {
private Integer id;
private String username;
private String password;
private String email;
public User() {
}
public User(Integer id, String username, String password, String email) {
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 + '\'' +
'}';
}
}
1.先实现数据连接
JDBCUtils
package com.book.utils;
import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
public class JDBCUtils {
private static DruidDataSource druidDataSource;
//数据库连接池初始化
static {
try {
InputStream resourceAsStream = JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");//类加载器默认是从classPath路径加载资源
Properties properties = new Properties();
properties.load(resourceAsStream);
//创建数据库连接池
druidDataSource = (DruidDataSource) DruidDataSourceFactory.createDataSource(properties);
} catch (Exception e) {
System.out.println("数据库连接池初始化异常");
}
}
//获取数据库连接池中的连接
public static Connection getConnection() {
Connection connection= null;
try {
connection = druidDataSource.getConnection();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return connection;
}
public static void close(Connection connection) {
try {
connection.close();
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
public static void main(String[] args) {
JDBCUtils jdbcUtils=new JDBCUtils();
System.out.println(jdbcUtils.getConnection());
}
}
2.测试连接是否成功
3.编写BaseDAO 实现对数据库的基本通用操作
package com.book.DAO;
import com.book.utils.JDBCUtils;
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 java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public abstract class BaseDAO {
private QueryRunner queryRunner=new QueryRunner();
//数据库通用操作,使用dbutils来操作
//用来执行updata,delete,insert
public int updata(String sql,Object...objects){
Connection connection= JDBCUtils.getConnection();
try {
return queryRunner.update(connection,sql,objects);//返回影响的行数
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return -1;
}
//用来执行查询操作
public <T>T queryForOne(Class<T>clazz,String sql,Object...objects){
Connection connection=JDBCUtils.getConnection();
try {
return queryRunner.query(connection,sql,new BeanHandler<T>(clazz),objects);
} catch (Exception throwables) {
throwables.printStackTrace();
}
return null;
}
//查询多个结果
public <T>List<T> queryForList(Class<T>clazz,String sql,Object...objects){
Connection connection=JDBCUtils.getConnection();
List<T>list=new ArrayList<>();
try {
list=queryRunner.query(connection,sql,new BeanListHandler<T>(clazz),objects);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return list;
}
//查询单个数
public Object queryForSingleValue(String sql,Object...objects){
Connection connection= JDBCUtils.getConnection();
try {
return queryRunner.query(connection,sql,new ScalarHandler(),objects);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
return null;
}
}
4.编写UserDAO接口确定需要的操作
package com.book.DAO;
import com.book.pojo.User;
public interface UserDAO {
// 注册时判断是否该用户名已经被注册 根据用户名查询用户信息 如果返回null说明没有该用户
public User queryUserByUsername(String username);
//注册成功 保存用户信息
public int saveUser(User user);
//登录操作 根据用户名和密码查询用户 查不到返回null
public User queryUserByUsernameAndPassword(String username,String password);
}
5.UserDAOImpl实现UserDAO接口
package com.book.DAO;
import com.book.pojo.User;
//所犯错误:继承的子类会有父类的全部方法,不要在子类中声明父类对象,调用父类方法
public class UserDAOimpl extends BaseDAO implements UserDAO{
@Override
public User queryUserByUsername(String username) {
String sql="select * from users where username=?";
User user =queryForOne(User.class,sql,username);
return user;
}
//所犯错误:输入的邮箱不能重复
@Override
public int saveUser(User user) {
String sql="INSERT INTO `users`(`username`,`password`,`email`) VALUES(?,?,?)";
int n;
n = updata(sql,user.getUsername(),user.getPassword(),user.getEmail());
return n;
}
@Override
public User queryUserByUsernameAndPassword(String username, String password) {
String sql="select * from users where username=? and password=?";
User user=queryForOne(User.class,sql,username,password);
return user;
}
}
1.UserServce接口确定业务需要的方法,用来与Web层进行交互
package com.book.servlet;
import com.book.pojo.User;
//业务层一个业务一个方法
public interface UserServce {
//注册业务 注册成功将用户保存到数据库中
public void reGIStUser(User user);
//登录业务
public User login(User user);
//检查用户名是否可用 返回true表示用户名已存在
public boolean existUsername(String username);
}
2.UserServceImpl类实现UserServce接口
package com.book.servlet;
import com.book.DAO.UserDAO;
import com.book.DAO.UserDAOimpl;
import com.book.pojo.User;
public class UserServceImpl implements UserServce {
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 existUsername(String username) {
//用户名不存在
if(userDAO.queryUserByUsername(username)==null){
return false;
}else {
return true;
}
}
}
1.注册操作
package com.book.web;
import com.book.pojo.User;
import com.book.servlet.UserServce;
import com.book.servlet.UserServceImpl;
import javax.servlet.ServletException;
import javax.servlet.Http.httpservlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class RegistServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
UserServce userServce=new UserServceImpl();
//获取请求参数
String username=req.getParameter("username");
String password=req.getParameter("password");
String email=req.getParameter("email");
String code=req.getParameter("code");
//判断验证码是否正确 忽略大小写
if("6n6np".equalsIgnoreCase(code)){
//判断是否存在用户名
if(!userServce.existUsername(username)){
//不存在则将注册信息写入数据库
User user=new User(null,username,password,email);
userServce.registUser(user);
//请求转发到注册成功页面
req.getRequestDispatcher("/pages/user/regist_success.jsp").forward(req,resp);
}else{
System.out.println("用户名已存在");
//跳转到注册页面
req.getRequestDispatcher("/pages/user/regist.jsp").forward(req,resp);
}
}else {
System.out.println("验证码错误");
//跳转到注册页面
req.getRequestDispatcher("/pages/user/login.jsp").forward(req,resp);
}
}
}
2.登录操作
package com.book.web;
import com.book.pojo.User;
import com.book.servlet.UserServce;
import com.book.servlet.UserServceImpl;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class LoginServlet extends HttpServlet {
private UserServce userServce=new UserServceImpl();
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//获取请求参数
String username=req.getParameter("username");
String password=req.getParameter("password");
User user=new User(null,username,password,null);
//判断用户的账号密码是否正确
if(userServce.login(user)!=null){
//登录成功跳转到登录成功页面
System.out.println("登录成功");
req.getRequestDispatcher("/pages/user/login_success.jsp").forward(req,resp);
}else{
//账号或密码不正确
System.out.println("账号或密码不正确");
req.getRequestDispatcher("/pages/user/login.jsp").forward(req,resp);
}
}
}
--结束END--
本文标题: JavaWeb实现用户登录与注册功能(服务器)
本文链接: https://lsjlt.com/news/133304.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
2024-10-22
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0