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

简介: 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>


目录
相关文章
|
12月前
|
Java Apache 开发者
解决java.lang.IllegalArgumentException: Invalid uri由无效查询引起的问题
最后,当你修改代码以避免这个异常时,保持代码的整洁和可读性同样重要。注释你的代码,用意图清晰的方法名,并确保逻辑简单明了,这样在未来你或其他开发者需要时可以轻松地维护它。
1284 20
|
SQL Java 数据库
解决Java Spring Boot应用中MyBatis-Plus查询问题的策略。
保持技能更新是侦探的重要素质。定期回顾最佳实践和新技术。比如,定期查看MyBatis-Plus的更新和社区的最佳做法,这样才能不断提升查询效率和性能。
795 1
|
SQL NoSQL Java
Java使用sql查询mongodb
通过MongoDB Atlas Data Lake或Apache Drill,可以在Java中使用SQL语法查询MongoDB数据。这两种方法都需要适当的配置和依赖库的支持。希望本文提供的示例和说明能够帮助开发者实现这一目标。
684 17
|
SQL Java 数据库连接
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
2054 6
|
SQL NoSQL Java
Java使用sql查询mongodb
通过使用 MongoDB Connector for BI 和 JDBC,开发者可以在 Java 中使用 SQL 语法查询 MongoDB 数据库。这种方法对于熟悉 SQL 的团队非常有帮助,能够快速实现对 MongoDB 数据的操作。同时,也需要注意到这种方法的性能和功能限制,根据具体应用场景进行选择和优化。
674 9
|
SQL Java
使用java在未知表字段情况下通过sql查询信息
使用java在未知表字段情况下通过sql查询信息
290 8
|
SQL Java 关系型数据库
java连接mysql查询数据(基础版,无框架)
【10月更文挑战第12天】该示例展示了如何使用Java通过JDBC连接MySQL数据库并查询数据。首先在项目中引入`mysql-connector-java`依赖,然后通过`JdbcUtil`类中的`main`方法实现数据库连接、执行SQL查询及结果处理,最后关闭相关资源。
1012 6
|
Java 测试技术 开发者
💡Java 零基础:彻底掌握 for 循环,打造高效程序设计
【10月更文挑战第15天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
543 63
|
缓存 Java 数据处理
java查询大量数据优化
通过结合的高性能云服务,如其提供的弹性计算资源与全球加速网络,可以进一步增强这些优化策略的效果,确保数据处理环节更加迅速、可靠。蓝易云不仅提供稳定的基础架构,还拥有强大的安全防护和灵活的服务选项,是优化大型数据处理项目不可或缺的合作伙伴。
488 0
|
SQL Java
使用java在未知表字段情况下通过sql查询信息
使用java在未知表字段情况下通过sql查询信息
210 1