阶段五-JavaWeb综合练习-学生管理系统

一.项目说明

1.前台 (用户使用)

        前端,后端

2.后台 (管理员使用)

        前端,后端

3.该项目为后台管理系统

项目开发流程:

1.需求分析

1.1 登录功能  

用户访问登录页面输入用户名和密码,并且输入验证码。全部输入正确后点击登录,登录成功跳转主页面;登录失败,则再次返回登录页面,并提示用户,用户名或者密码错误! 如果是验证码错误,则登录失败,并提示用户验证码错误!

1.2 班级管理功能
1.2.1 添加班级

用户访问添加班级功能,进入到班级添加的页面,输入要添加的班级信息,点击提交完成 班级信息的添加,并在当前页面中提示班级新增的结果.

1.2.2 查询班级

用户访问查询班级功能,分页显示所有的班级信息,并且可以对班级信息进行修改和删除操作.

1.2.3 各班人数

统计各班人数,以条形图的方式显示给用户

1.3 学生管理功能
1.3.1 添加学生

用户访问添加学生功能,进入学生信息添加页面,在输入添加的学生信息后,点击提交完成学生信息的添加,并且在当前页面中提示用户添加结果!

1.3.2 展示学生

用户访问展示学生信息功能,进入学生信息展示页面,并分页显示所有的学生信息,同时用户可以按照指定的条件对学生信息查询,并可以对学生信息进行修改和删除操作,以及导出查询的学生信息.

2.划分模块

页面

java代码

mysql数据库

3.库表设计

用户表user

字段说明
uid用户id
ukey用户账号
pwd密码
realname真实姓名

班级表class

字段说明
cid班级ID
cname班级名称
teacher老师
remark备注

学生表student

字段说明
sid学生id
sname学生姓名
hobby爱好
sex性别
bir生日
phone手机号
remark备注
cid班级编号

     

二、项目环境搭建

1. 创建项目

创建JavaEE项目,名字为:MUI。

2. 导入相关jar包

  1. 数据库驱动包

  2. json工具包

  3. jstl的两个包

3. 静态页面的修改

  1. 将模板中的静态资源(js、css、images)复制到项目的web目录下

  2. 在web目录下导入html文件

4. 创建项目包结构

创建MVC分层开发的包结构

5. 创建实体类

按照orm映射创建实体类,和表中的字段一一对应

Clazz班级实体类

package com.sh.pojo;


import java.io.Serializable;

public class Clazz implements Serializable {

  private int cid;
  private String cname;
  private String teacher;
  private String remark;


  @Override
  public String toString() {
    return "Clazz{" +
            "cid=" + cid +
            ", cname='" + cname + '\'' +
            ", teacher='" + teacher + '\'' +
            ", remark='" + remark + '\'' +
            '}';
  }

  public int getCid() {
    return cid;
  }

  public void setCid(int cid) {
    this.cid = cid;
  }

  public String getCname() {
    return cname;
  }

  public void setCname(String cname) {
    this.cname = cname;
  }

  public String getTeacher() {
    return teacher;
  }

  public void setTeacher(String teacher) {
    this.teacher = teacher;
  }

  public String getRemark() {
    return remark;
  }

  public void setRemark(String remark) {
    this.remark = remark;
  }

  public Clazz(int cid, String cname, String teacher, String remark) {
    this.cid = cid;
    this.cname = cname;
    this.teacher = teacher;
    this.remark = remark;
  }

  public Clazz() {
  }
}

Student学生实体类

package com.sh.pojo;


import java.io.Serializable;
import java.util.Arrays;
import java.util.Date;

public class Student implements Serializable {

  private int sid;
  private String sname;
  private String hobby;
  private String sex;
  private Date bir;
  private String phone;
  private String remark;
  private int cid;

  @Override
  public String toString() {
    return "Student{" +
            "sid=" + sid +
            ", sname='" + sname + '\'' +
            ", hobby='" + hobby + '\'' +
            ", sex='" + sex + '\'' +
            ", bir=" + bir +
            ", phone='" + phone + '\'' +
            ", remark='" + remark + '\'' +
            ", cid=" + cid +
            '}';
  }

  public int getSid() {
    return sid;
  }

  public void setSid(int sid) {
    this.sid = sid;
  }

  public String getSname() {
    return sname;
  }

  public void setSname(String sname) {
    this.sname = sname;
  }

  public String getHobby() {
    return hobby;
  }

  public void setHobby(String hobby) {
    this.hobby = hobby;
  }

  public String getSex() {
    return sex;
  }

  public void setSex(String sex) {
    this.sex = sex;
  }

  public Date getBir() {
    return bir;
  }

  public void setBir(Date bir) {
    this.bir = bir;
  }

  public String getPhone() {
    return phone;
  }

  public void setPhone(String phone) {
    this.phone = phone;
  }

  public String getRemark() {
    return remark;
  }

  public void setRemark(String remark) {
    this.remark = remark;
  }

  public int getCid() {
    return cid;
  }

  public void setCid(int cid) {
    this.cid = cid;
  }

  public Student(int sid, String sname, String hobby, String sex, Date bir, String phone, String remark, int cid) {
    this.sid = sid;
    this.sname = sname;
    this.hobby = hobby;
    this.sex = sex;
    this.bir = bir;
    this.phone = phone;
    this.remark = remark;
    this.cid = cid;
  }

  public Student() {
  }
}

User用户类

package com.sh.pojo;


import java.io.Serializable;

public class User implements Serializable {

  private int uid;
  private String uname;
  private String pwd;
  private String realname;


  @Override
  public String toString() {
    return "User{" +
            "uid=" + uid +
            ", uname='" + uname + '\'' +
            ", pwd='" + pwd + '\'' +
            ", realname='" + realname + '\'' +
            '}';
  }

  public int getUid() {
    return uid;
  }

  public void setUid(int uid) {
    this.uid = uid;
  }

  public String getUname() {
    return uname;
  }

  public void setUname(String uname) {
    this.uname = uname;
  }

  public String getPwd() {
    return pwd;
  }

  public void setPwd(String pwd) {
    this.pwd = pwd;
  }

  public String getRealname() {
    return realname;
  }

  public void setRealname(String realname) {
    this.realname = realname;
  }

  public User(int uid, String uname, String pwd, String realname) {
    this.uid = uid;
    this.uname = uname;
    this.pwd = pwd;
    this.realname = realname;
  }

  public User() {
  }
}

StudentDto是根据需求创建的临时实体类,用来完成具体的需求

package com.sh.pojo;

import java.io.Serializable;
import java.util.Date;

public class StudentDto implements Serializable {
    private int sid;
    private String sname;
    private String phone;
    private String sex;
    private String cname;
    private Date bir;

    @Override
    public String toString() {
        return "StudentDto{" +
                "sid=" + sid +
                ", sname='" + sname + '\'' +
                ", phone='" + phone + '\'' +
                ", sex='" + sex + '\'' +
                ", cname='" + cname + '\'' +
                ", bir=" + bir +
                '}';
    }

    public int getSid() {
        return sid;
    }

    public void setSid(int sid) {
        this.sid = sid;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getCname() {
        return cname;
    }

    public void setCname(String cname) {
        this.cname = cname;
    }

    public Date getBir() {
        return bir;
    }

    public void setBir(Date bir) {
        this.bir = bir;
    }

    public StudentDto(int sid, String sname, String phone, String sex, String cname, Date bir) {
        this.sid = sid;
        this.sname = sname;
        this.phone = phone;
        this.sex = sex;
        this.cname = cname;
        this.bir = bir;
    }

    public StudentDto() {
    }
}

三、实现验证码功能

1.需求

在登录页面中有验证码,用户一旦进入登录页面就能看到验证码图片。

如果看不清,用户可以点击验证码图片,然后会重新得到一个验证码图片。

2. 思路分析

  1. 编写一个Servlet,专门用来生成验证码(不用自己编写,参照资料即可,里面用到了Java的画图类,直接将该类复制过来)

  2. 将生成的验证码存储到Session中,因为后面点击登录按钮后还要将用户输入的和之前生成的验证码进行比对

  3. 在登录页面中,验证码使用的是图片,将图片标签的src属性值写为生成验证码的Servlet的访问路径即可

  4. 给图片加个点击事件,每次点击将图片标签的src值给稍微改动一下,比如在正常的Servlet地址后面拼一个随机数,目的是为了防止浏览器缓存而不会发送请求。

3. 具体实现

package com.sh.controller;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.Random;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/getCode")
public class RandomServlet extends HttpServlet {

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// 在内存中创建图象
		int width = 110, height = 30;
		BufferedImage image = new BufferedImage(width, height,
				BufferedImage.TYPE_INT_RGB);
		// 获取图形上下文
		Graphics g = image.getGraphics();
		// 生成随机类
		Random random = new Random();
		// 设定背景色
		g.setColor(getRandColor(200, 250));
		g.fillRect(0, 0, width, height);
		// 设定字体
		g.setFont(new Font("Times New Roman", Font.PLAIN, 20));
		// 随机产生155条干扰线,使图象中的认证码不易被其它程序探测到
		g.setColor(getRandColor(160, 200));
		for (int i = 0; i < 155; i++) {
			int x = random.nextInt(width);
			int y = random.nextInt(height);
			int xl = random.nextInt(12);
			int yl = random.nextInt(12);
			g.drawLine(x, y, x + xl, y + yl);
		}
		// 取随机产生的认证码(4位数字)
		String sRand = "";
		String[] strings = {"A","B","C","D","E","1","2","3","4","5"};
		for (int i = 0; i < 4; i++) {
			/*String rand = String.valueOf(random.nextInt(10));*/
			String rand = strings[random.nextInt(strings.length)];
			sRand += rand;
			// 将认证码显示到图象中
			g.setColor(new Color(20 + random.nextInt(110), 20 + random
					.nextInt(110), 20 + random.nextInt(110)));
			// 调用函数出来的颜色相同,可能是因为种子太接近,所以只能直接生成
			g.drawString(rand, 13 * i + 20, 20);
		}
		//保存验证码到Session
		request.getSession().setAttribute("randStr", sRand);
		// 图象生效
		g.dispose();
		
		try {
			ImageIO.write(image, "JPEG", response.getOutputStream());
		} catch (Exception e) {
			System.out.println("验证码图片产生出现错误:" + e.toString());
		}
		
	}


	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		this.doGet(request, response);
	}
	/*
	 * 给定范围获得随机颜色
	 */
	private Color getRandColor(int fc, int bc) {
		Random random = new Random();
		if (fc > 255)
			fc = 255;
		if (bc > 255)
			bc = 255;
		int r = fc + random.nextInt(bc - fc);
		int g = fc + random.nextInt(bc - fc);
		int b = fc + random.nextInt(bc - fc);
		return new Color(r, g, b);
	}
}

修改干扰线的条数,干扰线越多越看不清 

验证码的设置

将验证码保存到session中

修改登录页面中的验证码图片地址 

四、实现登录功能

未完待续

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/287249.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

三、HTML元素

一、HTML元素 HTML 文档由 HTML 元素定义。 *开始标签常被称为起始标签&#xff08;opening tag&#xff09;&#xff0c;结束标签常称为闭合标签&#xff08;closing tag&#xff09;。 二、HTML 元素语法 HTML 元素以开始标签起始。HTML 元素以结束标签终止。元素的内容是…

常见安全概念澄清,Java小白入门(八)

认证 认证 (Identification) 是验证当前用户的身份。 常见的认证技术&#xff1a; 身份证用户名和密码用户手机&#xff1a;手机短信、手机二维码扫描、手势密码用户的电子邮箱用户的生物学特征&#xff1a;指纹、语音、眼睛虹膜 授权 授权 (Authorization) 指赋予用户系统…

【OpenCV】在MacOS上源码编译OpenCV

在MacOS上源码编译OpenCV 1. 下载项目源码2. 创建CMake编译文件3. 编译安装4. 案例测试5. 总结 前言 在做视觉任务时&#xff0c;我们经常会用到开源视觉库OpenCV&#xff0c;OpenCV是一个基于Apache2.0许可&#xff08;开源&#xff09;发行的跨平台计算机视觉和机器学习软件…

【docker实战】安装tomcat并连接mysql数据库

本节用docker来安装tomcat&#xff0c;并用这个tomcat连接我们上一节安装好的mysql数据库 一、拉取镜像 我们安装8.5.69版本 先搜索一下 [rootlocalhost ~]# docker search tomcat NAME DESCRIPTION …

CRLF注入与检测

一、CRLF介绍 CRLF是CR和LF两个字符的拼接&#xff0c;它们 分别代表”回车换行”&#xff08;\r\n&#xff09;。十六进制编码分别为0x0d和0x0a&#xff0c;URL编码为%0D和%0A。CR和LF组合在一起即CRLF命令&#xff0c;它表示键盘上的"Enter"键&#xff0c;许多应用…

如何避免LLM的“幻觉”(Hallucination)

生成式大语言模型&#xff08;LLM&#xff09;可以针对各种用户的 prompt 生成高度流畅的回复。然而&#xff0c;大模型倾向于产生幻觉或做出非事实陈述&#xff0c;这可能会损害用户的信任。 大语言模型的长而详细的输出看起来很有说服力&#xff0c;但是这些输出很有可能是虚…

postman设置下载文件大小限制

问题 本地写了一个下载文件的接口&#xff0c;调用postman测试的时候&#xff0c;小文件可以&#xff0c;但时大文件就会报错&#xff0c;postman提示&#xff1a; 解决方案 点击postman的设置按钮&#xff0c;点击【Settings】&#xff0c;在打开的弹窗中选择【General】Tab…

【Spark精讲】记一个SparkSQL引擎层面的优化:SortMergeJoinExec

SparkSQL的Join执行流程 如下图所示&#xff0c;在分析不同类型的Join具体执行之前&#xff0c;先介绍Join执行的基本框架&#xff0c;框架中的一些概念和定义是在不同的SQL场景中使用的。 在Spark SQL中Join的实现都基于一个基本的流程&#xff0c;根据角色的不同&#xff0…

解析大语言模型LLM的幻觉问题:消除错觉、提高认知

文章目录 前言一、幻觉介绍二、幻觉产生的原因三、幻觉的现象四、幻觉的分类五、幻觉解决方案六、幻觉待解决问题后记 前言 在人类的感知和认知过程中&#xff0c;幻觉一直是一个被广泛讨论和研究的问题。幻觉指的是一种虚假的感知或认知经验&#xff0c;使我们看到、听到或感…

如何选择适合你的跨境电商源码?10大要点全解析

跨境电商源码是开展跨境电商业务的关键工具&#xff0c;它直接关系到电商网站的功能性和性能表现。如何选择适合自己的跨境电商源码成为了许多网商关注的焦点。本文将从多个维度全面解析如何选择适合你的跨境电商源码&#xff0c;为你的跨境电商之路提供有力支持。 关键点一&a…

大数据应用安全策略包括什么

大数据应用安全策略是为了保障大数据应用中的数据安全而采取的一系列措施&#xff0c;其重要性不容小觑。以下是大数据应用安全策略所包含的主要内容&#xff1a; 一、数据加密与安全存储 数据加密&#xff1a;对于敏感数据&#xff0c;应采用加密技术进行保护&#xff0c;包括…

【代数学作业4-汇总版】范数与迹

【代数学作业4】范数与迹 写在最前面1. 极小多项式1. 对 α \alpha α 的极小多项式2. 对 α 1 \alpha 1 α1 的极小多项式3. 对 α 2 α 1 \alpha^2 \alpha 1 α2α1 的极小多项式 2. 范数 N N N3. 数域 K K K 的范数 N K N_K NK​4. 迹 T T T5. 数域 K K K 的迹…

基于电商场景的高并发RocketMQ实战-促销活动推送至用户完整流程、Spring结合RocketMQ的生产者消费者使用

&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308; 欢迎关注公众号&#xff08;通过文章导读关注&#xff09;&#xff0c;发送【资料】可领取 深入理解 Redis 系列文章结合电商场景讲解 Redis 使用场景、中间件系列…

Redis - 挖矿病毒 db0 库 backup 反复出现解决方案

问题描述 腾讯云的服务器&#xff0c;使用 Docker 部署了 Redis 之后&#xff0c;发现 DB0 中总是出现 4 条 key&#xff0c;分别是 backup01backup02backup03backup04 而自己每次存入 db0 中的数据过一会就会被无缘无故删除掉。 原因分析 挖矿病毒 解决方案 在启动的时候…

解决电脑访问共享文件问题:“无法访问。你可能没有权限使用网络资源。请与这台服务器的......”

文章目录 1. 问题2. 解决方法 1. 问题 2. 解决方法 Win R 键入 gpedit.msc在弹出的窗口,展开左侧目录树至安全选项,如图。( 计算机配置-Windows设置:安全设置-本地策略-安全选项)

linux系统下sql脚本的执行与导出

terminal中执行 执行 mysql -u [username] -p -D [databasename] < [XXX.sql] 导出 mysql -u [username] -p [datbasename] > [XXX.sql] 导出的数据库名自定义。 mysql -u [username] -p [databasename] [tablename] > [xxx.sql] 导出表名自定义 mysql shell 执行 …

NGUI基础-图集制作(保姆级教程)

目录 图集是什么 如何打开图集制作工具 制作步骤 图集的三个关键配置 相关参数介绍 Atlas Material Texture Padding Tim Alpha PMA shader Unity Packer TrueColor Auto-upgrade Force Square Pre-processor 图集是什么 Unity图集&#xff08;Sprite Atlas&…

java SSM拖拉机售后管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM拖拉机售后管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源 代码和数据库&#xff0c;系统主要…

团结引擎试用(一)

昨天看到有群友说团结引擎开放下载了&#xff0c;今天下载试用一下 一、团结引擎官网https://unity.cn/tuanjie/tuanjieyinqing 1、要先下载团结hub 2、安装团结hub 3、安装团结引擎1.0.0 二、新建一个工程 1、支持列表中确实有微信小游戏和鸿蒙&#xff0c;但没看到车载和嵌…

maven、springboot项目编译打包本地jar、第三方jar包

0. 引言 一般我们在maven项目中都是通过引入pom坐标的形式来引入第三方jar包&#xff0c;但某些场景下&#xff0c;第三方是直接提供的jar包文件&#xff0c;这就需要我们从本地引入第三方包并进行打包。所以我们今天来看下如何进行本地引入第三方包操作 1. 步骤 1、在项目下…