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

基于 JSP 和 Servlet 的数字信息分析小应用

Java Web 实验:基于 JSP 和 Servlet 的数字信息分析小应用

一、实验目的

实现一个简单的 Java Web 应用,通过 JSP 表单收集用户输入的文本信息,提交至 Servlet 分析其中是否包含数字,并返回结果。掌握 JSP 与 Servlet 的协同工作、Web 项目部署及常见问题排查。

二、实验环境

  • 开发工具:Eclipse 2025-3
  • 服务器:Tomcat 9
  • JDK:Java 8(JDK 1.8)
  • 技术栈:JSP、Servlet、HTML/CSS

三、实现步骤

1. 项目结构

webapp/
├─ index.jsp            # 表单页面
├─ result.jsp           # 结果展示页面
├─ styles.css           # 样式文件
└─ WEB-INF/├─ web.xml          # 部署描述文件└─ classes/         # 编译后的 Servlet 类(自动生成)

在这里插入图片描述

2. JSP 表单页面(index.jsp

设计一个包含文本输入框和提交按钮的表单,提交至 Servlet:

<form action="NumberAnalyzed" method="post"><label>请输入文本信息:</label><input type="text" name="inputText" required><button type="submit">提交</button>
</form>

在这里插入图片描述

3. Servlet 处理逻辑(NumberAnalyzed.java

接收表单数据,遍历字符判断是否包含数字,通过 request 对象传递结果至 JSP:

@WebServlet("/NumberAnalyzed")
public class NumberAnalyzed extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String input = request.getParameter("inputText");StringBuilder numbers = new StringBuilder();for (char c : input.toCharArray()) {if (Character.isDigit(c)) {numbers.append(c).append(" ");}}request.setAttribute("numbers", numbers.toString());request.setAttribute("hasNumber", numbers.length() > 0);request.getRequestDispatcher("result.jsp").forward(request, response);}
}

4. 结果展示页面(result.jsp

request 中获取数据,根据结果显示不同提示信息:

<% if (Boolean.TRUE.equals(request.getAttribute("hasNumber"))) { %><p class="success">包含的数字:<%= request.getAttribute("numbers") %></p>
<% } else { %><p class="error">未检测到数字</p>
<% } %>

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

5. 样式文件(styles.css

使用 CSS 美化页面,包括表单布局、响应式设计和动画效果:

/* 全局变量定义 */
:root {--primary-color: #007BFF;--secondary-color: #6c757d;--success-color: #28a745;--error-color: #dc3545;--background-color: #f4f4f9;--text-color: #333;--card-background: #ffffff;--box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);--animation-duration: 0.5s;
}/* 全局样式 */
body {font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;background-color: var(--background-color);display: flex;justify-content: center;align-items: center;height: 100vh;margin: 0;
}/* 表单容器样式 */
.form-container {background-color: var(--card-background);padding: 2rem;border-radius: 8px;box-shadow: var(--box-shadow);width: 300px;
}/* 表单标题样式 */
.form-title {font-size: 1.5rem;font-weight: 600;text-align: center;margin-bottom: 1.5rem;color: var(--text-color);
}/* 表单标签样式 */
.form-label {display: block;font-size: 0.9rem;margin-bottom: 0.5rem;color: #0f0f0f;
}/* 表单输入框样式 */
.form-input {width: 100%;padding: 0.75rem;margin-bottom: 1rem;border: 1px solid #ccc;border-radius: 4px;box-sizing: border-box;
}/* 表单按钮样式 */
.form-button {width: 100%;padding: 0.75rem;background-color: var(--primary-color);color: white;border: none;border-radius: 4px;cursor: pointer;transition: background-color var(--animation-duration) ease;
}.form-button:hover {background-color: #0056b3;
}

6. web.xml 配置

WEB-INF/web.xml 中配置 Servlet 映射(若未使用注解):

<servlet><servlet-name>NumberAnalyzed</servlet-name><servlet-class>NumberAnalyzed</servlet-class>
</servlet>
<servlet-mapping><servlet-name>NumberAnalyzed</servlet-name><url-pattern>/NumberAnalyzed</url-pattern>
</servlet-mapping>

也可以在下图所示的图形化界面进行配置
在这里插入图片描述

四、遇到的问题及解决方法

1. Servlet 映射失败

  • 问题:访问 Servlet 时提示“404 Not Found”。
  • 原因web.xml 配置错误或 Servlet 类路径不正确。
  • 解决
    • 使用 Eclipse 图形化编辑器配置 Servlet:在 web.xml 的 “Servlets” 标签页中添加 Servlet 名称和类全限定名(若有包名,需包含包路径)。
    • 确保 @WebServlet 注解路径与 web.xml 中的 <url-pattern> 一致,避免配置冲突。

2. 类版本不兼容异常

  • 问题:部署后服务器报错 UnsupportedClassVersionError,提示类文件版本为 61.0(Java 17),但服务器仅支持 52.0(Java 8)。报错信息如下

类型 异常报告

消息 实例化Servlet类[NumberAnalyzed]异常

描述 服务器遇到一个意外的情况,阻止它完成请求。

例外情况

javax.servlet.ServletException: 实例化Servlet类[NumberAnalyzed]异常
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:660)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:396)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
org.apache.coyote.AbstractProtocol C o n n e c t i o n H a n d l e r . p r o c e s s ( A b s t r a c t P r o t o c o l . j a v a : 937 ) o r g . a p a c h e . t o m c a t . u t i l . n e t . N i o E n d p o i n t ConnectionHandler.process(AbstractProtocol.java:937) org.apache.tomcat.util.net.NioEndpoint ConnectionHandler.process(AbstractProtocol.java:937)org.apache.tomcat.util.net.NioEndpointSocketProcessor.doRun(NioEndpoint.java:1793)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)
org.apache.tomcat.util.threads.ThreadPoolExecutor W o r k e r . r u n ( T h r e a d P o o l E x e c u t o r . j a v a : 659 ) o r g . a p a c h e . t o m c a t . u t i l . t h r e a d s . T a s k T h r e a d Worker.run(ThreadPoolExecutor.java:659) org.apache.tomcat.util.threads.TaskThread Worker.run(ThreadPoolExecutor.java:659)org.apache.tomcat.util.threads.TaskThreadWrappingRunnable.run(TaskThread.java:63)
java.lang.Thread.run(Thread.java:748) 根本原因。

java.lang.UnsupportedClassVersionError: NumberAnalyzed has been
compiled by a more recent version of the Java Runtime (class file
version 61.0), this version of the Java Runtime only recognizes class
file versions up to 52.0 (无法载入的类 [NumberAnalyzed])
org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2347)
org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2212)
org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:823)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1314)
org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1162)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:660)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346)
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:396)
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
org.apache.coyote.AbstractProtocol C o n n e c t i o n H a n d l e r . p r o c e s s ( A b s t r a c t P r o t o c o l . j a v a : 937 ) o r g . a p a c h e . t o m c a t . u t i l . n e t . N i o E n d p o i n t ConnectionHandler.process(AbstractProtocol.java:937) org.apache.tomcat.util.net.NioEndpoint ConnectionHandler.process(AbstractProtocol.java:937)org.apache.tomcat.util.net.NioEndpointSocketProcessor.doRun(NioEndpoint.java:1793)
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190)
org.apache.tomcat.util.threads.ThreadPoolExecutor W o r k e r . r u n ( T h r e a d P o o l E x e c u t o r . j a v a : 659 ) o r g . a p a c h e . t o m c a t . u t i l . t h r e a d s . T a s k T h r e a d Worker.run(ThreadPoolExecutor.java:659) org.apache.tomcat.util.threads.TaskThread Worker.run(ThreadPoolExecutor.java:659)org.apache.tomcat.util.threads.TaskThreadWrappingRunnable.run(TaskThread.java:63)
java.lang.Thread.run(Thread.java:748) ):注意 主要问题的全部 stack 信息可以在 server
logs 里查看

  • 原因:Eclipse 编译器默认使用高版本 JDK 编译,而 Tomcat 配置的 JRE 为 Java 8。
  • 解决
    1. 配置 Eclipse 编译器
      • 进入 Window > Preferences > Java > Compiler,将 Compiler compliance level 设置为 1.8
    2. 指定 Tomcat JRE
      • Servers 视图中右键 Tomcat 服务器,选择 Properties > Java,指定 Java 8 JRE。

4. web.xml 图形化编辑器使用不习惯

  • 问题:Eclipse 默认打开 web.xml 的图形化编辑器,手动编辑代码不便。
  • 解决:右键 web.xml 文件,选择 Open With > Text Editor,直接编写 XML 代码,确保标签闭合和命名空间正确。
    在这里插入图片描述

五、实验总结

1. 核心收获

  • MVC 模式应用:JSP 负责视图(View),Servlet 处理逻辑(Controller),实现了业务逻辑与页面展示分离。
  • 环境配置关键:JDK 版本一致性至关重要,需确保 Eclipse 编译器、Tomcat 服务器和项目构建路径均使用同一版本(如 Java 8)。
  • 异常排查方法:通过服务器日志(如 Tomcat 的 catalina.log)定位错误,结合类文件版本对照表(如 Java 8 对应类版本 52.0)解决兼容性问题。

2. 改进方向

  • 使用 Maven 管理依赖和构建项目,避免手动配置 web.xml 和类路径。
  • 引入 Filter 处理字符编码,确保中文输入正确解析。
  • 优化 Servlet 代码,将数字分析逻辑封装为工具类,提高可复用性。

通过本次实验,深入理解了 Java Web 开发中 JSP 与 Servlet 的协同机制,掌握了环境配置、异常处理和 Web 项目部署的核心技能,为后续开发复杂 Web 应用奠定了基础。

相关文章:

  • 算法笔记。质数筛算法
  • 琴生不等式 (Jensen‘s Inequality)
  • 【quantity】7 角度单位模块(angle.rs)
  • 论系统安全架构设计及其应用
  • Vibe Coding 新时代:AI 辅助编程完全指南
  • 从融智学视域快速回顾世界历史和主要语言文字最初历史证据(列表对照分析比较)
  • JavaScript中的AES加密与解密:原理、代码与实战
  • 一篇文章看懂web服务
  • C与指针4——指针
  • 04 基于 STM32 的时钟展示程序
  • js单调栈解题模板
  • [UVM]UVM中reg_map的作用及多个rem_map的使用案例
  • QNAP Duplicati 备份 123云盘
  • Learning vtkjs之Cutter
  • Spring AI 实战:第一章、Spring AI入门之DeepSeek调用
  • 深入解析高并发场景下分布式缓存优化实战:从原理到性能提升
  • MIT6.S081-lab8
  • 创建第一个简单cesium程序
  • Vscode+git笔记
  • 什么是 Redis?
  • 10家A股农商行一季报:净利均实现增长,常熟银行营收、净利增速领跑
  • 青海大学常务副校长(正厅级)任延明已任省卫健委党组书记
  • 产假工资是谁出?女职工生育能领多少生育津贴?解答来了
  • 长三角议事厅| AI作曲时代:长三角如何奏响数字音乐乐章
  • 铁路12306回应“五一前大量放票”传闻:个别方向和区段出现新增票额,均即时进入系统重新发售
  • 新华时评:需要“重新平衡”的是美国心态