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

    【敬畏能量 敬畏自然】
  • 相关阅读:
    Tarjan求LCA
    过滤器、监听器、拦截器的区别
    java操作Redis缓存设置过期时间
    Redis和Memcached区别,Redis的过期策略
    缓存穿透、缓存击穿、缓存雪崩区别和解决方案
    Memcached和Redis在Linux下的安装
    jmeter学习
    用FastDFS一步步搭建文件管理系统
    version control
    关于Linux的防火墙命令和端口占用查询
  • 原文地址:https://www.cnblogs.com/moegarn/p/14308396.html
Copyright © 2020-2023  润新知