使用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. ↩︎
相关推荐
好吃的肘子25 分钟前
ElasticSearch入门详解
java·大数据·elasticsearch·搜索引擎·云原生
工业互联网专业41 分钟前
基于springboot+vue的房屋租赁管理系统
java·vue.js·spring boot·毕业设计·源码·课程设计·房屋租赁管理系统
阿乾之铭42 分钟前
Spring Boot 中的重试机制
java·spring boot·后端
D_aniel_1 小时前
排序算法-堆排序
java·排序算法·堆排序
哞哞不熬夜2 小时前
JavaEE--文件操作和IO
java·开发语言·windows·学习·java-ee·intellij-idea·idea
LUCIAZZZ2 小时前
JVM之内存管理(二)
java·jvm·后端·spring·操作系统·springboot
向哆哆2 小时前
Hibernate 性能优化:告别慢查询,提升数据库访问性能
java·数据库·性能优化·hibernate
小雅痞2 小时前
[Java][Leetcode middle] 80. 删除有序数组中的重复项 II
java·python·leetcode
小吕学编程2 小时前
Redis从基础到高阶应用:核心命令解析与延迟队列、事务消息实战设计
java·数据结构·redis
爱吃烤鸡翅的酸菜鱼2 小时前
Java【网络原理】(5)深入浅出HTTPS:状态码与SSL/TLS加密全解析
java·网络·后端·网络协议·http·https·ssl