对于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

posted @ 2021-01-21 15:40  锤子猫  阅读(148)  评论(0编辑  收藏  举报