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>


目录
相关文章
|
前端开发 Java 开发者
MVC 架构模式技术详解与实践
本文档旨在全面解析软件工程中经典且至关重要的 MVC(Model-View-Controller) 架构模式。内容将深入探讨 MVC 的核心思想、三大组件的职责与交互关系、其优势与劣势,并重点分析其在现代 Web 开发中的具体实现,特别是以 Spring MVC 框架为例,详解其请求处理流程、核心组件及基本开发实践。通过本文档,读者将能够深刻理解 MVC 的设计哲学,并掌握基于该模式进行 Web 应用开发的能力。
2002 1
|
Java 应用服务中间件 Docker
java-web部署模式概述
本文总结了现代 Web 开发中 Spring Boot HTTP 接口服务的常见部署模式,包括 Servlet 与 Reactive 模型、内置与外置容器、物理机 / 容器 / 云环境部署及单体与微服务架构,帮助开发者根据实际场景选择合适的方案。
778 25
|
Java Apache 开发者
解决java.lang.IllegalArgumentException: Invalid uri由无效查询引起的问题
最后,当你修改代码以避免这个异常时,保持代码的整洁和可读性同样重要。注释你的代码,用意图清晰的方法名,并确保逻辑简单明了,这样在未来你或其他开发者需要时可以轻松地维护它。
1414 20
|
供应链 JavaScript 前端开发
Java基于SaaS模式多租户ERP系统源码
ERP,全称 Enterprise Resource Planning 即企业资源计划。是一种集成化的管理软件系统,它通过信息技术手段,将企业的各个业务流程和资源管理进行整合,以提高企业的运营效率和管理水平,它是一种先进的企业管理理念和信息化管理系统。 适用于小微企业的 SaaS模式多租户ERP管理系统, 采用最新的技术栈开发, 让企业简单上云。专注于小微企业的应用需求,如企业基本的进销存、询价,报价, 采购、销售、MRP生产制造、品质管理、仓库库存管理、财务应收付款, OA办公单据、CRM等。
1075 23
Java 大视界 -- Java 大数据在智能家居能源消耗模式分析与节能策略制定中的应用(198)
简介:本文探讨Java大数据技术在智能家居能源消耗分析与节能策略中的应用。通过数据采集、存储与智能分析,构建能耗模型,挖掘用电模式,制定设备调度策略,实现节能目标。结合实际案例,展示Java大数据在智能家居节能中的关键作用。
|
SQL Java 数据库
解决Java Spring Boot应用中MyBatis-Plus查询问题的策略。
保持技能更新是侦探的重要素质。定期回顾最佳实践和新技术。比如,定期查看MyBatis-Plus的更新和社区的最佳做法,这样才能不断提升查询效率和性能。
899 1
|
SQL NoSQL Java
Java使用sql查询mongodb
通过MongoDB Atlas Data Lake或Apache Drill,可以在Java中使用SQL语法查询MongoDB数据。这两种方法都需要适当的配置和依赖库的支持。希望本文提供的示例和说明能够帮助开发者实现这一目标。
738 17
|
SQL Java 数据库连接
【潜意识Java】MyBatis中的动态SQL灵活、高效的数据库查询以及深度总结
本文详细介绍了MyBatis中的动态SQL功能,涵盖其背景、应用场景及实现方式。
2149 6
|
SQL NoSQL Java
Java使用sql查询mongodb
通过使用 MongoDB Connector for BI 和 JDBC,开发者可以在 Java 中使用 SQL 语法查询 MongoDB 数据库。这种方法对于熟悉 SQL 的团队非常有帮助,能够快速实现对 MongoDB 数据的操作。同时,也需要注意到这种方法的性能和功能限制,根据具体应用场景进行选择和优化。
736 9
|
SQL Java
使用java在未知表字段情况下通过sql查询信息
使用java在未知表字段情况下通过sql查询信息
340 8