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.jar
和xwork-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>密 码:<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版本相对较老,却仍然能运行。
读相对老的书的时候,一定要亲自运行,才能有所收获。正像书中作者所说的那样:
如果你只是想"读"本书,不想动"手"实践,那么建议不要阅读本书。
对上述观点,我非常赞同!记录如上,是为笔记。
- 李刚. Struts 2.x 权威指南. 第3版. 北京: 电子工业出版社, 2012.10: 16-18. ↩︎