对于Struts框架自动执行类中的自定义方法的解决方法
之所以接触到已经过时的struts框架,是因为学习要求,算是体会框架的进化过程吧,如果直接使用最先进的框架,可能因为缺乏使用历程经验而无法深刻地体会到框架的优化特性。
闲话不多赘述,进入正题。
发现问题:Struts框架当按照需求执行到某个Action对应的类下的特定方法时,同类下未被调用的自定义方法会自动执行,从而引发错误。
出现原因:经过检查,莫名其妙的被自动调用的方法为getUserInfo(),其中名字首部带有“get”字样,因此出现问题。
个人猜测:因为初学Struts这个古老框架,深知继续研究没有太多价值,所以仅仅进行了简单的试验,经过实验发现:分别修改了4次方法名,运行环境为ecplise ee+tomcat9.0,运行环境无异常。
组别 |
起名 |
结果 |
第一组 | getUserInfo() | 自动执行 |
第二组 | get123() | 不自动执行 |
第三组 | GetUserInfo() | 不自动执行 |
第四组 | Getget() | 不自动执行 |
所以,这里很可能跟Struts中识别类中getter方法的代码块有关系,具体相关代码块暂时没有进行研究,不过通过比较第一组、第二组、第四组试验发现,当方法命名为小写词汇"get"+任何合法命名内容+字母结尾时,会引发“Struts框架在执行该方法所在类的其他方法时自动执行该方法”现象。
结论(暂时):通过试验,发现除了第一组之外,其他三组的方法名称都不报错,但是基于“方法命名有意义”的要求,不建议以第二组进行命名;又基于常规编程规约,方法命名还需要符合“第一个单词首字母小写之后所有单词首字母大写”的要求,所以请放弃以“get”或者“Get”为首部进行命名的方式,转为其他同义单词。
当然,如果有类似需求,就想让某个方法自动执行,可以采用本方式,即:方法命名以小写get开头+字母结尾。(但是,需要注意,只有当Action类被访问时才会自动执行,如果访问类,方法不能自动执行)
踩坑完毕。
防伪水印:ZWPZWP