当前位置: 首页 > 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 应用奠定了基础。

http://www.xdnf.cn/news/262963.html

相关文章:

  • 【Linux】驱动开发方法
  • ES6/ES11知识点 续一
  • 人工智能发展史 — 物理学诺奖之 Hopfield 联想和记忆神经网络模型
  • 19:常见的Halcon数据格式
  • 优化01-统计信息
  • 深入解析 SqlSugar 与泛型封装:实现通用数据访问层
  • 图论之幻想迷宫
  • 使用Rust + WebAssembly提升前端渲染性能:从原理到落地
  • 网络安全:sql注入练习靶场——sqli_labs安装保姆级教程
  • 【tcp连接windows redis】
  • c++_2011 NOIP 普及组 (1)
  • Python Django基于小波变换的数字水印技术实现系统【附源码、文档说明】
  • (37)VTK C++开发示例 ---纹理地球
  • 多协议 Tracker 系统架构与传感融合实战 第五章 卡尔曼滤波定位算法实战
  • Linux《进程概念(下)》
  • 【Linux】Petalinux驱动开发基础
  • 物联网智能项目之——智能家居项目的实现!
  • 基于PyTorch的食物图像分类实战:从数据处理到模型训练
  • AAA GitOps详解
  • n8n工作流自动化平台的实操:本地化高级部署
  • 浙大:优化视觉模型的过度思考
  • 【Godot】生命周期详解:从节点诞生到销毁的全流程解析
  • 软件工程实践
  • sonar-scanner在扫描JAVA项目时为什么需要感知.class文件
  • Redis持久化:
  • 栈系列一>基本计算器II
  • 数据库介绍以及windows下mysql安装
  • day 11 超参数调整
  • react18基础速成
  • AIGC时代——语义化AI驱动器:提示词的未来图景与技术深潜