欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

struts.devMode=false引发的请求不响应问题

程序员文章站 2022-07-07 22:21:57
...
   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,一切都能正常执行,这个问题跟开发模式和发布模式的关联在哪里。问题到底出在哪里?我还是没一个完整的概念和思绪,如果那位程序员朋友有遇到类试问题,敬请提出共同讨论,共同学习一下。