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

1 引言

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

所用环境为:

名称 版本
Tomcat 8.5.78
Java 1.8
Struts 2.3.16

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

powershell 复制代码
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 复制代码
<?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:

html 复制代码
<%@ 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. ↩︎
相关推荐
wcy_10111 分钟前
七大软件设计原则
java·设计规范
invicinble3 分钟前
jar包在执行的时候需要关注的细节(提供一个解构jvm问题的视角)
java·jvm·jar
麦芽糖02195 分钟前
SSE介绍及使用(Server-Send Events)
java
alan07219 分钟前
【Java + Elasticsearch全量 & 增量同步实战】
java·elasticsearch·jenkins
hashiqimiya22 分钟前
后端springboot的接收前端发来的数据反序列化原理
java
cat三三1 小时前
java之异常
java·开发语言
浙江第二深情1 小时前
前端性能优化终极指南
java·maven
养乐多07221 小时前
【Java】IO流
java
俊男无期1 小时前
超效率工作法
java·前端·数据库
中国胖子风清扬1 小时前
SpringAI和 Langchain4j等 AI 框架之间的差异和开发经验
java·数据库·人工智能·spring boot·spring cloud·ai·langchain