IDEA+Java+SSH+Bootstrap+Mysql实现在线考试系统(含论文)(上)

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: IDEA+Java+SSH+Bootstrap+Mysql实现在线考试系统(含论文)

一、系统介绍


1.开发环境


开发工具:IDEA2018.2


JDK版本:jdk1.8


Mysql版本:8.0.13



2.技术选型


1.后端:使用Java+SSH进行开发,使用过滤器来验证用户是否登录,使用MVC进行分层。


2.数据库:使用Hibernate作为数据持久化框架。


3.前端:使用Bootstrap作为前端框架来开发,使用到jstl来遍历数据。jsp来展示页面。


3.系统功能


20210711021135599.jpg

1.学生

1.在线开始

2.成绩查询

3.修改密码

2.管理员

1.学生信息管理

考生信息的增删改查

2.考试成绩查询

3.试卷信息管理

试卷的增删改查

4.试题信息管理

试题信息的增删改查


4.数据库

/*
 Navicat Premium Data Transfer
 Source Server         : Mysql
 Source Server Type    : MySQL
 Source Server Version : 80013
 Source Host           : localhost:3306
 Source Schema         : ssh_online_exam
 Target Server Type    : MySQL
 Target Server Version : 80013
 File Encoding         : 65001
 Date: 11/07/2021 02:00:10
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for t_exam
-- ----------------------------
DROP TABLE IF EXISTS `t_exam`;
CREATE TABLE `t_exam`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `examDate` datetime(0) NULL DEFAULT NULL,
  `moreScore` int(11) NOT NULL,
  `score` int(11) NOT NULL,
  `singleScore` int(11) NOT NULL,
  `paperId` int(11) NULL DEFAULT NULL,
  `studentId` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `FK_l14kkd2w86mpy8v2snw37hskx`(`paperId`) USING BTREE,
  INDEX `FK_sl2v4qucyp0qe9yvnk6icka10`(`studentId`) USING BTREE,
  CONSTRAINT `FK_l14kkd2w86mpy8v2snw37hskx` FOREIGN KEY (`paperId`) REFERENCES `t_paper` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `FK_sl2v4qucyp0qe9yvnk6icka10` FOREIGN KEY (`studentId`) REFERENCES `t_student` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE = InnoDB AUTO_INCREMENT = 25 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of t_exam
-- ----------------------------
INSERT INTO `t_exam` VALUES (25, '2021-06-30 15:42:37', 0, 40, 40, 1, 'JS1001');
-- ----------------------------
-- Table structure for t_manager
-- ----------------------------
DROP TABLE IF EXISTS `t_manager`;
CREATE TABLE `t_manager`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `userName` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of t_manager
-- ----------------------------
INSERT INTO `t_manager` VALUES (1, '管理员', 'admin', 'admin');
-- ----------------------------
-- Table structure for t_paper
-- ----------------------------
DROP TABLE IF EXISTS `t_paper`;
CREATE TABLE `t_paper`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `joinDate` datetime(0) NULL DEFAULT NULL,
  `paperName` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of t_paper
-- ----------------------------
INSERT INTO `t_paper` VALUES (1, '2014-01-01 00:00:00', 'Java试卷一');
INSERT INTO `t_paper` VALUES (2, '2014-02-01 00:00:00', '语文试卷二');
INSERT INTO `t_paper` VALUES (3, '2014-01-01 00:00:00', '数学试卷一');
-- ----------------------------
-- Table structure for t_question
-- ----------------------------
DROP TABLE IF EXISTS `t_question`;
CREATE TABLE `t_question`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `answer` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `joinTime` datetime(0) NULL DEFAULT NULL,
  `optionA` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `optionB` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `optionC` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `optionD` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `subject` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `type` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `paperId` int(11) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  INDEX `FK_ebouwob97chiilpjmc6gtgwkw`(`paperId`) USING BTREE,
  CONSTRAINT `FK_ebouwob97chiilpjmc6gtgwkw` FOREIGN KEY (`paperId`) REFERENCES `t_paper` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB AUTO_INCREMENT = 21 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of t_question
-- ----------------------------
INSERT INTO `t_question` VALUES (1, 'D', '2014-01-01 00:00:00', 'A. a1', 'B. $1', 'C. _1', 'D .11', '下列不可作为java语言修饰符的是?', '1', 1);
INSERT INTO `t_question` VALUES (2, 'A', '2014-01-01 00:00:00', 'A. a1.java', 'B. a.class', 'C. a1', 'D. 都可以', '有一段java应用程序,它的主类名是a1,那么保存 它的源文件名可以是?', '1', 1);
INSERT INTO `t_question` VALUES (3, 'A,B', '2014-01-01 00:00:00', 'A. String []a', 'B. String a[]', 'C. char a[][]', 'D. String a[10]', '下面正确声明一个一维数组的是?', '2', 1);
INSERT INTO `t_question` VALUES (4, 'A,D', '2014-01-01 00:00:00', 'A. 在java中只允许单继承。', 'B. 在java中一个类只能实现一个接口。', 'C. 在java中一个类不能同时继承一个类和实现一个接口。', 'D. java的单一继承使代码更可靠。', '下面关于继承的叙述哪些是正确的?', '2', 1);
INSERT INTO `t_question` VALUES (5, 'C', '2014-01-01 00:00:00', 'A. 一个子类可以有多个父类,一个父类也可以有多个子类', 'B. 一个子类可以有多个父类,但一个父类只可以有一个子类', 'C. 一个子类可以有一个父类,但一个父类可以有多个子类', 'D. 上述说法都不对', '在Java中?', '1', 1);
INSERT INTO `t_question` VALUES (6, 'A,D', '2014-01-01 00:00:00', 'A. 包的声明必须是源文件的第一句代码。', 'B. 包的声明必须紧跟在import语句的后面。', 'C. 只有公共类才能放在包中。', 'D. 可以将多个源文件中的类放在同一个包中。', '可以将多个源文件中的类放在同一个包中?', '2', 1);
INSERT INTO `t_question` VALUES (7, 'C', '2014-01-01 00:00:00', 'A. Java是跨平台的编程语言', 'B. Java支持分布式计算', 'C. Java是面向过程的编程语言', 'D. Java是面向对象的编程语言', '下列关于Java语言的特点,描述错误的是?', '1', 1);
INSERT INTO `t_question` VALUES (21, 'D', '2021-06-29 16:00:00', '1', '2', '3', '4', 'Java基础类有几个?', '1', 1);
-- ----------------------------
-- Table structure for t_student
-- ----------------------------
DROP TABLE IF EXISTS `t_student`;
CREATE TABLE `t_student`  (
  `id` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  `cardNo` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `password` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `prefession` varchar(40) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  `sex` varchar(5) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of t_student
-- ----------------------------
INSERT INTO `t_student` VALUES ('JS1001', '1001', '张三', '123456', '计算机科学', '男');
INSERT INTO `t_student` VALUES ('JS1002', '1002', '李四', '123456', '软件工程', '男');
INSERT INTO `t_student` VALUES ('JS1003', '1003', '王五', '123456', '网络攻防', '女');
SET FOREIGN_KEY_CHECKS = 1;


5.工程截图


20210711022004305.jpg


二、系统展示


1.学生-登录页面


20210711022547544.jpg


2.学生-主页面


20210711022556171.jpg


3.学生-在线考试


20210711022605455.jpg

20210711022617844.jpg


4.学生-成绩查询


20210711022626338.jpg


5.学生-修改密码


20210711022634598.jpg

6.管理员-登录页面


20210711022642101.jpg


7.管理员-主页面


20210711022649655.jpg

8.管理员-考生信息管理


20210711022658765.jpg


9.管理员-考生成绩查询


20210711022705682.jpg

10.管理员-试卷管理


20210711022712743.jpg

11.管理员-题目管理


20210711022719949.jpg



三、部分代码


ExamAction

package com.java.yzl.action;
//考试Action类
import com.java.yzl.actionInter.ExamActionInter;
import com.java.yzl.bean.Exam;
import com.java.yzl.bean.PageBean;
import com.java.yzl.bean.Question;
import com.java.yzl.dao.ExamDao;
import com.java.yzl.dao.QuestionDao;
import com.java.yzl.util.PageUtil;
import com.java.yzl.util.PropertiesUtil;
import com.java.yzl.util.StringUtil;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.interceptor.ServletRequestAware;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.*;
import java.util.Map.Entry;
public class ExamAction extends ActionSupport implements ServletRequestAware, ExamActionInter {
    private static final long serialVersionUID = 1L;
    private ExamDao examDao = new ExamDao();
    private QuestionDao questionDao = new QuestionDao();
    private HttpServletRequest request;
    private String mainPage;
    private Exam exam;
    private Exam s_exam;
    private List<Exam> examList;
    private String page;
    private int total;
    private String pageCode;
    public String getMainPage() {
        return mainPage;
    }
    public void setMainPage(String mainPage) {
        this.mainPage = mainPage;
    }
    public Exam getExam() {
        return exam;
    }
    public void setExam(Exam exam) {
        this.exam = exam;
    }
    public List<Exam> getExamList() {
        return examList;
    }
    public void setExamList(List<Exam> examList) {
        this.examList = examList;
    }
    public Exam getS_exam() {
        return s_exam;
    }
    public void setS_exam(Exam s_exam) {
        this.s_exam = s_exam;
    }
    public String getPage() {
        return page;
    }
    public void setPage(String page) {
        this.page = page;
    }
    public int getTotal() {
        return total;
    }
    public void setTotal(int total) {
        this.total = total;
    }
    public String getPageCode() {
        return pageCode;
    }
    public void setPageCode(String pageCode) {
        this.pageCode = pageCode;
    }
    /**
     * 计算/添加考试成绩
     *
     * @return
     * @throws Exception
     */
    public String add() throws Exception {
        Map<String, String[]> keyMap = new HashMap<String, String[]>();
        keyMap = request.getParameterMap();
        Iterator<Entry<String, String[]>> it2 = keyMap.entrySet().iterator();
        int totalScore = 0;
        int singleScore = 0;
        int moreScore = 0;
        while (it2.hasNext()) {
            Entry<String, String[]> entry = it2.next();
            String keyStr = entry.getKey();
            String values[] = entry.getValue();
            String key;
            String value = "";
            if (keyStr.equals("exam.student.id") || keyStr.equals("exam.paper.id")) {
                continue;
            }
            if (keyStr.split("-")[1].equals("r")) {  // 单选
                key = keyStr.split("-")[2];
                value = values[0];
                singleScore += this.calScore(key, value, "1");
            } else {  // 多选
                key = keyStr.split("-")[2];
                for (String s : values) {
                    value += s + ",";
                }
                value = value.substring(0, value.length() - 1);
                moreScore += this.calScore(key, value, "2");
            }
        }
        totalScore = singleScore + moreScore;
        exam.setSingleScore(singleScore);
        exam.setMoreScore(moreScore);
        exam.setScore(totalScore);
        exam.setExamDate(new Date());
        examDao.saveExam(exam);
        mainPage = "exam/examResult.jsp";
        return SUCCESS;
    }
    /**
     * 计算每道题目的得分
     *
     * @param questionId
     * @param userAnswer
     * @return
     */
    private int calScore(String questionId, String userAnswer, String type) throws Exception {
        Question question = questionDao.getQuestion(questionId);
        if (userAnswer.equals(question.getAnswer())) {
            if ("1".equals(type)) {
                return 20;
            } else {
                return 30;
            }
        } else {
            return 0;
        }
    }
    /**
     * 获取考试成绩
     *
     * @return
     * @throws Exception
     */
    public String getExams() throws Exception {
        examList = examDao.getExams(s_exam, null);
        mainPage = "exam/myExam.jsp";
        return SUCCESS;
    }
    /**
     * 获取所有考试成绩
     *
     * @return
     * @throws Exception
     */
    public String examList() throws Exception {
        HttpSession session = request.getSession();
        if (StringUtil.isEmpty(page)) {
            page = "1";
        }
        if (s_exam != null) {
            session.setAttribute("s_exam", s_exam);
        } else {
            Object o = session.getAttribute("s_exam");
            if (o != null) {
                s_exam = (Exam) o;
            } else {
                s_exam = new Exam();
            }
        }
        PageBean pageBean = new PageBean(Integer.parseInt(page), Integer.parseInt(PropertiesUtil.getValue("pageSize")));
        examList = examDao.getExams(s_exam, pageBean);
        total = examDao.examCount(s_exam);
        pageCode = PageUtil.genPagation(request.getContextPath() + "/exam!examList", total, Integer.parseInt(page), Integer.parseInt(PropertiesUtil.getValue("pageSize")));
        mainPage = "exam/examList.jsp";
        return SUCCESS;
    }
    public void setServletRequest(HttpServletRequest request) {
        this.request = request;
    }
}

ManagerAction

package com.java.yzl.action;
import com.java.yzl.bean.Manager;
import com.java.yzl.dao.ManagerDao;
import com.opensymphony.xwork2.ActionSupport;
import org.apache.struts2.interceptor.ServletRequestAware;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
public class ManagerAction extends ActionSupport implements ServletRequestAware {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    private HttpServletRequest request;
    private ManagerDao managerDao = new ManagerDao();
    private Manager manager;
    private String error;
    public Manager getManager() {
        return manager;
    }
    public void setManager(Manager manager) {
        this.manager = manager;
    }
    public String getError() {
        return error;
    }
    public void setError(String error) {
        this.error = error;
    }
    /**
     * 登录验证
     *
     * @return
     * @throws Exception
     */
    public String login() throws Exception {
        HttpSession session = request.getSession();
        Manager currentUser = managerDao.login(manager);
        if (currentUser == null) {
            error = "用户名或者密码错误!";
            return ERROR;
        } else {
            session.setAttribute("currentUser", currentUser);
            return SUCCESS;
        }
    }
    /**
     * 注销用户
     *
     * @throws Exception
     */
    public String logout() throws Exception {
        request.getSession().invalidate();
        return "logout";
    }
    public void setServletRequest(HttpServletRequest request) {
        this.request = request;
    }
}

PaperAction

package com.java.yzl.action;
import com.java.yzl.bean.Paper;
import com.java.yzl.bean.Question;
import com.java.yzl.dao.PaperDao;
import com.java.yzl.dao.QuestionDao;
import com.java.yzl.util.ResponseUtil;
import com.java.yzl.util.StringUtil;
import com.opensymphony.xwork2.ActionSupport;
import net.sf.json.JSONObject;
import org.apache.struts2.ServletActionContext;
import java.util.*;
/**
 * 试卷Action类
 *
 * @author Administrator
 */
public class PaperAction extends ActionSupport {
    /**
     *
     */
    private static final long serialVersionUID = 1L;
    private PaperDao paperDao = new PaperDao();
    private QuestionDao questionDao = new QuestionDao();
    private String mainPage;
    private String paperId;
    private List<Paper> paperList = new ArrayList<Paper>();
    private List<Question> squestionList = new ArrayList<Question>();
    private List<Question> mquestionList = new ArrayList<Question>();
    private String title; // 标题
    private Paper paper;
    public List<Paper> getPaperList() {
        return paperList;
    }
    public void setPaperList(List<Paper> paperList) {
        this.paperList = paperList;
    }
    public List<Question> getSquestionList() {
        return squestionList;
    }
    public void setSquestionList(List<Question> squestionList) {
        this.squestionList = squestionList;
    }
    public List<Question> getMquestionList() {
        return mquestionList;
    }
    public void setMquestionList(List<Question> mquestionList) {
        this.mquestionList = mquestionList;
    }
    public Paper getPaper() {
        return paper;
    }
    public void setPaper(Paper paper) {
        this.paper = paper;
    }
    public String getPaperId() {
        return paperId;
    }
    public void setPaperId(String paperId) {
        this.paperId = paperId;
    }
    public String getMainPage() {
        return mainPage;
    }
    public void setMainPage(String mainPage) {
        this.mainPage = mainPage;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    /**
     * 获取所有试卷
     *
     * @return
     * @throws Exception
     */
    public String list() throws Exception {
        paperList = paperDao.getPapers();
        mainPage = "exam/selectPaper.jsp";
        return SUCCESS;
    }
    /**
     * 获取所有试卷(管理)
     *
     * @return
     * @throws Exception
     */
    public String paperList() throws Exception {
        paperList = paperDao.getPapers();
        mainPage = "paper/paperList.jsp";
        return SUCCESS;
    }
    /**
     * 通过id获取试卷实体
     *
     * @return
     * @throws Exception
     */
    public String getPaperById() throws Exception {
        paper = paperDao.getPaper(paperId);
        mainPage = "paper/paperSave.jsp";
        return SUCCESS;
    }
    /**
     * 保存预操作
     *
     * @return
     * @throws Exception
     */
    public String preSave() throws Exception {
        if (StringUtil.isNotEmpty(paperId)) {
            paper = paperDao.getPaper(paperId);
            title = "修改试卷";
        } else {
            title = "添加试卷";
        }
        mainPage = "paper/paperSave.jsp";
        return SUCCESS;
    }
    /**
     * 保存试卷
     *
     * @return
     * @throws Exception
     */
    public String savePaper() throws Exception {
        if (StringUtil.isNotEmpty(paperId)) {
            paper.setId(Integer.parseInt(paperId));
        } else {
            paper.setJoinDate(new Date());
        }
        paperDao.savePaper(paper);
        return "save";
    }
    /**
     * 删除试卷
     *
     * @return
     * @throws Exception
     */
    public String deletePaper() throws Exception {
        paper = paperDao.getPaper(paperId);
        JSONObject resultJson = new JSONObject();
        if (questionDao.existQuestionByPaperId(paperId)) {
            resultJson.put("error", "试卷下面有题目,不能删除");
        } else {
            paperDao.paperDelete(paper);
            resultJson.put("success", true);
        }
        ResponseUtil.write(resultJson, ServletActionContext.getResponse());
        return null;
    }
    /**
     * 获取指定试卷
     *
     * @return
     * @throws Exception
     */
    public String getDetailPaper() throws Exception {
        paper = paperDao.getPaper(paperId);
        Set<Question> questionList = paper.getQuestions();
        Iterator<Question> it = questionList.iterator();
        while (it.hasNext()) {
            Question q = it.next();
            if ("1".equals(q.getType())) {
                squestionList.add(q);
            } else {
                mquestionList.add(q);
            }
        }
        squestionList = this.getRandomQuestion(squestionList, 3);
        mquestionList = this.getRandomQuestion(mquestionList, 2);
        mainPage = "exam/paper.jsp";
        return SUCCESS;
    }
    /**
     * 获取随机试题
     *
     * @param questionList
     * @param num
     * @return
     */
    private List<Question> getRandomQuestion(List<Question> questionList, int num) {
        List<Question> resultList = new ArrayList<Question>();
        Random random = new Random();
        if (num > 0) {
            for (int i = 1; i <= num; i++) {
                int n = random.nextInt(questionList.size());
                Question q = questionList.get(n);
                if (resultList.contains(q)) {
                    i--;
                } else {
                    resultList.add(questionList.get(n));
                }
            }
        }
        return resultList;
    }
}


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
11天前
|
NoSQL Java 关系型数据库
Liunx部署java项目Tomcat、Redis、Mysql教程
本文详细介绍了如何在 Linux 服务器上安装和配置 Tomcat、MySQL 和 Redis,并部署 Java 项目。通过这些步骤,您可以搭建一个高效稳定的 Java 应用运行环境。希望本文能为您在实际操作中提供有价值的参考。
72 26
|
15天前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。
|
25天前
|
关系型数据库 MySQL Java
MySQL索引优化与Java应用实践
【11月更文挑战第25天】在大数据量和高并发的业务场景下,MySQL数据库的索引优化是提升查询性能的关键。本文将深入探讨MySQL索引的多种类型、优化策略及其在Java应用中的实践,通过历史背景、业务场景、底层原理的介绍,并结合Java示例代码,帮助Java架构师更好地理解并应用这些技术。
25 2
|
1月前
|
监控 前端开发 Java
【技术开发】接口管理平台要用什么技术栈?推荐:Java+Vue3+Docker+MySQL
该文档介绍了基于Java后端和Vue3前端构建的管理系统的技术栈及功能模块,涵盖管理后台的访问、登录、首页概览、API接口管理、接口权限设置、接口监控、计费管理、账号管理、应用管理、数据库配置、站点配置及管理员个人设置等内容,并提供了访问地址及操作指南。
|
6天前
|
安全 Java API
java如何请求接口然后终止某个线程
通过本文的介绍,您应该能够理解如何在Java中请求接口并根据返回结果终止某个线程。合理使用标志位或 `interrupt`方法可以确保线程的安全终止,而处理好网络请求中的各种异常情况,可以提高程序的稳定性和可靠性。
36 6
|
21天前
|
设计模式 Java 开发者
Java多线程编程的陷阱与解决方案####
本文深入探讨了Java多线程编程中常见的问题及其解决策略。通过分析竞态条件、死锁、活锁等典型场景,并结合代码示例和实用技巧,帮助开发者有效避免这些陷阱,提升并发程序的稳定性和性能。 ####
|
19天前
|
存储 监控 小程序
Java中的线程池优化实践####
本文深入探讨了Java中线程池的工作原理,分析了常见的线程池类型及其适用场景,并通过实际案例展示了如何根据应用需求进行线程池的优化配置。文章首先介绍了线程池的基本概念和核心参数,随后详细阐述了几种常见的线程池实现(如FixedThreadPool、CachedThreadPool、ScheduledThreadPool等)的特点及使用场景。接着,通过一个电商系统订单处理的实际案例,分析了线程池参数设置不当导致的性能问题,并提出了相应的优化策略。最终,总结了线程池优化的最佳实践,旨在帮助开发者更好地利用Java线程池提升应用性能和稳定性。 ####
|
21天前
|
缓存 Java 开发者
Java多线程编程的陷阱与最佳实践####
本文深入探讨了Java多线程编程中常见的陷阱,如竞态条件、死锁和内存一致性错误,并提供了实用的避免策略。通过分析典型错误案例,本文旨在帮助开发者更好地理解和掌握多线程环境下的编程技巧,从而提升并发程序的稳定性和性能。 ####
|
14天前
|
安全 算法 Java
Java多线程编程中的陷阱与最佳实践####
本文探讨了Java多线程编程中常见的陷阱,并介绍了如何通过最佳实践来避免这些问题。我们将从基础概念入手,逐步深入到具体的代码示例,帮助开发者更好地理解和应用多线程技术。无论是初学者还是有经验的开发者,都能从中获得有价值的见解和建议。 ####
|
14天前
|
Java 调度
Java中的多线程编程与并发控制
本文深入探讨了Java编程语言中多线程编程的基础知识和并发控制机制。文章首先介绍了多线程的基本概念,包括线程的定义、生命周期以及在Java中创建和管理线程的方法。接着,详细讲解了Java提供的同步机制,如synchronized关键字、wait()和notify()方法等,以及如何通过这些机制实现线程间的协调与通信。最后,本文还讨论了一些常见的并发问题,例如死锁、竞态条件等,并提供了相应的解决策略。
39 3
下一篇
DataWorks