1. 项目概述
高校评教系统是提升教学质量的重要工具,我最近完成了一个基于JSP技术栈的评教系统开发项目。这个系统实现了学生在线评教、教师查看反馈、管理员管理评价指标等功能,采用经典的MVC架构,前端使用JSP+HTML/CSS,后端基于Java Servlet,数据库选用MySQL。下面我将详细分享这个项目的技术实现细节和开发经验。
2. 系统架构设计
2.1 技术选型考量
选择JSP+Servlet这套传统但稳定的技术栈主要基于以下考虑:
- 高校IT环境通常较为保守,需要稳定可靠的技术方案
- JSP开发门槛低,适合高校信息中心的技术水平
- Servlet容器(Tomcat)部署简单,维护成本低
- 与学校现有系统(如教务系统)集成方便
2.2 数据库设计
系统核心表结构设计如下:
用户表(users)
CREATE TABLE users ( user_id VARCHAR(20) PRIMARY KEY, username VARCHAR(50) NOT NULL, password VARCHAR(100) NOT NULL, role ENUM('student','teacher','admin') NOT NULL, department VARCHAR(50) );课程表(courses)
CREATE TABLE courses ( course_id VARCHAR(20) PRIMARY KEY, course_name VARCHAR(100) NOT NULL, teacher_id VARCHAR(20) NOT NULL, semester VARCHAR(20) NOT NULL, FOREIGN KEY (teacher_id) REFERENCES users(user_id) );评价表(evaluations)
CREATE TABLE evaluations ( eval_id INT AUTO_INCREMENT PRIMARY KEY, student_id VARCHAR(20) NOT NULL, course_id VARCHAR(20) NOT NULL, score INT NOT NULL, comment TEXT, submit_time DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY (student_id) REFERENCES users(user_id), FOREIGN KEY (course_id) REFERENCES courses(course_id) );提示:数据库设计时特别注意了外键约束,确保数据完整性。同时为常用查询字段添加了索引。
3. 核心功能实现
3.1 用户认证模块
采用基于Session的传统认证方式,核心代码如下:
// LoginServlet.java protected void doPost(HttpServletRequest request, HttpServletResponse response) { String username = request.getParameter("username"); String password = request.getParameter("password"); UserDAO userDAO = new UserDAOImpl(); User user = userDAO.findByUsername(username); if(user != null && checkPassword(password, user.getPassword())) { HttpSession session = request.getSession(); session.setAttribute("currentUser", user); switch(user.getRole()) { case "student": response.sendRedirect("student/home.jsp"); break; case "teacher": response.sendRedirect("teacher/home.jsp"); break; case "admin": response.sendRedirect("admin/home.jsp"); break; } } else { request.setAttribute("error", "用户名或密码错误"); request.getRequestDispatcher("/login.jsp").forward(request, response); } }3.2 评教功能实现
学生评教页面采用动态生成的评价表单:
<!-- eval_form.jsp --> <form action="SubmitEvaluation" method="post"> <input type="hidden" name="courseId" value="${param.courseId}"> <c:forEach items="${evalItems}" var="item"> <div class="eval-item"> <h4>${item.content}</h4> <div class="rating"> <c:forEach begin="1" end="5" var="i"> <input type="radio" name="score_${item.id}" value="${i}" id="score_${item.id}_${i}"> <label for="score_${item.id}_${i}">${i}分</label> </c:forEach> </div> </div> </c:forEach> <div class="form-group"> <label>其他意见</label> <textarea name="comment" rows="3"></textarea> </div> <button type="submit">提交评价</button> </form>4. 系统部署与优化
4.1 部署环境配置
推荐部署环境:
- JDK 1.8+
- Tomcat 8.5+
- MySQL 5.7+
Tomcat连接池配置(conf/context.xml):
<Resource name="jdbc/EvaluationDB" auth="Container" type="javax.sql.DataSource" maxTotal="100" maxIdle="30" maxWaitMillis="10000" username="eval_user" password="password123" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3306/evaluation_db?useSSL=false"/>4.2 性能优化措施
- JSP预编译:在部署时预编译JSP,减少首次访问延迟
- 静态资源缓存:配置Tomcat的ExpiresFilter缓存CSS/JS/图片
- 数据库连接池:使用Tomcat JDBC连接池替代传统连接方式
- 页面静态化:将不常变动的页面(如帮助文档)生成静态HTML
5. 开发经验与避坑指南
5.1 常见问题解决
问题1:中文乱码解决方案:
- 所有JSP页面添加:
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8"%>- 在Servlet中添加:
request.setCharacterEncoding("UTF-8"); response.setContentType("text/html;charset=UTF-8");- 数据库连接字符串添加参数:
jdbc:mysql://...?useUnicode=true&characterEncoding=UTF-8问题2:表单重复提交解决方案:
- 使用Post/Redirect/Get模式
- 生成唯一token:
String token = UUID.randomUUID().toString(); session.setAttribute("formToken", token); request.setAttribute("token", token);在表单中添加隐藏字段:
<input type="hidden" name="token" value="${token}">5.2 安全注意事项
SQL注入防护:
- 使用PreparedStatement
- 避免直接拼接SQL
- 使用MyBatis等ORM框架
XSS防护:
- 使用JSTL的c:out标签输出内容
- 或者使用ESAPI进行编码:
<%@ taglib prefix="esapi" uri="http://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API" %> <esapi:encodeForHTML>${userInput}</esapi:encodeForHTML>- 会话安全:
- 设置HttpOnly和Secure的Cookie
- 会话超时设置(web.xml):
<session-config> <session-timeout>30</session-timeout> <cookie-config> <http-only>true</http-only> <secure>true</secure> </cookie-config> </session-config>6. 系统扩展与改进方向
移动端适配:
- 采用响应式设计
- 开发微信小程序版本
数据分析增强:
- 集成数据可视化库(ECharts)
- 增加教师教学能力雷达图分析
系统集成:
- 与教务系统对接课程数据
- 支持统一身份认证
性能监控:
- 集成Prometheus监控
- 增加慢查询日志分析
在实际开发过程中,我发现JSP虽然是比较传统的技术,但在高校这类对稳定性要求高、技术更新慢的场景中仍然是非常合适的选择。通过合理的架构设计和优化,完全可以构建出高性能、易维护的Web应用系统。