分析问题

一个问题:当我在index.jsp中使用下拉列表(都是index.action?...),而我在该页面加了个url:index.action,最后当我选了下拉列表中的任一项后再换成index.action,这时出现的是上次的页面。针对这个问题,主要是用来分析,了解怎么去分析一个问题。

首先怎么判断一个方法执行了没有?

需要使用到断点模式,将断点打到方法那一行,如果执行了,那么方法下面那行会显明。

action实例化了没有?

实例化了,因为没有实例化怎么会执行该方法。

我自己实例化了该action吗?

没有。

引出一个问题:没有实例化action,执行了里面的方法?

这显然是不成立的。

那是什么实例化了该action?

先放下这个问题。

spring是用来干什么的?

依赖注入资源(对象,常量。。。)

这里有对象,类可以实例化成一个对象,而通过配置文件可以了解到,是spring来实例化这个对象的。然后将这个对象注入到所需要的类中去。

那么回到刚才的问题:是什么实例化这个action?

spring实例化的。

所以得出结论,spring实例化action,注入到所需要的类中去,执行了该action里面的方法。

分析到这,又得提出疑问,既然spring实例化一个action,那为什么当我换成index.action时会出现返回的是上次从下拉列表中选中后的页面。这就让我感觉到spring没有实例化新的action,而使用的是上次实例化的action。

这就应该是spring出现的问题,很可能问题就出现在配置文件那。需要对配置文件进行分析,可以这样,拿自己的配置文件和别人的配置文件进行对比。再就是由于配置文件中最需要改变的是bean,对bean进行剖析。

当我对bean进行剖析后发现里面有个scope属性。

spring的bean属性scope如果为默认属性,那么就代表着会使用单利模式,那么如果struts从前台得到个数据,经过处理后,如果下次再进入该页面会利用到上次提交的数据,这时就会出现一个问题,action并未再次被实例化,而使用的是上次实例化的action。
spring的单例模式(scope default):只会创建一个action对象,每次访问都是同一个action对象,数据不安全。

struts要求每次访问都对应不同的action,这时将scope设立为了propertype就保证当有请求的时候都会创建一个Action对象。


从上面解析的过程,要学会怎么去分析一个问题:

一步一步的提出疑问,以肯定的方式解决疑问,直至找到突破口。

第一步是最难下手的,决定了整个思路。

矛盾冲突,提出疑问。

相关文章
相关标签/搜索