Servlet 3.0 与 JSP 2.3 实战:5分钟构建一个带登录验证的简易留言板

Servlet 3.0 与 JSP 2.3 实战:5分钟构建一个带登录验证的简易留言板

在JavaWeb开发中,Servlet和JSP是最基础也最核心的技术组合。本文将带你快速实现一个功能完整的留言板系统,涵盖用户登录、留言发布和列表展示三大核心功能模块。通过这个实战项目,你不仅能掌握Servlet的生命周期、请求处理流程,还能深入理解JSP与EL表达式的配合使用。

1. 项目环境准备

首先确保你的开发环境已配置以下组件:

  • JDK 1.8+:Java开发基础环境
  • Tomcat 9+:Servlet容器
  • Maven:项目管理工具(推荐)
  • IDE:Eclipse/IntelliJ IDEA

创建Maven项目时,需在pom.xml中添加Servlet和JSP依赖:

<dependencies> <!-- Servlet API --> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> <scope>provided</scope> </dependency> <!-- JSP API --> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>2.3.3</version> <scope>provided</scope> </dependency> <!-- JSTL --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> </dependencies>

2. 用户登录模块实现

用户认证是Web应用的基础安全机制。我们使用Session来保持登录状态:

@WebServlet("/login") public class LoginServlet extends HttpServlet { // 模拟用户数据库 private static final Map<String, String> USER_DB = Map.of( "admin", "123456", "user", "password" ); protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String username = req.getParameter("username"); String password = req.getParameter("password"); if(USER_DB.containsKey(username) && USER_DB.get(username).equals(password)) { // 登录成功,创建Session HttpSession session = req.getSession(); session.setAttribute("user", username); resp.sendRedirect("message.jsp"); } else { req.setAttribute("error", "用户名或密码错误"); req.getRequestDispatcher("login.jsp").forward(req, resp); } } }

对应的login.jsp页面关键代码:

<form action="login" method="post"> <input type="text" name="username" placeholder="用户名" required> <input type="password" name="password" placeholder="密码" required> <button type="submit">登录</button> <span style="color:red">${error}</span> </form>

3. 留言功能实现

留言功能涉及表单提交和数据处理,我们创建一个MessageServlet:

@WebServlet("/message") public class MessageServlet extends HttpServlet { // 使用List模拟数据存储 private static final List<Message> messages = new CopyOnWriteArrayList<>(); protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setAttribute("messages", messages); req.getRequestDispatcher("message.jsp").forward(req, resp); } protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { HttpSession session = req.getSession(false); if(session == null || session.getAttribute("user") == null) { resp.sendRedirect("login.jsp"); return; } String content = req.getParameter("content"); String user = (String) session.getAttribute("user"); messages.add(new Message(user, content, new Date())); resp.sendRedirect("message"); } // 简单的消息实体类 public static class Message { private final String author; private final String content; private final Date createTime; // 构造方法和getter省略... } }

在message.jsp中展示留言列表:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!-- 留言表单 --> <form action="message" method="post"> <textarea name="content" required></textarea> <button type="submit">发布留言</button> </form> <!-- 留言列表 --> <ul> <c:forEach items="${messages}" var="msg"> <li> <strong>${msg.author}</strong> - <span>${msg.createTime}</span> <p>${msg.content}</p> </li> </c:forEach> </ul>

4. 会话管理与安全控制

为确保只有登录用户才能发布留言,我们实现一个过滤器:

@WebFilter("/*") public class AuthFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; String path = request.getRequestURI().substring(request.getContextPath().length()); // 放行登录相关资源和静态资源 if(path.startsWith("/login") || path.contains(".css") || path.contains(".js")) { chain.doFilter(request, response); return; } HttpSession session = request.getSession(false); if(session == null || session.getAttribute("user") == null) { response.sendRedirect(request.getContextPath() + "/login.jsp"); return; } chain.doFilter(request, response); } }

5. 项目部署与测试

将项目打包为WAR文件部署到Tomcat:

  1. 使用Maven打包:mvn clean package
  2. 将生成的target/*.war文件复制到Tomcat的webapps目录
  3. 启动Tomcat服务器
  4. 访问:http://localhost:8080/your-project-name/login.jsp

测试流程:

  1. 使用admin/123456或user/password登录
  2. 在留言页面发布新留言
  3. 刷新页面查看留言列表
  4. 尝试直接访问message.jsp验证过滤器是否生效

这个简易留言板虽然功能简单,但完整实现了JavaWeb开发的核心技术栈。你可以在此基础上扩展用户注册、留言分页、内容过滤等功能,逐步完善成为一个完整的Web应用。