使用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. ↩︎
相关推荐
fanged3 小时前
构建系统maven
java·maven
沙滩小岛小木屋3 小时前
maven编译时跳过test过程
java·maven
江沉晚呤时4 小时前
SQL Server 事务详解:概念、特性、隔离级别与实践
java·数据库·oracle·c#·.netcore
还是鼠鼠4 小时前
单元测试-概述&入门
java·开发语言·后端·单元测试·log4j·maven
MyikJ6 小时前
Java求职面试:从Spring到微服务的技术挑战
java·数据库·spring boot·spring cloud·微服务·orm·面试技巧
MyikJ6 小时前
Java 面试实录:从Spring到微服务的技术探讨
java·spring boot·微服务·kafka·spring security·grafana·prometheus
ShiinaMashirol7 小时前
代码随想录打卡|Day50 图论(拓扑排序精讲 、dijkstra(朴素版)精讲 )
java·图论
cui_hao_nan7 小时前
Nacos实战——动态 IP 黑名单过滤
java
惜.己7 小时前
MySql(十一)
java·javascript·数据库
10000hours8 小时前
【存储基础】NUMA架构
java·开发语言·架构