零基础JavaWeb开发 用JSP+Servlet+MySQL实现简易在线投票系统

技术选型说明

JSP负责前端页面渲染,Servlet处理业务逻辑,MySQL存储投票数据。该组合适合初学者理解JavaWeb基础架构(MVC模式)。


环境准备

  1. 开发工具:Eclipse/IntelliJ IDEA + Tomcat 9+
  2. 数据库:MySQL 5.7+,安装后创建数据库vote_system
  3. 依赖库: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>


关键注意点

  1. 中文乱码:在Servlet中添加request.setCharacterEncoding("UTF-8")
  2. 线程安全:使用JDBC的PreparedStatement防止SQL注入
  3. 数据验证:前端JS和后端Servlet均需检查投票选项是否为空

扩展建议

  1. 增加用户IP限制防止刷票
  2. 使用连接池(如HikariCP)优化数据库连接
  3. 添加饼图可视化(可引入ECharts)

通过以上步骤可实现基础投票系统,完整项目建议采用DAO模式分层管理代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值