1.通配符访问方法,报错404错误找不到页面
(1)错误原因:struts.xml中缺少<global-allowed-methods>regex:.*</global-allowed-methods>,根据字面理解就是允许以*通配符的方式访问方法
(2)详细错误:HTTP Status 404 - There is no Action mapped for namespace [/] and action name [] associated with context path [/struts2002].
(3)报错截图:
(4)解决方案:在package标签之间添加<global-allowed-methods>regex:.*</global-allowed-methods>即可
2.编写struts.xml时编译报错
(1)错误原因:<package></package>中的标签必须按顺序书写,否则会报错
(2)详细错误:The content of element type "package" must match "(result-types?,interceptors?,default-interceptor-ref?,default-action-ref?,default-class-ref?,global-results?,global-allowed-methods?,global-exception-mappings?,action*)".
(3)报错截图:
(4)解决方案:检查顺序是否正确
result-types
interceptors
default-interceptor-ref
default-action-ref
default-class-ref
global-results
global-exception-mappings
action*
(5) 版本改变后容易出现文档的版本不同的问题,这个问题也使我困扰了好久,才从网上找到答案。以下是转载他人的博客:
在使用通配符的时候出现了问题你就是 {1} 获取不到 * 所表示的字符,一开始我没有往版本上考虑,我一遍一遍的排查,发现是这个通配符的问题,之前并没有想到,因为出的还是404 action找不到的问题,我先不用通配符,能正确显示,使用通配符导致Action不能区别访问,
<action name="Person" method="add" class="com.struts2.action.LoginAction2">
<result name="success">/success.jsp</result>
<result name="logout">/error.jsp</result>
<allowed-methods>*</allowed-methods>
</action>
上面的不用通配符,下面的用了通配符却出错了,一边一边的改这个配置
<action name="*Person" method="{1}" class="com.struts2.action.LoginAction2">
<result name="success">/success.jsp</result>
<result name="logout">/error.jsp</result>
<allowed-methods>*</allowed-methods>
</action>
结果这个可以访问到,于是我发现问题出在了 {1} 这个符号上,最后发现这是struts2 2.5 的又一个新特性---通配符禁止使用,我想应该是这种操作虽然对于编程人员来说简化了许多操作,但是对系统来说却增加了系统的开销。所以默认禁止使用通配符,需要加入允许操作才可以
红线标记的两句话就是开启这个的秘密。终于解决了,错,struts.xml显示这两个东西是没有的,瞬间懵逼了,没有,怎么可能,又开始检查文件,发现并没有错误,又纠结了好长时间最终想到是不是还是版本的问题,看了看struts.xml
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
果然是版本的问题,赶紧改正
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
这下没问题了,这下是完全成功了,终于从Struts2 2.5的套路中走出来了,不得不说2.5的套路太深了,我都无言以对了,但是从另一个方面来看,他禁止了许多不安全或是对系统来说负担过中的功能,这也是应该引导编程人员进步的阶梯吧,从struts2 的更新开始就是对struts2的优化开始。
新的东西出现的很快,当我们的教材还是以前的版本时,就已经跟不上了,我们需要去接触最新的东西,即使很难,这是因为新的东西和旧的东西有很大的改变,当这种差异显现的时候,头疼的就是程序员了,这是为什么错了,怎么又错了,欸,怎么对了,好奇怪。原来我接触JAVAFX2.0的时候也很头疼,因为这种GUI很新,和旧的AWT、SWING完全不是一个思想,可以说是更高层的抽象了。扯远了,以上就是我在最新的Strut2 2.5的版本上发现的新的,估计以后会发现更多,希望可以解决你们的问题。