关于在Web项目的web.xml文件配置了Struts2拦截器后,视图界面运行出现404错误的分析

Struts框架下的运行项目下所有的视图文件jsp、HTML等出现404错误的原因总结

本文总结一下隔个人在学习Web应用开发中,使用Struts2框架技术时出现的404错误。
开发工具: eclipse
开发语言: Java
Struts2版本: struts-2.5.22
实验项目: 动态网站项目

理解Struts2的原理

要找错误,我们得先明白Struts2的原理是怎么样的,这样才能精准定位错误,并改正。
Struts2框架是什么: 一个轻量级的主流框架,在MVC中strut2就是controller(控制器),用于接受页面传输过来的值然后通过内部处理,将结果返回页面。
Struts2框架用来干什么: Struts2是用来处理Request请求,并进行内部处理,再进行Result返回。
Struts2框架简单工作流程:
1.浏览器——(发送request请求)——访问某一网页资源
2.这个请求—— 通过Web部署文件的Web.xml——>过滤器(Filter)
3.过滤器(Filter)——>这个请求——>核心控制器(FileterDispatcher)
4.核心控制器——>询问框架配置文件struts2.xml——>调用哪个Action类
5.调用Action的execute前——>拦截器链——>execute()方法
6.execute()方法——>执行用户的相关操作——>Action执行完毕,返回结果
7.Action的返回结果——>struts2.xm配置转跳的指定资源——>返回浏览器显示

1.Struts2出现404的原因一: 导入的Struts2 jar不正确

1.1 项目导入的jar包位置不正确

在这里插入图片描述
解决方法:检查导入的路径(项目/WebContent/WEB-INF/lib)

1.2 导入的jar包不完整或者多余

在这里插入图片描述
解决方法:前往Struts2官网下载压缩好的 struts-2.5.22-min-lib.zip 包,解压后重新把里面的所有包导入

2.Struts2出现404的原因二: 部署描述文件web.xml配置有误

2.1 如图的两个关联标签名称不对应

在这里插入图片描述

2.2 前端控制器 FilterDispatcher 的完全限定类名有误

在这里插入图片描述
验证是否有误:按住Ctrl键,把鼠标放到此完全限定类名上,变蓝则正确,若不正确则有误。
解决方案:在本项目的任意一个java类中任意编写StrutsPrePareAnd… 通过智能辅助的提示,引入该类名,复制顶部import自动引入的完全限定类名,即为当前Struts2版本的FilterDispatcher正确完全限定类名

3.Struts2出现404的原因三: 配置文件 struts2.xml 内容有误

3.1 struts2.xml 不符合固定格式

在这里插入图片描述
解决方案:前往Struts2官网,下载完整的Struts2框架包 struts-2.5.22-all.zip ,解压后,进入其src目录下,搜索名为struts2.xml的文件,选择文件大小最小的文件,复制将其粘贴到项目的Java Resources 下的 src目录中,再根据其已有的固定格式修改内容。
在这里插入图片描述

3.2 struts2.xml 中的内容书写有误

3.2-1 继承空间有误

在这里插入图片描述

3.2-2 引用的Action类的完全限定类名与项目下已有的Action不一致

解决方案:仔细检查,如图有多个Action的配置时,要仔细检查为其配置的所有Action类,在项目中是否存在,是否名称一致,只要有一个错,都会导致404,验证方法:按住Ctrl键,把鼠标放到配置的每个Action类的完全限定类名上,变蓝在则正确。

总结:

由Struts2框架的工作原理可知,Struts2框架的启动是在部署文件web.xml中通过过滤器调用FieldDispatch类时初始化并启动的。 而在web.xml中一般都是设置为拦截所有资源请求并交由Struts2框架处理的,所以访问资源时出现404的最根本原因,就是web.xml下的过滤器拦下了所有请求,但是Struts2因为以上各种原因没办法处理这些请求,因此就造成访问不了资源,即浏览器访问资源的路径正确,但还是报404错误。 因此常常造成删除了web.xml的Struts2配置后就恢复正常的错觉,其实只要验证引用的FilterDispatch类变蓝正确,就不是这个web.xml的锅。