使用JDBC实现JavaWeb登录注册(详细思路及源码,每行注释)

您所在的位置:网站首页 javaweb用户注册登录系统 使用JDBC实现JavaWeb登录注册(详细思路及源码,每行注释)

使用JDBC实现JavaWeb登录注册(详细思路及源码,每行注释)

2024-07-11 08:35| 来源: 网络整理| 查看: 265

一. Dao(Database Access Object)

导入jdbc驱动包:可到官网下载:https://dev.mysql.com/downloads/connector/j/

找到对应mysql版本(本文使用的是MySQL8.0版本)的下载好后,将jar包拖到 /WebRoot/lib/ 里面即可

接下来就可以开始了:

创建UserDao类:

import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import cn.test.bean.User; public class UserDao { //数据库连接 //数据库地址,其中mec为数据库名称 private static String sqlurl = "jdbc:mysql:///mec?useSSL=false&serverTimezone=UTC"; //数据库登录用户名,用户名和密码具体的值根据自己的来设置 private static String sqluser = "root"; //数据库登录密码 private static String sqlpwd = ""; //定义PreparedStatement 对象 private static PreparedStatement preparedStatement = null; //定义ResultSet 结果集对象 private static ResultSet resultSet = null; //定义Connection 对象 private static Connection connection = null; //把数据库连接写在一个静态代码块里 static{ try { //jdbc驱动,版本不同写法不同,此处的写法为mysql8.0版本,mysql5.0版本的写法为:com.mysql.jdbc.Driver Class.forName("com.mysql.cj.jdbc.Driver");//加载MySQL驱动 connection = DriverManager.getConnection(sqlurl, sqluser, sqlpwd);//根据前面设置的数据库用户名密码来获取数据库连接 } catch (Exception e) { e.printStackTrace(); } } //定义方法:根据用户名和密码查询用户,返回类型为User 对象(javabean),参数为用户从网页上输入的用户名和密码 public User selectUser(String username, String password){ User user = new User(); //确定带参数的sql语句(这是一大缺点,sql语句被写死,Mybatis通过将sql语句写入到xml配置文件中可解决此问题) String sql = "select username, upwd from info where username = ? and upwd = ?"; try { //将sql语句发送到sql服务中 preparedStatement = connection.prepareStatement(sql); //对sql语句中的参数赋值 //所赋的值即为方法中所带的参数“?”,1表示第一个问号,2表示第二个问号 preparedStatement.setString(1,username); preparedStatement.setString(2,password); //执行sql语句:(resultSet 为执行sql语句后返回的结果集) resultSet=preparedStatement.executeQuery(); //取值(遍历结果集resultSet)并将取到的值赋给对象(user)属性 while (resultSet.next()) { user.setUserName(resultSet.getString("username"));//获得数据库中的指定列名(字段username)中的值,并将其存储到user对象中 user.setPassword(resultSet.getString("upwd"));//获得数据库中的指定列名(字段password)中的值,并将其存储到user对象中 } } catch (SQLException e) { e.printStackTrace(); } return user;//返回对象 } 二. JavaBean

在Bean层中只需要封装类的属性的get和set方法即可,有需要也可以将toString重写。

例如:创建User类

public class User {     private int id;     private String username;     private String password;     public int getId() {         return id;     }     public void setId(int 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;     } } } 三. Service业务层

在Service层中,负责完成特定的方法的逻辑代码编写,如登录、注册。此处以登录为例:

public class LoginService {     private UserDao userDao = new UserDao();//创建userDao对象 //添加登录功能     public void login(User user) throws UserException{         //调用userDao中的selectUser()查询方法,并将查询结果赋值给新对象user1         User user1 = userDao.selectUser(user.getUserName(),user.getPassword());         if(user1.getUserName() == null || user1.getPassword() == null){//对登录条件进行限制             //输出用户名或密码错误。             throw new UserException("用户名或密码错误,请重新登录!");//抛出自定义异常         }     } } 四. Exception自定义异常

创建名为UserException的类:

public class UserException extends Exception {     public UserException(){         super();     }     public UserException(String message, Throwable cause){         super(message, cause);     }     public UserException(String message){         super(message);     }     public UserException(Throwable cause){         super(cause);     }      }

可以直接快速导入:

右键-->Source --> Generate Constructors From SuperClass

五. Servlet层

在Servlet(extends HttpServlet)层中,主要实现HttpServlet中的两个方法:

doGet(HttpServletRequest req, HttpServletResponse resp){}

doPost(HttpServletRequest req, HttpServletResponse resp){}

此处没有写doGet中的内容,是由于仅以登录作为示例,登录通常使用Post请求,by the way:

doGet和doPost的区别,这个比较直观,引用自:https://www.cnblogs.com/alsf/p/9133951.html

具体如下:

public class LoginServlet extends HttpServlet{     @Override     protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {         /*此处没有写doGet中的内容,是由于仅以登录作为示例,登录通常使用Post请求,by the way:         *doGet和doPost的区别,这个比较直观,引用自:https://www.cnblogs.com/alsf/p/9133951.html         */     }          @Override     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {                  //设置编码格式         req.setCharacterEncoding("UTF-8");         resp.setContentType("text/html;charset=utf-8");         //接收页面传值         String username = req.getParameter("username");//获取name = "username"输入框里面你输入的内容         String password = req.getParameter("password");//获取name = "password"输入框里面你输入的内容         LoginService loginService = new LoginService();//创建loginService 对象         User user = new User();//创建user 对象         user.setUsername(username);//获取到输入框里面的你输入的值后,向user对象中的username属性赋值         user.setPassword(password);//获取到输入框里面的你输入的值后,向user对象中的password属性赋值         try {             loginService.login(user);//调用login(user)方法实现登录             //登录成功后跳转到页面             req.getRequestDispatcher("/loginSuccess.jsp").forward(req, resp);         } catch (Exception e) {             // TODO: handle exception             //获取异常信息             req.setAttribute("msg", e.getMessage());             //将异常信息发送到登录页面便于展示             req.getRequestDispatcher("/login.jsp").forward(req, resp);         }     } } 六. JSP

以登录为例(涉及到简单的EL表达式的使用,即:${msg }):

            login                                           

${msg }

                                           username                                                                                            password                                                                                                                                                                                                            七. xml配置文件

在配置文件中配置好了Servlet的属性,才能实现页面之间的跳转:其中cn.test.servlet为Servlet类所在的包的路径

        LoginServlet       cn.test.servlet.LoginServlet           LoginServlet       /LoginServlet  

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3