登录与注册(JDBC)

实验七 登录与注册(JDBC


目    录

实验七 登录与注册(JDBC)

一、实验目的

学会安装MySQL数据库;

熟练掌握JDBC;

理解登录和注册在数据库中的体现。

二、实验要求

基本要求:

三、一些相关方法

四、相关的SQL语句

1.注册的插入语句

 2.登录的查询语句

五、实验步骤

2.基本要求6

3.基本要求7

六、实验总结


一、实验目的

  1. 学会安装MySQL数据库;
  2. 熟练掌握JDBC;
  3. 理解登录和注册在数据库中的体现。

二、实验要求

基本要求:
  1. 编写一个UserBean类,要求该类具有两个属性namepassword,并给出两个属性对应的gettersetter方法。
  2. MySQL数据库中新建wgw数据库,并建立名为tb_user的用户信息表,tb_user表包括namepassword两个属性,此两个属性均为varchar(50)类型,均不为空,name为主键。
  3. 编写主页面index.jsp,该页面提供两个超链接,分别链接到注册页面和登录页面;
  4. 编写一个注册页面zhuce.jsp,包括:用户名,密码,密码确认以及确认和重设按钮;
  5. 编写一个登录页面denglu.jsp,包括:用户名,密码以及确认和重设按钮;
  6. 注册处理ServlettreatZhuCe.javaServlet判断用户名和密码是否为空、密码和密码确认是否相同。如果用户名和密码不为空且密码和密码确认相同,则认为注册成功,并将用户的姓名和密码存入到数据库wgwtb_user表中。否则认为注册失败。处理结果交给zhuCeResult.jsp显示。

7.登录处理ServlettreatDengLu.javaServlet判断判断用户名和密码是否为空,若不为空,在数据库wgwtb_user表中查询用户名和密码是否匹配。如果匹配则认为登录成功,生成UserBean对象user,在session对象以“user”的名字存入。其它情况均认为登录失败。处理结果交给dengLuResult.jsp显示。

三、一些相关方法

boolean java.lang.String.equals(Object anObject)

String java.lang.String.trim()

Object javax.servlet.ServletRequest.getAttribute(String arg0)

void javax.servlet.ServletRequest.setAttribute(String arg0, Object arg1)

String javax.servlet.ServletRequest.getParameter(String arg0)

RequestDispatcher javax.servlet.ServletRequest.getRequestDispatcher(String path)

void javax.servlet. RequestDispatcher. forward(ServletRequest request, ServletResponse response)

HttpSession javax.servlet.http.HttpServletRequest.getSession(boolean arg0)

void javax.servlet.http.HttpSession.setAttribute(String arg0, Object arg1)

void javax.servlet.http.HttpSession.getAttribute(String arg0)

PrintWriter javax.servlet.ServletResponse.getWriter()

ServletContext javax.servlet.GenericServlet.getServletContext()

java.lang.Class.forName(“com.mysql.jdbc.Driver”) throws ClassNotFoundException

Connection java.sql.DriverManager.getConnection(String url,String name,String password) throws SQLException

Statement java.sql.Connection.createStatement() throws SQLException

PreparedStatement java.sql.Connection.prepareStatement(String sql) throws SQLException

int java.sql.Statement.executeUpdate(String sql) throws SQLException

ResultSet java.sql.PreparedStatement.executeQuery() throws SQLException

void java.sql.Connection.close() throws SQLException

void java.sql.Statement.close() throws SQLException

void java.sql.ResultSet.close() throws SQLException

四、相关的SQL语句

1.注册的插入语句
PreparedStatement pmt=null;
/*完成插入*/
pmt=con.prepareStatement("INSERT INTO tb_user (name, password) values(?, ?)");
pmt.setString(1,userName);
pmt.setString(2,userPassw);
pmt.executeUpdate();
 2.登录的查询语句
PreparedStatement pmt=null;
/*完成查询*/
pmt=con.prepareStatement("select * from tb_user where name = ? and password = ?");
pmt.setString(1,userName);
pmt.setString(2,userPassw);
rs = pmt.executeQuery();

五、实验步骤

1.基本要求2 在MySQL数据库中新建wgw数据库

(1)下载MySQL,下载地址为MySQL :: Download Connector/JMySQL :: Download Connector/JMySQL :: Download Connector/J(点击即可跳转),选择Platform Independent,选择ZIP点击下载,如图

图 1 下载MySQL页面

(2)加载驱动程序,下载好MySQL后解压,在eclipse中右键项目,点击Build Path->Configure Build Path

图 2 装载MySQL

(3)点击Add External JARs,找到刚才解压MySQL的路径,选择mysql的jar文件,点击应用。

图 3 配置MySQL

(4)可以看到mysql的jar文件出现在Referenced Libraries下,再将驱动程序mysql-connector-java-8.1.0.jar放入Tomcat安装目录的lib文件夹下,配置完成。

图 4 查看MySQL配置

(5)打开MySQL创建数据库www,填写数据库名,点击创建

图 5 创建数据库

(6)双击数据库,右键点击创建表

图 6 创建表

(7)里面有两个属性name和password,两个属性均为varchar(50)类型,均不为空,name为主键。

图 7 填写表名及属性

2.基本要求6

(1)重写doGet和doPost方法

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      //判断代码
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

(2)判断用户名和密码是否为空、密码和确认密码是否相同和前面实验相同,但是这里要连接数据库,先写URL地址,我用的是MySQL,端口号为3306,数据库名称为wgw,根据URL的语法规则,jdbc:<subprotocol>:<subname>,代码为:

Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/ylz", "root", "root"); 

(3)判断用户是否存在,也就是查询数据库有没有与输入用户信息相同的,若有则用户已存在,注册失败,要保证没每个用户名单一性,这里没有做的很复杂,只是判断用户名是否相同,应该还需要判断密码是否相同,这里密码是可以相同的,因为用户名这个属性在表格中是主键,只能出现一次。注册结果有对应的massage给出提示。

使用游标next,下移记录,对应的用户名和密码,将注册的用户名和密码插入数据库中。注册成功,跳转到zhuCeResult.jsp页面

PreparedStatement stmt = conn.prepareStatement("SELECT * FROM tb_user WHERE username = ?");
                    stmt.setString(1, username);
                    ResultSet rs = stmt.executeQuery();
                    
                    if (rs.next()) {
response.sendRedirect("zhuCeResult.jsp?register=failed&message=Username already exists.");

(4)用户名还未注册,则将该条信息插入数据库表格中,返回注册成功的消息5

} else {
                        stmt = conn.prepareStatement("INSERT INTO tb_user (username, password) VALUES (?, ?)");
                        stmt.setString(1, username);
                        stmt.setString(2, password);
                        stmt.executeUpdate();
response.sendRedirect("zhuCeResult.jsp?register=success");
                    }

(5)使用完数据库关闭连接

rs.close();
stmt.close();
conn.close();

(6)zhuCeResult.jsp作出部分修改,注册不同结果显示不同效果,判断注册是否成功,给出返回首页的链接,注册是否成功都能返回主页继续操作,代码如下:

if (register != null && register.equals("success")) {
            out.println("注册成功!");
        } else {
            out.println("注册失败,错误信息: " + message);
        }
<br>
    <a href="index.jsp">返回首页</a>

(7)运行结果

①输入一个未注册过的用户名,填写密码和确认密码

图 8 输入未注册过的用户名,正确填写密码和确认密码

②注册成功,输出如下结果,如果想继续登陆可以点击下面的返回首页的链接,跳转到首页,可以继续进行注册和登陆

图 9 注册成功

③用户名或密码未输入

图 10 未输入用户名或密码

④对应的message输出如下,同样可以点击下面的返回主页链接,重新进行注册

图 11 未填写用户名或密码注册结果

⑤密码和确认密码输入不一样也会给出提示

图 12密码和确认密码不一样

⑥输出错误提示,密码和确认密码不匹配

图 13 密码和确认不一致注册结果

⑦如果一个用户名已经注册好了,但是其他用户也想注册这个用户名,就会提示,该用户名已存在,这是数据库中主键的设置,只能不能有相同项出现,前面“源来在”已经注册过,这里又一次注册

图 14 数据库已经存在的用户名注册

⑧用户注册时就会访问数据库,查询该用户名是否存在,若存在给出如下提示。

图 15 用户名也存在注册结果

3.基本要求7

登录处理Servlet:treatDengLu.java。该Servlet判断判断用户名和密码是否为空,若不为空,在数据库wgw的tb_user表中查询用户名和密码是否匹配。如果匹配则认为登录成功,生成UserBean对象user,在session对象以“user”的名字存入。其它情况均认为登录失败。处理结果交给dengLuResult.jsp显示。

(1)重写doGet方法和doPost方法

public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      //判断代码
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }

(2)先判断用户名和密码是否为空,密码和确认密码是否一样,用户名和密码都不为空且密码和确认密码一样时,获取数据库连接

Connection conn = null;
    PreparedStatement stmt = null;
    ResultSet rs = null;

    try {
        
        Class.forName("com.mysql.jdbc.Driver");

        
        String url = "jdbc:mysql://localhost:3306/wgw";
        String dbUsername = "root";
        String dbPassword = "root";
        conn = DriverManager.getConnection(url, dbUsername, dbPassword);

(3)查询数据库,输入的用户名是否存在数据库中

String query = "SELECT * FROM tb_user WHERE username = ? AND password = ?";
        stmt = conn.prepareStatement(query);
        stmt.setString(1, username);
        stmt.setString(2, password);
        rs = stmt.executeQuery();

(4)该用户名是否在数据库内,若不在直接重定向到denglu.jsp,重新登陆,否则查询密码与数据库中的密码是否匹配,匹配成功则提示登陆成功,不匹配则重定向到denglu.jsp。没有登录失败提示。

if (rs.next()) {
            
            UserBean user = new UserBean();
            user.setUsername(username);
            user.setPassword(password);

        
            HttpSession session = request.getSession();
            session.setAttribute("user", user);

         
            response.sendRedirect("dengLuResult.jsp");
        } else {
             
            response.sendRedirect("dengLuResult.jsp");
        }

(5)匹配成功,生成UserBean对象user,在session对象以“user”的名字存入,否则登陆失败,返回输出错误提示

if (rs.next()) {
            
            UserBean user = new UserBean();
            user.setUsername(username);
            user.setPassword(password);

        
            HttpSession session = request.getSession();
            session.setAttribute("user", user);

         
            response.sendRedirect("dengLuResult.jsp");
        } else {
            
            response.sendRedirect("dengLuResult.jsp");
        }

(6)最后完成后关闭所有连接,以免占用资源。

} catch (ClassNotFoundException | SQLException e) {
        e.printStackTrace();
    } finally {
        
        try {
            if (rs != null) rs.close();
            if (stmt != null) stmt.close();
            if (conn != null) conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

(7)dengLuResult.jsp判断登陆是否成功,从session中获取UserBean对象,用user是否为空判断,因为前面登陆成功吧user放到session中

<%
    }
    UserBean user = (UserBean) session.getAttribute("user");

if (user != null) {
%>
   
        <h2>登陆成功</h2>
        <p>你好, <%= user.getUsername() %>!</p>
<%
    } else {
%>
        <h2>登陆失败</h2>
        <p>请确保用户名和密码不为空,并且确认密码输入确。</p>
<%
    }
%>

(8)运行结果

①用户输入用户名和密码,在数据库中正好存在该用户名,“呜呜呜”前面注册过了,且用户输入密码与数据库中密码匹配

图 16 输入注册过的用户名及密码

②则登陆成功,如图

图 17 登陆成功

③用户名或密码未填写,用户名密码填写错误与数据库中不匹配

图 18 输入数据库中不存在的用户名

图 19 输入密码与数据库中保存密码不匹配

④返回登录失败,并给出错误提示

图 20 登陆失败

六、实验总结

本实验主要考查数据库的连接,对数据库中表格进行增添和查询,安装MySQL,加载驱动程序。数据库连接很简单,前面加载驱动花费了一段时间,总体操作还是很简单的。在调试treatDengLu.java时候一直有错误,404,403,500这些错误可以说都出现了一遍,在实验六中出现的URL不支持get方法,资源不存在或不允许访问的错误本次实验又出现了,总的来说还是有一些小细节问题,最后找了很多资料才把这些问题解决。对每种错误页面提示有了新的认识,对网页输出、跳转等有了进一步的认识。

  • 33
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
### 回答1: JDBCJava数据库连接的缩写,是Java语言中用于连接和操作数据库的API。ServletJava Web开发中的一种技术,用于处理HTTP请求和响应。JSP是Java Server Pages的缩写,是一种动态网页技术,可以将Java代码嵌入到HTML页面中。 在注册登录方面,可以使用JDBC连接数据库,将用户信息存储在数据库中。在Servlet中处理用户提交的注册登录请求,通过JDBC操作数据库进行验证和存储。在JSP中可以使用Java代码获取数据库中的用户信息,并根据用户的登录状态显示不同的页面内容。 ### 回答2: JDBCJava Database Connectivity)是一种用于在Java程序和数据库之间进行通信的API。在实现注册登录功能时,JDBC可以很好地帮助我们进行用户信息的存储和查询。 首先,我们需要在数据库中建立一张用户表,用于存储用户的信息,包括用户名和密码等。在Java程序中,我们可以使用JDBC连接数据库,并使用SQL语句增加、修改、删除和查询用户信息。 在Servlet中,我们可以编写处理HTTP请求的Servlet,并使用JDBC连接数据库,在用户注册时将新用户的信息插入到用户表中,而在用户登录时则使用JDBC进行查询,检查用户名和密码是否与数据库中的记录一致。 JSP(JavaServer Pages)则可以用来展示用户注册登录的界面。我们可以编写JSP页面,用于向用户展示注册登录表单,并将用户输入的信息传递给Servlet进行处理。同时,我们还可以使用JSP中的EL表达式和JSTL标签库来完成动态数据的显示和页面的渲染。 总之,JDBCServlet和JSP三种技术的结合可以帮助我们实现用户注册登录的功能。通过连接数据库和处理HTTP请求,我们可以便捷地存储和查询用户信息,而通过JSP的页面展示和渲染功能,我们可以让用户操作更加友好和美观。 ### 回答3: 在 Java Web 开发中,很多应用都需要用户注册登录的功能,以保护用户的隐私信息或实现个性化服务等。 其中,JDBC 是数据库连接工具,可以连接 Java 应用与数据库之间的桥梁,提供对数据的读写操作。而 JSP 和 Servlet 则是 Java web 应用的核心组件,分别负责页面展示和处理请求。 下面将以一个简单的用户注册登录功能为例,介绍 JSP、ServletJDBC 在Web 开发中的应用。 1. 用户注册 用户注册需要收集用户输入的信息,将其保存到数据库中。 首先,在 JSP 页面中,我们需要使用 HTML 表单元素来收集用户信息。 ```html <form method="post" action="register"> 用户名:<input type="text" name="username"><br> 密码:<input type="password" name="password"><br> 邮箱:<input type="email" name="email"><br> <input type="submit" value="注册"> </form> ``` 当用户提交注册表单时,Servlet 将会处理请求,将收集到的用户信息存储到数据库中。在 Servlet 中,我们需要使用 JDBC 连接数据库并执行 SQL 语句。 ```java // 处理注册请求 @WebServlet("/register") public class RegisterServlet extends HttpServlet { @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 url = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC"; String user = "root"; String passwd = "123456"; try (Connection conn = DriverManager.getConnection(url, user, passwd); PreparedStatement stmt = conn.prepareStatement("INSERT INTO user(username, password, email) VALUES (?, ?, ?)")) { // 执行 SQL 语句,插入用户信息到数据库 stmt.setString(1, username); stmt.setString(2, password); stmt.setString(3, email); stmt.executeUpdate(); // 返回注册成功提示页面 resp.sendRedirect("register_success.jsp"); } catch (SQLException e) { e.printStackTrace(); } } } ``` 2. 用户登录 用户登录需要验证用户输入的用户名和密码是否匹配,并在匹配成功时创建会话信息。 同样在 JSP 页面中,用户需要输入用户名和密码。 ```html <form method="post" action="login"> 用户名:<input type="text" name="username"><br> 密码:<input type="password" name="password"><br> <input type="submit" value="登录"> </form> ``` 当用户提交登录表单时,Servlet 会对用户输入进行校验,验证用户信息是否匹配。同样需要使用 JDBC 连接数据库并执行 SQL 语句。 ```java // 处理登录请求 @WebServlet("/login") public class LoginServlet extends HttpServlet { @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 获取用户输入 String username = req.getParameter("username"); String password = req.getParameter("password"); // 连接数据库 String url = "jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC"; String user = "root"; String passwd = "123456"; try (Connection conn = DriverManager.getConnection(url, user, passwd); PreparedStatement stmt = conn.prepareStatement("SELECT * FROM user WHERE username = ?")) { // 执行 SQL 语句,查询用户信息 stmt.setString(1, username); ResultSet rs = stmt.executeQuery(); if (rs.next() && rs.getString("password").equals(password)) { // 验证成功,设置 Session 并跳转到主页 HttpSession session = req.getSession(); session.setAttribute("username", username); resp.sendRedirect("index.jsp"); } else { // 验证失败,返回登录页面 resp.sendRedirect("login.jsp"); } } catch (SQLException e) { e.printStackTrace(); } } } ``` 在主页中,我们可以通过会话信息获取当前用户并显示欢迎信息。 ```html <% HttpSession session = request.getSession(); String username = (String) session.getAttribute("username"); %> <p>欢迎 <%=username%> 登录</p> ``` 以上就是 JSP、ServletJDBC 在Web 开发中实现用户注册登录的简单应用。总之,这些工具都是很实用的 Web 开发工具,可以帮助我们实现更加完善的 Web 应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

源来在

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值