博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一个问题引发的思考——跨层调用的坏处
阅读量:6241 次
发布时间:2019-06-22

本文共 851 字,大约阅读时间需要 2 分钟。

hot3.png

    今天遇到一个问题,花了2小时左右,才把问题搞定。经过总结,感觉这个问题有普适性,故记录之。

    我们经常在jsp页面使用struts标签和ognl表达式。ognl比el强大的地方之一是,它可以调用对象的方法。处于偷懒的想法,我并没有像往常一样,把查出来的数据列表放在作用域或值栈中,而是直接调用Action中的dao成员变量中的方法——这里不讨论Action中使用dao是否合适,不是要说的重点。

    这是jsp中的代码:

<select id="sel1">

  <s:iterator  value="residentDao.getBuild()" >

<option value="<s:property value='id'/>"><s:property value="buildname"/>  </option>

 </s:iterator>

 </select>

  问题现象:

  结果,页面并没有出现我想要的数据。

    一般而言,我们会通过错误提示来定位及判断错误,但是!浏览器和控制台也没有出现任何错误提示信息。

    最后,忍着恶心的感觉看了好久,才找到问题所在——数据库配置出了点小错误。

    数据库配置没什么好说的。最让我感觉不解的是,为什么没有错误提示?

问题原因:

      一般在后台,我们会对“residentDao.getBuild()”这类代码进行trycatch,可在jsp页面中,大概是从友好界面的角度考虑,ognl似乎并未有异常处理(比方说:取不到值,也不会报空指针异常)。而且,jsp页面本来就不好调错,jsp中调用这类方法压根就是找死的行为。

解决办法:

        问题找到了,接下来要想的是:如何杜绝这种特别能恶心人的情况?

        我的解决办法是:杜绝跨层调用,加上完善的异常处理。

        像我这次的例子,jsp页面中,绝对不应该跨过Action调用dao的方法。并且,要调用的方法必须经过合格的异常处理。

        如此这般,问题解决。

转载于:https://my.oschina.net/u/1379006/blog/187282

你可能感兴趣的文章
java多线程stop,suspend使用代码实际例子
查看>>
中小型研发团队架构实践三:微服务架构(MSA)
查看>>
Windows动态库学习心得
查看>>
在VMware虚拟机上安装Ubuntu 10.04
查看>>
LDA主题模型简介
查看>>
可拖动的DIV续
查看>>
关于“类型初始值设定项引发异常”
查看>>
MySql 小表驱动大表
查看>>
Redis 数据结构的底层实现 (一) RealObject,embstr,sds,ziplist,quicklist
查看>>
SQL语句注入的问题
查看>>
jQueryEasyUI Messager基本使用
查看>>
【C语言学习趣事】_33_关于C语言和C++语言中的取余数(求模)的计算_有符号和无符号数的相互转换问题...
查看>>
Tensorboard教程:显示计算图中节点信息
查看>>
java 线程基本概念 可见性 同步
查看>>
Java:JUnit包
查看>>
unity_快捷键
查看>>
洛谷P3358 最长k可重区间集问题(费用流)
查看>>
洛谷P1251 餐巾计划问题(费用流)
查看>>
Beta冲刺(2/5)(麻瓜制造者)
查看>>
vs2012编码的UI测试使用教程
查看>>