Design and Implementation of a Hospital Management System Using SSM and JSP

Modern hospital operations demand efficient, accurate management of patient records, staff assignments, and clinical workflows. A web-based system built on SSM (Spring, Spring MVC, MyBatis) and JSP addresses legacy issues such as delayed data processing and error propagation.

Roles and Capabilities

The system defines three actor types:

Administrator: Personal dashboard; manage doctors, nurses, medical cases, inpatient room allocations, examinations, medical orders, financial records, and reference data.

Doctor: Personal dashboard; oversee assigned nurses, handle medical cases, manage bed assignments, track examinations, issue medical orders, and access financial details.

Nurse: Personal dashboard; coordinate with doctors, maintain case files, supervise bed usage, record examination results, follow medical directives, and review billing information.

Architecture and Environment

  • Pattern: Browser/Server (B/S) for broad accessibility.
  • Language: Java (JDK 1.8), leveraging object-oriented principles.
  • Framework: Spring Boot to minimize configuration overhead and streamline integration.
  • Database: MySQL 5.7 for relational data handling.
  • Server: Apache Tomcat 7.
  • Build Tool: Maven 3.3.9.
  • IDE: Eclipse / MyEclipse / IntelliJ IDEA.
  • Browser: Google Chrome.

Technology Overview

Java: A statically typed, object-oriented language supporting multithreading and modular design. Encapsulation, inheritance, and polymorphism enable robust architecture. Automatic memory management and exception handling improve stability. Strong networking support facilitates seamless web integration.

Spring Boot: Extends the Spring ecosystem by providing preconfigured setups and embedded servers, reducing boilerplate. Dependency management resolves version conflicts and accelerates development cycles.

MySQL: A performant relational DBMS with concise syntax, high security via authentication and encryption, and low redundancy. Its wide adoption and ease of maintenance make it suitable for web applications.

Core Implementation Samples

File Handling Controller

package com.control; 

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.util.*;

@RestController
@RequestMapping("/fileio")
public class DocStorageCtrl {

    @Autowired
    private AppConfigSrv cfgSrv;

    @PostMapping("/push")
    public ResponseObj pushDoc(@RequestParam("doc") MultipartFile doc, String tag) throws IOException {
        if (doc.isEmpty()) throw new BusinessErr("Empty document");

        String ext = extractExt(doc.getOriginalFilename());
        File base = resolveBasePath();
        File targetDir = new File(base, "uploads");
        if (!targetDir.exists()) targetDir.mkdirs();

        String uniqueName = System.currentTimeMillis() + "." + ext;
        File dest = new File(targetDir, uniqueName);
        doc.transferTo(dest);

        if ("1".equals(tag)) {
            AppConfig cfg = cfgSrv.fetchByName("faceDoc");
            if (cfg == null) {
                cfg = new AppConfig("faceDoc", uniqueName);
            } else {
                cfg.setValue(uniqueName);
            }
            cfgSrv.saveOrModify(cfg);
        }
        return ResponseObj.success(Map.of("doc", uniqueName));
    }

    @GetMapping("/pull")
    public ResponseEntity<byte[]> pullDoc(@RequestParam String docName) {
        try {
            File base = resolveBasePath();
            File targetDir = new File(base, "uploads");
            File fileRef = new File(targetDir, docName);
            if (!fileRef.exists()) return new ResponseEntity<>(HttpStatus.NOT_FOUND);

            byte[] payload = java.nio.file.Files.readAllBytes(fileRef.toPath());
            HttpHeaders hdr = new HttpHeaders();
            hdr.setContentType(MediaType.APPLICATION_OCTET_STREAM);
            hdr.setContentDispositionFormData("attachment", docName);
            return new ResponseEntity<>(payload, hdr, HttpStatus.OK);
        } catch (IOException ex) {
            ex.printStackTrace();
            return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

    private String extractExt(String name) {
        return name.substring(name.lastIndexOf('.') + 1);
    }

    private File resolveBasePath() throws FileNotFoundException {
        return new File(System.getProperty("user.dir"));
    }
}

Discussion Forum Controller

package com.control;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.util.*;

@RestController
@RequestMapping("/discuss")
public class DialogueBoardCtrl {

    @Autowired
    private DialogueSrv dialogueSrv;

    @GetMapping("/entries")
    public ResponseObj listEntries(@RequestParam Map<String, Object> params, DialogueItem item, HttpServletRequest req) {
        if (!"admin".equals(req.getSession().getAttribute("role"))) {
            item.setOwnerId((Long) req.getSession().getAttribute("uid"));
        }
        PageData page = dialogueSrv.fetchPage(params, buildCriteria(item));
        return ResponseObj.success(Map.of("data", page));
    }

    @GetMapping("/item/{refId}")
    public ResponseObj fetchEntry(@PathVariable Long refId) {
        DialogueItem entry = dialogueSrv.findById(refId);
        return ResponseObj.success(Map.of("data", entry));
    }

    @PostMapping("/create")
    public ResponseObj createEntry(@RequestBody DialogueItem item, HttpServletRequest req) {
        item.setId(System.currentTimeMillis() + new Random().nextInt(1000));
        item.setOwnerId((Long) req.getSession().getAttribute("uid"));
        dialogueSrv.insert(item);
        return ResponseObj.success();
    }

    @PutMapping("/modify")
    @Transactional
    public ResponseObj modifyEntry(@RequestBody DialogueItem item) {
        dialogueSrv.update(item);
        return ResponseObj.success();
    }

    @DeleteMapping("/remove")
    public ResponseObj removeEntries(@RequestBody Long[] ids) {
        dialogueSrv.batchDelete(Arrays.asList(ids));
        return ResponseObj.success();
    }

    private QueryWrapper<DialogueItem> buildCriteria(DialogueItem item) {
        QueryWrapper<DialogueItem> w = new QueryWrapper<>();
        // apply filters based on item fields
        return w;
    }
}

Testing Approach

Initial deployment occurred on a local instance. White-box testing examined internal logic paths, while black-box testing validated external behavior against specifications. Test planning prioritized client requirements, early preparation, and Pareto principle application—focusing on the 20% of components responsible for 80% of potential faults. Coverage expanded from isolated modules to fully integrated workflows, ensuring comprehensive validation of business rules and interface contracts.

Tags: Hospital Management System SSM JSP Spring Boot MySQL

Posted on Mon, 12 Oct 2026 16:31:42 +0000 by anirbanb2004