# 基于Java Web的传统药店管理系统开发实践指南
## 引言
在当今数字化浪潮中,医药行业也在逐步实现信息化管理。本文将介绍一个基于传统Java Web技术栈开发的药店管理系统,该项目采用JSP+Servlet+JavaBean架构,不依赖Maven构建工具,适合学习Java Web基础开发的初学者参考。
## 项目概述
这个药店管理系统是一个典型的CRUD应用,实现了药品流通中的核心管理功能,包含四大模块:
- 客户信息管理
- 药品类别管理
- 药品库存管理
- 系统用户管理
系统采用B/S架构,前端使用Bootstrap+jQuery实现响应式布局,后端使用Servlet处理业务逻辑,JDBC操作MySQL数据库。
## 开发环境准备
### 技术栈
- 核心框架:JSP+Servlet+JavaBean
- 前端技术:Bootstrap 3 + jQuery 1.12
- 数据库:MySQL 5.7
- 服务器:Tomcat 8
- 开发工具:Eclipse IDE for Java EE Developers
- JDK版本:1.8
### 环境搭建步骤
1. **安装JDK 8**:配置JAVA_HOME环境变量
2. **安装MySQL 5.7**:创建数据库用户并授权
3. **安装Tomcat 8**:配置CATALINA_HOME环境变量
4. **配置Eclipse EE环境**:安装Web开发插件(如WTP)
## 项目部署指南
### 1. 导入项目到Eclipse
1. 打开Eclipse → File → Import → General → Existing Projects into Workspace
2. 选择项目根目录,确保勾选"Copy projects into workspace"
3. 检查项目属性中的Target Runtime是否配置了正确的Tomcat版本
### 2. 数据库准备
1. 创建数据库:
```sql
CREATE DATABASE servlet DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
```
2. 执行提供的SQL脚本导入初始数据(包含表结构和测试数据)
### 3. 数据库配置修改
修改`Servlet/src/com/util/DBUtil.java`中的数据库连接信息:
```java
// 原代码示例(需修改11-13行)
private static final String DRIVER = "com.mysql.jdbc.Driver";
private static final String URL = "jdbc:mysql://localhost:3306/servlet?useUnicode=true&characterEncoding=utf8";
private static final String USERNAME = "root";
private static final String PASSWORD = "yourpassword";
```
### 4. 部署与启动
1. 右键项目 → Run As → Run on Server
2. 选择已配置的Tomcat 8服务器
3. 访问测试地址:`http://localhost:8080/Servlet`
4. 使用默认账号登录:admin/123456
## 系统架构解析
### 分层架构设计
```
/Servlet
├── src/
│ ├── com/
│ │ ├── controller/ # Servlet控制层
│ │ ├── dao/ # 数据访问层
│ │ ├── model/ # JavaBean实体类
│ │ └── util/ # 工具类(DBUtil等)
├── WebContent/
│ ├── css/ # Bootstrap样式
│ ├── js/ # jQuery脚本
│ ├── WEB-INF/
│ │ ├── lib/ # 依赖的JAR包
│ │ └── web.xml # 部署描述符
│ └── jsp/ # 视图页面
```
### 核心实现技术
1. **MVC模式实现**:
- Model:JavaBean实体类
- View:JSP页面
- Controller:Servlet处理请求
2. **数据库操作**:
- 使用JDBC原生连接池
- 封装了基本的CRUD操作
3. **前端交互**:
- Bootstrap实现响应式布局
- jQuery处理AJAX请求和DOM操作
## 典型功能实现示例
### 药品查询功能实现
1. **Servlet处理层**:
```java
// MedicineServlet.java
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String keyword = request.getParameter("keyword");
List<Medicine> medicines = medicineDao.search(keyword);
request.setAttribute("medicines", medicines);
request.getRequestDispatcher("/jsp/medicine_list.jsp").forward(request, response);
}
```
2. **JSP视图层**:
```jsp
<!-- medicine_list.jsp -->
<table class="table table-bordered">
<tr>
<th>药品ID</th>
<th>药品名称</th>
<th>类别</th>
<th>价格</th>
</tr>
<c:forEach items="${medicines}" var="medicine">
<tr>
<td>${medicine.id}</td>
<td>${medicine.name}</td>
<td>${medicine.categoryName}</td>
<td>${medicine.price}</td>
</tr>
</c:forEach>
</table>
```
## 开发经验总结
### 传统Java Web项目的优缺点
**优点**:
- 技术栈简单直接,适合学习基础
- 无需学习构建工具,减少学习成本
- 部署配置过程清晰可见
**缺点**:
- 项目结构需要手动维护
- 依赖管理繁琐
- 现代化特性支持不足
### 常见问题解决方案
1. **中文乱码问题**:
- 数据库连接URL添加`useUnicode=true&characterEncoding=utf8`
- JSP页面设置`<%@ page contentType="text/html;charset=UTF-8" %>`
- 过滤器统一处理请求编码
2. **Session管理**:
- 实现登录拦截器检查session
- 设置合理的session超时时间
3. **分页实现**:
- 数据库层面使用LIMIT分页
- 前端显示分页导航栏
## 扩展建议
对于想进一步提升该系统的开发者,可以考虑:
1. 添加药品库存预警功能
2. 实现销售记录和统计报表
3. 集成条形码扫描功能
4. 添加权限管理系统(RBAC模型)
5. 使用连接池(如Druid)替代原生JDBC
## 结语
这个传统Java Web项目虽然技术栈略显陈旧,但其中蕴含的MVC设计思想、分层架构原则等基础知识,对于初学者理解Web应用开发本质具有重要价值。在掌握基础后,可以进一步学习Spring Boot等现代框架,实现更高效、更优雅的开发体验。








