出现这个问题一般是struts.xml配置文件没有配置好,之前由于我把class属性值写成了包名的路径,导致出错了,应该是class的完整路径名。
错误:配置文件的第八行class属性路径没有写到类名,只写到了包名
四月 13, 2018 11:20:39 下午 org.apache.catalina.core.StandardContext filterStart
严重: Exception starting filter [struts2]
Unable to load configuration. - action - file:/D:/practice/java/.metadata/.plugins/org.eclipse.wst.server.core/tmp1/wtpwebapps/studyStruts2/WEB-INF/classes/cn/itheima/api/struts.xml:8:70
at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:493)
at org.apache.struts2.dispatcher.ng.InitOperations.initDispatcher(InitOperations.java:74)
at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.init(StrutsPrepareAndExecuteFilter.java:57)
at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:283)
struts.xml正确的配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 常量配置
i18N:国际化 解决post提交乱码
-->
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<!--
指定访问action时的后缀名。默认为action或者.action后缀
例如:http://localhost:8080/studyStruts2/hello/HelloAction.do
-->
<constant name="struts.action.extension" value="action,,"></constant>
<!--
指定struts2是否以开发模式运行
1.可以热加载主配置 不需要配置重启即可生效
2.提供更多错误信息输出 方便开发时的调试
-->
<constant name="struts.devMode" value="true"></constant>
<!-- package:并不对应java源码的包 是将Action配置封装,就是可以在Package中配置很多action
name:包名,标识作用,不重复
namespace:给action的访问路径中定义一个命名空间
extends:继承另一个包或指定包(必须要继承这个包)
abstract:包是否为抽象的;标识性属性标识该包不能独立运行,专门被继承
-->
<package name="hello" namespace="/hello" extends="struts-default">
<!-- action:配置action类
name:决定了Action访问资源名
class:action的完整类名
method:指定调用action中的哪个方法来处理请求
-->
<action name="HelloAction" class="cn.itheima.test.HelloAction" method="hello">
<!-- result:结果配置
name:标识结果处理的名称与action方法的返回值对应
type:指定调用哪一个result类来处理结果,默认使用转发dispatcher
标签体:填写转发页面的相对路径
-->
<result name="success" type="dispatcher">/hello.jsp</result>
</action>
</package>
<package name="showvs" namespace="/" extends="struts-default">
<action name="DemoAction1" class="cn.itheima.ognl.DemoAction1" method="execute">
<result name="success" type="dispatcher">/showvs.jsp</result>
</action>
</package>
<package name="result" namespace="/" extends="struts-default">
<!--转发-->
<action name="Demo1Action" class="cn.itheima.test2.Demo1Action" method="execute">
<result name="success" type="dispatcher">/hello.jsp</result>
</action>
<!--重定向-->
<action name="Demo2Action" class="cn.itheima.test2.Demo2Action" method="execute">
<result name="success" type="redirect">/hello.jsp</result>
</action>
<!--转发到Action-->
<action name="Demo3Action" class="cn.itheima.test2.Demo3Action" method="execute">
<result name="success" type="chain">
<param name="actionName">Demo1Action</param>
<param name="namespace">/</param>
</result>
</action>
<!--重定向到Action-->
<!-- <action name="Demo4Action" class="cn.itheima.test2.Demo4Action" method="execute">
<result name="success" type="redirectAction">
<param name="actionName">Demo1Action</param>action名称
<param name="namespace">/</param>action所在的命名空间
</result>
</action> -->
</package>
<!-- 引入其他struts配置文件 -->
<include file="cn/itheima/test/struts.xml"></include>
<include file="cn/itheima/api/struts.xml"></include>
<include file="cn/itheima/param/struts.xml"></include>
</struts>