
技术选型说明
JSP负责前端页面渲染,Servlet处理业务逻辑,MySQL存储投票数据。该组合适合初学者理解JavaWeb基础架构(MVC模式)。
环境准备
- 开发工具:Eclipse/IntelliJ IDEA + Tomcat 9+
- 数据库:MySQL 5.7+,安装后创建数据库
vote_system - 依赖库:MySQL Connector/J(JDBC驱动)
数据库设计
执行以下SQL创建表结构:
CREATE TABLE `vote_item` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(100) NOT NULL,
`count` int(11) DEFAULT 0,
PRIMARY KEY (`id`)
);
INSERT INTO `vote_item` VALUES
(1, '选项A', 0),
(2, '选项B', 0),
(3, '选项C', 0);
核心代码实现
JSP页面(vote.jsp)
<%@ page import="java.util.List, com.example.VoteItem" %>
<% List<VoteItem> items = (List<VoteItem>)request.getAttribute("items"); %>
<form action="VoteServlet" method="post">
<% for(VoteItem item : items) { %>
<input type="radio" name="vote" value="<%= item.getId() %>">
<%= item.getTitle() %><br>
<% } %>
<button type="submit">投票</button>
</form>
Servlet(VoteServlet.java)
@WebServlet("/VoteServlet")
public class VoteServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
int itemId = Integer.parseInt(request.getParameter("vote"));
try (Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/vote_system", "root", "password")) {
String sql = "UPDATE vote_item SET count = count + 1 WHERE id = ?";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, itemId);
pstmt.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
response.sendRedirect("result.jsp");
}
}
结果页(result.jsp)
<%@ page import="java.util.List, com.example.VoteDAO" %>
<% List<VoteItem> items = new VoteDAO().getAllItems(); %>
<table border="1">
<tr><th>选项</th><th>票数</th></tr>
<% for(VoteItem item : items) { %>
<tr>
<td><%= item.getTitle() %></td>
<td><%= item.getCount() %></td>
</tr>
<% } %>
</table>
关键注意点
- 中文乱码:在Servlet中添加
request.setCharacterEncoding("UTF-8") - 线程安全:使用JDBC的PreparedStatement防止SQL注入
- 数据验证:前端JS和后端Servlet均需检查投票选项是否为空
扩展建议
- 增加用户IP限制防止刷票
- 使用连接池(如HikariCP)优化数据库连接
- 添加饼图可视化(可引入ECharts)
通过以上步骤可实现基础投票系统,完整项目建议采用DAO模式分层管理代码。

被折叠的 条评论
为什么被折叠?



