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>


目录
相关文章
|
SQL Java 中间件
【YashanDB知识库】yasdb jdbc驱动集成BeetISQL中间件,业务(java)报autoAssignKey failure异常
在BeetISQL 2.13.8版本中,客户使用batch insert向yashandb表插入数据并尝试获取自动生成的sequence id时,出现类型转换异常。原因是beetlsql在prepareStatement时未指定返回列,导致yashan JDBC驱动返回rowid(字符串),与Java Bean中的数字类型tid不匹配。此问题影响业务流程,使无法正确获取sequence id。解决方法包括:1) 在batchInsert时不返回自动生成的sequence id;2) 升级至BeetISQL 3,其已修正该问题。
【YashanDB知识库】yasdb jdbc驱动集成BeetISQL中间件,业务(java)报autoAssignKey failure异常
|
设计模式 缓存 中间件
探索PHP中的中间件模式
【10月更文挑战第33天】在编程世界中,设计模式是解决常见问题的模板。本文将带你领略PHP中中间件模式的魅力,它如何优雅地处理请求,并保持代码的整洁与可维护性。通过实际代码示例,我们将一步步实现一个简单的中间件框架,让你轻松理解并应用到自己的项目中。
|
存储 前端开发 测试技术
MVC、MVP、MVVM 模式
MVC、MVP 和 MVVM 是三种常见的软件架构模式,用于分离用户界面和业务逻辑。MVC(Model-View-Controller)通过模型、视图和控制器分离数据、界面和控制逻辑;MVP(Model-View-Presenter)将控制逻辑移到 Presenter 中,减少视图的负担;MVVM(Model-View-ViewModel)通过数据绑定机制进一步解耦视图和模型,提高代码的可维护性和测试性。
|
设计模式 监控 中间件
深入理解PHP中的中间件模式
【10月更文挑战第20天】探索PHP编程世界中的“交通枢纽”——中间件模式。从代码层面剖析如何实现请求和响应的高效管理,以及如何在开发中应用这一模式来增强项目的扩展性和维护性。
|
中间件 PHP 开发者
深入理解PHP中的中间件模式
【10月更文挑战第6天】在PHP开发中,中间件模式是一种优雅的处理请求和响应的方式。本文将带你探索中间件模式的概念、实现及其在PHP框架中的应用,同时提供实用的代码示例来加深理解。
248 4
|
前端开发 Java
【案例+源码】详解MVC框架模式及其应用
【案例+源码】详解MVC框架模式及其应用
1321 0
|
设计模式 开发框架 前端开发
MVC 模式在 C# 中的应用
MVC(Model-View-Controller)模式是广泛应用于Web应用程序开发的设计模式,将应用分为模型(存储数据及逻辑)、视图(展示数据给用户)和控制器(处理用户输入并控制模型与视图交互)三部分,有助于管理复杂应用并提高代码可读性和维护性。在C#中,ASP.NET MVC框架常用于构建基于MVC模式的Web应用,通过定义模型、控制器和视图,实现结构清晰且易维护的应用程序。
345 2
|
JavaScript 前端开发 中间件
深入浅出Node.js中间件模式
【9月更文挑战第13天】本文将带你领略Node.js中间件模式的魅力,从概念到实战,一步步揭示如何利用这一强大工具简化和增强你的Web应用。我们将通过实际代码示例,展示中间件如何在不修改原有代码的情况下,为请求处理流程添加功能层。无论你是前端还是后端开发者,这篇文章都将为你打开一扇通往更高效、更可维护代码的大门。
|
设计模式 缓存 中间件
深入理解PHP中的中间件模式
【9月更文挑战第12天】本文旨在通过浅显易懂的语言和实际代码示例,引导读者了解PHP中如何实现和使用中间件模式,以及这一设计模式如何优化我们的应用程序结构。文章将逐步介绍中间件的概念、在PHP中的应用实例,以及如何自定义中间件来解决实际问题。
|
前端开发 测试技术 开发者
MVC模式在现代Web开发中有哪些优势和局限性?
MVC模式在现代Web开发中有哪些优势和局限性?

热门文章

最新文章