当前位置: 首页 > news >正文

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应用。

http://www.gsyq.cn/news/1646503.html

相关文章:

  • Spring Boot+Vue课程作业管理系统毕业设计实战指南
  • 从Harness Engineering到Hermes Agent:构建可靠、可进化AI智能体的工程实践
  • 企业微信第三方应用扫码登录 3 步实战:Spring Boot 后端 + 域名配置避坑
  • 锂离子电池过压保护与STM32L031C6系统设计
  • Hadoop Web控制台安全加固实战:绕过官方Simple认证,实现Nginx反向代理密码验证
  • 设计系统 Token 工程化:从定义到 CI 校验的完整链路
  • MetaMask 13.37.0 安全配置进阶:5项关键设置防范钓鱼与资产丢失
  • TongWeb 7.0 连接池配置优化:10个关键参数详解与性能压测对比
  • Windows 11/10系统AutoCAD 2025安装部署与优化全指南
  • MetaMask 13.37.0 安全配置进阶:3项关键设置与5类常见钓鱼攻击防范
  • OpenAI Codex CLI 十大必装技能:从代码补全到智能开发工作流
  • ChatGPT API成本优化实战:从计费原理到架构级省钱策略
  • Contrastive Clustering 代码复现:PyTorch 实现 AAAI 2021 论文,CIFAR-10 精度提升 39%
  • 淘宝开放平台奇门接口 Java 验签实战:Spring Boot 接收 XML 请求与 3 种签名算法解析
  • WMIC命令替代方案:PowerShell 7与CIM/WMI查询获取设备信息的3种新方法
  • JVM 内存参数 -Xms 与 -Xmx 同值实战:Spring Boot 应用启动时间优化 30%
  • 大气层系统完整指南:从零开始掌握Switch终极破解方案
  • Node.js + Express 搭建 CORS 跨域服务:5分钟配置 3个关键响应头
  • VMware安装CentOS 7完整指南:从零搭建Linux开发环境
  • 如何在老旧安卓电视上免费观看高清直播:MyTV-Android开源应用完全指南
  • 微信小程序Canvas图表库的5大突破性特性:从技术实现到商业应用的全方位解析
  • Linux C++网络编程实战:从零构建多线程日志服务器
  • 数据库自治运维展望:从 AI 辅助诊断到全自动故障自愈的技术路线
  • ai电扇模特图效果如何?主流AI换模特工具全解析
  • 大气层Atmosphere终极指南:从源码编译到高级定制的完整技术方案
  • SpringBoot+MySQL物资管理系统实战:从环境搭建到功能验证
  • Java+Vue+Spring Boot课程作业管理系统毕业设计实战指南
  • 01.05.01.DeepSeek:环境搭建篇(检索增强生成工具AnythingLLM: 安装配置)
  • Prompt 模板版本治理:别让线上效果被一句文案改崩
  • Java+Vue+Spring Boot+MySQL课程作业管理系统:从环境搭建到二次开发的毕业设计实战