阅读更多
struts.devMode=false引发的请求不响应问题
如题,近日遇到非常有意思的问题,在一个功能页面,通过ajax发送请求到服务器端,服务器端获取请求之后,经过后台处理返回一个带有数据的jsp页面,结果出现了状况,功能页面始终停留在那里不动也不刷新该刷新的区域。
于是开始找问题:
将ajax请求的URL路径和参数,经过拼装后,放入到IE地址栏进行测试。
经过测试发现,该URL地址有效,后台能获取到URL传递的参数,也能执行程序处理,并且后台服务端程序无异常抛出。
但是问题也来了,放在地址栏中的URL请求返回的结果确是HTTP404 错误,无法获取到该请求的页面。
晕了,这可不合理呀,明明URL和参数都没错,为什么不返回页面呢?
于是换了一下URL中的参数值为另一个有效的参数,但该参数,从数据库中查不到数据,也就是说无数据的参数,但程序不会有问题,结果神了,查不到数据的参数确能从后台获取返回的jsp页面,只是页面的列表中无数据而已,但只少说明功能没有错误呀,有请求就有响应呀。
到底是什么原因,导制有数据的参数传到后台后执行没有异常但就是不返回jsp页面,抛http404错误。
而无数据的参数传到后台一样不抛错,确又能返回jsp页面。不得不说,我被这个问题给难住了。
经过不断努力的测试与分析,以及代码中插入println打印语句调试,发现了有意思的事,有数据的参数传到后台struts2的action中对应的控制方法中时,该方法中有调用业务层多个业务方法进行程序处理,我在每个业务层的方法中都加入一句println打印语句,就是想跟踪一下到底是那个方法没执行完还是怎么回事,结果发现,程序执行完到第三个业务层方法之后,就没有在控制台打印println中定义的语句,也就是说程序执行了一半的业务方法,结果就停止不执行了。
这可有意思了,我同样试了试实际无数据的参数,结果能够完整的打印。
我询思着,,,一般页面发送的请求,只要路径合法是对的就,程序执行不出错,就能返回响应页面。获取不得页面,除非服务器停了或者请求路径有错。可是我这排出了上面的原因呀。
百思不得其解,程序和请求路径都不出错,那为什么一个请求动作,action中的代码就只执行了一半就停止了,没有响应了。
后来经过不断的调试,偶然间将struts.devMode改成true,改为开发模式,结果发现有数据的参数,传到后台服务端能够返回响应页面了,而且是带有数据的jsp页面。程序代码没有经过任何改动,所有方法中的println打印语句都在控制台中打印出来了。就这样,功能页面没有问题了。
到现在为止我还是没搞明白,程序代码没有出现错误,为什么将struts.devMode的参数由false改成true,一切都能正常执行,这个问题跟开发模式和发布模式的关联在哪里。问题到底出在哪里?我还是没一个完整的概念和思绪,如果那位程序员朋友有遇到类试问题,敬请提出共同讨论,共同学习一下。