java程序设计与j2ee中间件技术/软件开发技术(III)-实验六-采用MVC模式实现用户注册和管理员查询功能

本文涉及的产品
性能测试 PTS,5000VUM额度
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: java程序设计与j2ee中间件技术/软件开发技术(III)-实验六-采用MVC模式实现用户注册和管理员查询功能

1 题目说明

采用MVC模式实现用户注册和管理员查询功能

用户直接注册,以手机号作为主键,不允许重复

管理员可以看到所有注册的用户列表

注册信息至少包括:手机号、姓名、密码、邮箱

2 实验设计

2.1 表设计

2.2 工程结构

工程结构:采用MVC模式,使用jsp+servlet+javabean。后端还使用jdbc的数据库。M是业务模型。业务模型定义了用户类,使用java bean,java bean中的User类有每个用户类模型的定义、getter、setter。在数据库中,用户有多个字段,分别为手机号(不能重复)、密码、邮箱、姓名,以及数据库后端隐藏的id号作为主键。V是用户视图。用户前端中,register.jsp是用户进行信息填写与注册的前端页面。若用户注册成功,则跳转到res.jsp页面。若用户注册失败(因为手机号重复),则跳转到duplicate.jsp页面。在register.jsp页面点击“管理用户名单”,跳转到manage.jsp并查看用户信息。

C是控制器。使用servlet,用户注册时交给AddServlet处理,查看用户名单时交给ShowServlet处理。每个Servlet都会将与数据库相关的业务服务通过调用UserService进行处理。UserService会链接数据库,调用DBConn,利用jdbc链接mysql数据库,并执行sql语句进行进一步处理。

3 运行界面截图与说明

在register.jsp中,可以进行注册。注册时输入手机号、密码、用户名、邮箱,并点击“提交”。也可以不注册,直接查看管理用户名单。

在提交注册表单后,系统会根据手机号信息查询,若查到数据库中已有重复手机号,则提示用户手机号重复且注册失败,跳转到duplicate.jsp。

在提交注册表单后,系统会根据手机号信息查询,若查到数据库中没有重复手机号,则提示用户注册成功,并向数据库中添加相应信息。

在提交注册表单时,若填写的信息不全,有空的数据项,则系统跳出提示“注册信息不得为空!”在前端的jsp页面和后端执行数据库的插入时都会判断一次,以保证数据库的安全性与完整性,不出现空信息。

(此部分涉及隐私信息,不放出)

在点击“管理用户名单”后,可以查看每个用户的手机号、密码、姓名与邮箱等完整信息。实现了管理员查询的功能。

4 代码

4.1 User.java

package bean;
public class User {
  private int id;
  private String username;
  private String password;
  private String cellphone;
  private String email;
  public int getId() {
    return id;
  }
  public void setId(int i) {
    this.id = i;
  }
  public String getUsername() {
    return username;
  }
  public void setUsername(String username) {
    this.username = username;
  }
  public String getCellphone() {
    return cellphone;
  }
  public void setCellphone(String cellphone) {
    this.cellphone=cellphone;
  }
  public String getEmail() {
    return email;
  }
  public void setEmail(String email) {
    this.email=email;
  }
  public String getPassword() {
    return password;
  }
  public void setPassword(String password) {
    this.password = password;
  }
}

4.2 DBConn.java

package db;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DBConn {
  public Connection getConnection() {
    String URL = "jdbc:mysql://localhost:3306/lab6?characterEncoding=utf-8";
    String USER = "root";
    String PASSWORD = "111111";
    // 1.加载驱动程序
    try {
      Class.forName("com.mysql.cj.jdbc.Driver");
      Connection conn = DriverManager.getConnection(URL, USER, PASSWORD);
      return conn;
  } catch (ClassNotFoundException e) {      
    e.printStackTrace();
  }catch (SQLException e) {     
    e.printStackTrace();
  } 
    return null;
  }
}

4.3 UserService.java

package service;
import java.sql.*;
import java.util.*;
import db.DBConn;
import bean.User;
public class UserService {
//  ****************************************登录service**********************************************
  public boolean checkLogin(User bean) {
//    从JavaBean中获得属性值
    String cellphone=bean.getCellphone();
    String password=bean.getPassword();
//    创建连接
    try {
      DBConn db=new DBConn();
      Connection conn = db.getConnection();
      PreparedStatement pre=conn.prepareStatement("select * from lab6table where cellphone='"+cellphone+"' and password='" + password+"'");
      ResultSet rs=pre.executeQuery();
      if(rs.next()){
        pre.close();
        rs.close();
          return true;
      }
      else
          return false;
      } catch (SQLException e) {
        System.out.println("数据库连接出错!");
      return false;
    } 
  }
//  ****************************************注册和查询service**********************************************
  public boolean add(User bean) {
    String cellphone=bean.getCellphone();
    String email=bean.getEmail();
    String username=bean.getUsername();
    String password=bean.getPassword();
    try {
      DBConn db=new DBConn();
      Connection conn = db.getConnection();
      PreparedStatement pre=conn.prepareStatement("select * from lab6table where cellphone=?");
      pre.setString(1,cellphone);
      ResultSet rs=pre.executeQuery();
      if(!rs.next()){
        PreparedStatement pre1=conn.prepareStatement("insert into lab6table(cellphone,password,username,email) VALUES(?,?,?,?)");
        pre1.setString(1,cellphone);
        pre1.setString(2,password);
        pre1.setString(3,username);
        pre1.setString(4,email);
          pre1.executeUpdate();
          conn.close();
          pre.close();
          pre1.close();
          return true;
          }
      else
          return false;
      } catch (SQLException e) {
        System.out.println("数据库连接出错!");
        return false;
      }
  }
  public List<User> select() {
    try {
      List<User> list=new LinkedList<User>();
      DBConn db=new DBConn();
      Connection conn=db.getConnection();
      PreparedStatement pre=conn.prepareStatement("select * from lab6table");
      ResultSet resultSet=pre.executeQuery();
      while(resultSet.next()){
        String cellphone=resultSet.getString(1);
        String password=resultSet.getString(2);
        String username=resultSet.getString(3);
        String email=resultSet.getString(4);
        int id=resultSet.getInt(5);
        User bean=new User();
        bean.setCellphone(cellphone);
        bean.setPassword(password);
        bean.setUsername(username);
        bean.setEmail(email);
        list.add(bean);
      }
      return list;
    }catch(SQLException e) {
      System.out.println("数据库链接出错!");
      return null;
    }
  }
}

4.4 AddServlet.java

package servlet;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import db.DBConn;
import bean.User;
import service.UserService;
public class AddServlet extends HttpServlet {
@Override
public void init() throws ServletException {
  super.init();
}
@Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  req.setCharacterEncoding("UTF-8");
  String username = req.getParameter("username");
  String password = req.getParameter("password");
  String email=req.getParameter("email");
  String cellphone=req.getParameter("cellphone");
  if(username.length()>0&&password.length()>0&&email.length()>0&&cellphone.length()>0){
//  写入JavaBean
  User bean=new User();
  HttpSession session=req.getSession(true);
  session.setAttribute("bean",bean);
  bean.setUsername(username);
  bean.setPassword(password);
  bean.setEmail(email);
  bean.setCellphone(cellphone);
  UserService addservice = new UserService();
//  判断是否注册成功
  if(addservice.add(bean)){ 
//    转发
    RequestDispatcher dis=req.getRequestDispatcher("res.jsp"); 
    dis.forward(req, resp); 
  }else{
//    重定向
    resp.sendRedirect("duplicate.jsp"); 
  }
  }else
    resp.sendRedirect("register.jsp?Null=yes"); 
  }
@Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    doGet(req, resp);
  }
}

4.5 ShowServlet.java

package servlet;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import db.DBConn;
import bean.User;
import service.UserService;
import java.util.*;
public class ShowServlet extends HttpServlet {
@Override
  public void init() throws ServletException {
    super.init();
  }
@Override
  protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    req.setCharacterEncoding("UTF-8");
    HttpSession session=req.getSession(true);
    UserService selectService = new UserService();
//  判断是否注册成功
//    转发
    List<User> users=selectService.select();
    req.setAttribute("users", users);
    RequestDispatcher dis=req.getRequestDispatcher("manage.jsp"); 
    dis.forward(req, resp); 
  }
}

4.6 web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
  <display-name>ch7_test</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
      <servlet-name>addServlet</servlet-name>
      <servlet-class>servlet.AddServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>addServlet</servlet-name>
    <url-pattern>/AddServlet</url-pattern>
  </servlet-mapping>
    <servlet>
      <servlet-name>showServlet</servlet-name>
      <servlet-class>servlet.ShowServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>showServlet</servlet-name>
    <url-pattern>/ShowServlet</url-pattern>
  </servlet-mapping>
   <servlet>
      <servlet-name>loginServlet</servlet-name>
      <servlet-class>web.LoginServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>loginServlet</servlet-name>
    <url-pattern>/loginServlet</url-pattern>
  </servlet-mapping>
</web-app>

4.7 duplicate.jsp

<%@ page contentType="text/html;charset=UTF-8"%>
<jsp:useBean id="bean" class="bean.User" scope="session"/>
<html>
<head>
    <title>查询</title>
</head>
<body>
<h2 align="center">注册失败!手机号重复!</h2>
   </body>
</html>

4.8 manage.jsp

<%@page import="bean.*"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>manage.jsp</title>
</head>
<body>
<%
List<User> users=(List<User>)request.getAttribute("users");
%>
<table border="1">
<tr>
  <th>手机号</th>
  <th>密码</th>
  <th>姓名</th>
  <th>邮箱</th>
</tr>
<%for(User user:users){%>
<tr>
  <td><%=user.getCellphone()%></td> 
  <td><%=user.getPassword()%></td> 
  <td><%=user.getUsername()%></td>
  <td><%=user.getEmail()%></td>
<tr>
<%}%>
</table>
</body>
</html>

4.9 register.jsp

<%@ page contentType="text/html;charset=UTF-8" %>
<html>
  <head>
    <title>register.jsp</title>
  </head>
  <body>
  <font size=3>
    <h1>请注册</h1>
    <form action="AddServlet" method="post">
    <table>
        <tr>
          <td>手机号:</td>
          <td><input type="text" name="cellphone"></td>
        </tr>
        <tr>
          <td>密 码:</td> 
          <td><input type="password" name="password"></td>
        </tr>
        <tr>
          <td>姓 名:</td> 
          <td><input type="text" name="username"></td>
        </tr>
        <tr>
          <td>邮 箱:</td> 
          <td><input type="text" name="email"></td>
        </tr>
        <tr>
        <td><input type="submit" value="提交"></td>
      </tr>
    </table>
    </form>
    </font>
    <form action="ShowServlet" method="post">
          <input type="submit" value="管理用户名单">
    </form>
    <script>
     var Null= '<%=request.getParameter("Null")%>';
    if(Null=='yes'){
        alert("注册信息不得为空!");
    }
    </script>
  </body>
</html>

4.10 res.jsp

<%@ page contentType="text/html;charset=UTF-8"%>
<jsp:useBean id="bean" class="bean.User" scope="session"/>
<html>
<head>
    <title>查询</title>
</head>
<body>
<h2 align="center">注册成功!</h2>
   </body>
</html>


目录
相关文章
|
1月前
|
安全 Java 测试技术
🎉Java零基础:全面解析枚举的强大功能
【10月更文挑战第19天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
106 60
|
18天前
|
Java
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式
Java 8 引入的 Streams 功能强大,提供了一种简洁高效的处理数据集合的方式。本文介绍了 Streams 的基本概念和使用方法,包括创建 Streams、中间操作和终端操作,并通过多个案例详细解析了过滤、映射、归并、排序、分组和并行处理等操作,帮助读者更好地理解和掌握这一重要特性。
25 2
|
23天前
|
JSON 前端开发 JavaScript
java-ajax技术详解!!!
本文介绍了Ajax技术及其工作原理,包括其核心XMLHttpRequest对象的属性和方法。Ajax通过异步通信技术,实现在不重新加载整个页面的情况下更新部分网页内容。文章还详细描述了使用原生JavaScript实现Ajax的基本步骤,以及利用jQuery简化Ajax操作的方法。最后,介绍了JSON作为轻量级数据交换格式在Ajax应用中的使用,包括Java中JSON与对象的相互转换。
38 1
|
1月前
|
SQL 监控 Java
技术前沿:Java连接池技术的最新发展与应用
本文探讨了Java连接池技术的最新发展与应用,包括高性能与低延迟、智能化管理和监控、扩展性与兼容性等方面。同时,结合最佳实践,介绍了如何选择合适的连接池库、合理配置参数、使用监控工具及优化数据库操作,为开发者提供了一份详尽的技术指南。
32 7
|
28天前
|
SQL Java 数据库连接
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,有效减少连接开销,提升访问效率。本文介绍了连接池的工作原理、优势及实现方法,并提供了HikariCP的示例代码。
44 3
|
28天前
|
SQL 监控 Java
Java连接池技术的最新发展,包括高性能与低延迟、智能化管理与监控、扩展性与兼容性等方面
本文探讨了Java连接池技术的最新发展,包括高性能与低延迟、智能化管理与监控、扩展性与兼容性等方面。同时,结合最佳实践,介绍了如何选择合适的连接池库、合理配置参数、使用监控工具及优化数据库操作,以实现高效稳定的数据库访问。示例代码展示了如何使用HikariCP连接池。
15 2
|
1月前
|
Java 数据库连接 数据库
优化之路:Java连接池技术助力数据库性能飞跃
在Java应用开发中,数据库操作常成为性能瓶颈。频繁的数据库连接建立和断开增加了系统开销,导致性能下降。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接,显著减少连接开销,提升系统性能。文章详细介绍了连接池的优势、选择标准、使用方法及优化策略,帮助开发者实现数据库性能的飞跃。
28 4
|
28天前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
27 1
|
28天前
|
算法 Java 数据库连接
Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性
本文详细介绍了Java连接池技术,从基础概念出发,解析了连接池的工作原理及其重要性。连接池通过复用数据库连接,显著提升了应用的性能和稳定性。文章还展示了使用HikariCP连接池的示例代码,帮助读者更好地理解和应用这一技术。
40 1
|
1月前
|
SQL Java 数据库连接
打破瓶颈:利用Java连接池技术提升数据库访问效率
在Java应用中,数据库访问常成为性能瓶颈。连接池技术通过预建立并复用数据库连接,避免了频繁的连接建立和断开,显著提升了数据库访问效率。常见的连接池库包括HikariCP、C3P0和DBCP,它们提供了丰富的配置选项和强大的功能,帮助优化应用性能。
49 2