关于tomcat报错404的问题(能看到猫,但是访问不到自己的工程页面)

初学者在使用Eclipse和Tomcat 7.0开发J2EE web应用时可能遇到404错误。问题通常出现在修改工程后未重新部署或serve.xml配置不正确。解决方法包括重新部署工程和检查serve.xml中的Context配置。理解Tomcat目录结构和文件作用有助于解决此类问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对于初学J2EE,做一些简单的web应用的时候,关于404的错误,估计遇到的人真的不在少数,我也是其中之一。在这里,我主要讲一下我遇到的具体情况,跟大家分享一下,希望对大家有帮助。
关于环境:
Eclipse Indigo Service Release 2
tomcat 插件自行下载7.0

问题描述:
在浏览器中输入:http://localhost:8080/能看到tomcat的主页,但是进入到工程http://localhost:8080/demo/demo.html中却看不到对应的网页。
报错404.

首先常出现的一种情况是:对工程进行修改之后没有重新发布,而是直接重启tomcat,这种做法并未对tomcat的webapp文件夹中对应的工程进行修改,因此常见做法是,对任何工程进行修改之后,重新将工程部署到tomcat。

后来一次偶然的机会打开tomcat对应的目录:D:\J2EE\apache-tomcat-7.0.62\conf文件夹下的serve.xml,在Host标签下看到了这个

这个是我另外的一个web工程(可以在网页中打开),后来一想,是不是我也应该加一个对应的context子元素,改一下web工程名字就好,试过之后,OK还真成功了!

在这里我稍微强调一下,改动的serve.xml文件的时候,记得是在tomcat对应目录中的xml文件中改,不要在这里改动,在这改动之后,你回头看看tomcat目录下的相同的xml文件还是没改动。这是我试了好多次发现的。切记!(https://img-blog.youkuaiyun.com/20150605161946877)

抱着学习的心态去网上查了一下这个标签表示的内容。
http://blog.knowsky.com/206846.htm
这篇文章,强烈建议看一下,将的还比较通俗易懂(你要是看不明白,duang,我也没辙);
有时候还会遇到另外一种情况的警告(看着总是不爽):
Invalid message recieved with signature 18245
具体的我也就不介绍的,在serve.xml文件中,暂时还有一个地方需要注意的,暂时还没研究透,只看到这篇文章,可参考:http://zhycaf.iteye.com/blog/977615

以上写的比较乱,将就一点看吧,希望你们解决问题之后,跟我一样心情会很激动(这个破错误,整了我好长时间)。最后建议大家稍微了解一下tomcat文件目录下的各个文件夹对应的放的什么东西,有什么作用,这样对tomcat的实现原理会有一点点点了解。以后出了类似问题,至少有一点点头绪!

### Servlet 404 错误的原因及解决方案 #### 1. **Servlet 类未正确编译** 如果 `servlet` 没有被正确编译或者生成的 `.class` 文件没有放置在正确的目录下,则可能导致 404 报错。通常情况下,`.class` 文件应该位于项目的 `WEB-INF/classes/` 路径下[^1]。 #### 解决方案: - 确保 `servlet` 的源码已成功编译并生成了 `.class` 文件。 - 将生成的 `.class` 文件复制到 `WEB-INF/classes/` 下对应包路径的位置。 --- #### 2. **URL 配置错误** 当通过浏览器访问 `servlet` 时,如果 URL 地址配置不正确也会引发 404 错误。例如,在 `web.xml` 中定义的 `<url-pattern>` 不匹配实际请求地址[^3]。 #### 解决方案: - 检查 `web.xml` 文件中 `<servlet-mapping>` 和 `<url-pattern>` 是否正确设置。 ```xml <servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>mypackage.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/my-servlet</url-pattern> </servlet-mapping> ``` - 访问时应使用完整的上下文路径加上映射的 URL,例如: `http://localhost:8080/<context-path>/my-servlet` --- #### 3. **项目结构问题** 使用不同 IDE 开发 Web 应用程序时可能会遇到项目结构差异引起的 404 错误。比如 Eclipse 默认的 `WebContent` 目录与 MyEclipse 的 `webroot` 目录冲突[^4]。 #### 解决方案: - 确认当前使用的 IDE 是哪种,默认的工作目录是否一致。 - 若发现 `web.xml` 文件不在有效工作目录下(如 `webroot`),可将其拷贝至正确的目录(通常是 `WebContent/WEB-INF/web.xml`)。 - 对于 Maven 工程,确认其构建后的输出路径为标准 Java EE 结构。 --- #### 4. **编码问题** 如果 `web.xml` 文件存在编码异常(非 UTF-8 编码),也可能导致 Tomcat 加载失败从而抛出 404 错误。 #### 解决方案: - 将 `web.xml` 文件保存为 UTF-8 编码格式。 - 在编辑器或 IDE 中手动调整文件编码选项。 --- #### 5. **API 版本兼容性问题** 新版 Tomcat 改用了 Jakarta EE API 替代旧版 Javax API。如果工程仍依赖老版本的 `javax.servlet-api` 则会出现加载类失败的情况,最终表现为 404 或其他运行时错误[^5]。 #### 解决方案: - 更新 Maven 依赖库中的 `servlet-api` 至最新版本,并替换为 Jakarta EE 提供的新 API。 ```xml <dependency> <groupId>jakarta.servlet</groupId> <artifactId>jakarta.servlet-api</artifactId> <version>6.0.0</version> <scope>provided</scope> </dependency> ``` --- #### 6. **Spring Boot 自定义 404 处理逻辑** 在 Spring Boot 中可以通过自定义全局异常处理器来捕获 404 请求并返回友好的提示页面或 JSON 数据[^2]。 #### 实现方式: 创建一个控制器实现 `ErrorController` 接口: ```java @RestController public class CustomErrorController implements ErrorController { private static final String PATH = "/error"; @RequestMapping(value = PATH, produces = MediaType.APPLICATION_JSON_VALUE) public ResponseEntity<Map<String, Object>> handleError(HttpServletRequest request) { Map<String, Object> body = new HashMap<>(); body.put("status", HttpStatus.NOT_FOUND.value()); body.put("message", "Resource not found"); return new ResponseEntity<>(body, HttpStatus.NOT_FOUND); } @Override public String getErrorPath() { return PATH; } } ``` --- ### 总结 上述列举了几种常见引起 Servlet 404 错误的原因及其对应的解决办法。具体问题需结合实际情况逐一排查,优先检查 `.class` 文件是否存在、URL 映射是否正确以及项目环境配置是否有偏差等问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值