使用Struts2遇到的Context[项目名称]启动失败问题解决(Java Web学习笔记)

server/2025/1/12 12:38:40/

1 引言

读的书中12.1小节的《下载和安装Struts 2 框架》时,按照书中的方法,手工创建一个Web项目,却启动失败。下面完整复原该问题产生过程。

所用环境为:

名称版本
Tomcat8.5.78
Java1.8
Struts2.3.16

在webapps下创建一个目录teststruts,其目录结构如下:

teststruts/
│
├── WEB-INF/
│   ├── lib/
│   └── web.xml
│
├── loginForm.jsp

根据书中的步骤,将struts2-core-2.3.16.3.jarxwork-core-2.3.16.3.jar两个jar包放到lib文件夹中;然后写web.xml和loginForm.jsp为如下内容:
web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"><filter><filter-name>struts2Filter</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2Filter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
</web-app>

loginForm.jsp:

<%@ page language="java" pageEncoding="UTF-8" errorPage="" %>
<!DOCTYPE html>
<html>
<head><title>登陆页面</title>
</head>
<body><form action="login" method="post"><table><caption><h3>用户登录</h3></caption><tr><td>用户名:<input type="text" name="username"/></td></tr><tr><td>&nbsp;&nbsp;码:<input type="text" name="password"/></td></tr><tr align="center"><td colspan="2"><input type="submit" value="登录"/><input type="reset" value="重填" /></td></tr></table></form>
</body>
</html>

上面项目完成,接着启动Tomcat服务器,在浏览器中输入网址http://localhost:8080/teststruts/loginForm.jsp,发现不能访问,提示说“没有公开该资源”。我感到毫无道理。查看Tomcat的启动日志,发现Context[teststruts]启动失败,如下提示:

11-Jan-2025 23:11:53.201 信息 [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployDirectory 把web 应用 程序部署到目录 [F:\Compiler_IDE\apache-tomcat-8.5.78\webapps\teststruts]
11-Jan-2025 23:11:54.616 信息 [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars 至少有一个JAR被扫描 用于TLD但尚未包含TLD。 为此记录器启用调试日志记录,以获取已扫描但未在其中找到TLD的完整JAR列表。 在扫描期间跳过不需要的JAR可以缩短启动时间和JSP编译时间。
11-Jan-2025 23:11:55.070 严重 [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal 一个或多个 筛选器启动失败。完整的详细信息将在相应的容器日志文件中找到
11-Jan-2025 23:11:55.601 严重 [localhost-startStop-1] org.apache.catalina.core.StandardContext.startInternal 由于之前的 错误,Context[/teststruts]启动失败

2 问题解决

最近,迷恋上了技术。我感觉书上有我理解不清楚的地方。根据启动日志,我推测在lib包中包含的jar不完整。于是,在网上搜索"struts2 2.3.16.3.jar配合使用的jar",发现果真不完整。于是,在lib文件夹中填充完整如下:
在这里插入图片描述
然后,重启Tomcat后,访问成功,如下截图:
在这里插入图片描述

3 总结

虽然使用的Struts版本相对较老,却仍然能运行。

读相对老的书的时候,一定要亲自运行,才能有所收获。正像书中作者所说的那样:

如果你只是想“读”本书,不想动“手”实践,那么建议不要阅读本书。

对上述观点,我非常赞同!记录如上,是为笔记。


  1. 李刚. Struts 2.x 权威指南. 第3版. 北京: 电子工业出版社, 2012.10: 16-18. ↩︎


http://www.ppmy.cn/server/157764.html

相关文章

ARM64 Linux PCIe 枚举与硬件 GPIO 时序图分析

在嵌入式系统中&#xff0c;PCIe&#xff08;Peripheral Component Interconnect Express&#xff09; 总线作为高速数据传输接口被广泛应用于各种设备的连接。随着 ARM64 架构的普及&#xff0c;越来越多的嵌入式系统、开发板和服务器开始采用 ARM64 架构来支持 PCIe 总线。在…

javascript-----转义单引号转义双引号

在 JavaScript 中&#xff0c;反斜杠&#xff08;\&#xff09;是一个转义字符&#xff0c;用于对特殊字符进行转义。在你提到的 \ 和 \" 中&#xff0c;它们的主要作用如下&#xff1a; \&#xff1a;用于转义单引号。在字符串中&#xff0c;如果你想包含一个单引号字符而…

力扣经典题目之2283. 判断一个数的数字计数是否等于数位的值

今天继续给大家分享一道力扣的做题心得今天这道题目是 题目链接&#xff1a; 2283. 判断一个数的数字计数是否等于数位的值 题目如下&#xff1a; 给你一个下标从 0 开始长度为 n 的字符串 num &#xff0c;它只包含数字。 如果对于 每个 0 < i < n 的下标 i &#…

单片机(MCU)-简单认识

简介&#xff1a; 内部集成了CPU&#xff0c;RAM&#xff0c;ROM&#xff0c;定时器&#xff0c;中断系统&#xff0c;通讯接口等一系列电脑的常用硬件功能。 单片机的任务是信息采集&#xff08;依靠传感器&#xff09;&#xff0c;处理&#xff08;依靠CPU&#xff09;&…

USRP X310 Windows 烧录镜像

说明 USRP-X 系列设备包含两个用于两个以太网通道的 SFP 端口。由于 SFP 端口支持 1 千兆 (SFP) 和 10 千兆 (SFP) 收发器&#xff0c;因此 UHD 附带了多个 FPGA 图像&#xff0c;以确定上述接口的行为。 注意&#xff1a;Aurora 图像需要从 FPGA 源代码手动构建。 FPGA 图像…

关于ReLU激活函数的解释以及其在神经网络中的应用

ReLU&#xff08;Rectified Linear Unit&#xff0c;修正线性单元&#xff09;是一种常用的激活函数&#xff0c;广泛应用于神经网络中&#xff0c;特别是深度学习中。它的定义非常简单且直观。ReLU的公式如下&#xff1a; f(x)max⁡(0,x)f(x) \max(0, x) 这意味着&#xff…

Cocos二维Slider

1、可拖动区域计算 根据UI的世界坐标了宽高信息计算出handle的坐标范围 this.posMin new Vec2(this.node.worldPosition.x - this.uiSelf.contentSize.width * 0.5, this.node.worldPosition.y - this.uiSelf.contentSize.height * 0.5); this.posMax new Vec2(this.node.w…

TrustRAG:增强RAG系统鲁棒性与可信度的创新框架

在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;LLMs&#xff09;凭借其强大的语言处理能力在诸多领域大放异彩。检索增强生成&#xff08;RAG&#xff09;系统&#xff08;面向企业RAG&#xff08;Retrieval Augmented Generation&#xff09;系统的多维检索框架…