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,一切都能正常执行,这个问题跟开发模式和发布模式的关联在哪里。问题到底出在哪里?我还是没一个完整的概念和思绪,如果那位程序员朋友有遇到类试问题,敬请提出共同讨论,共同学习一下。
分享到:
相关推荐
2. **响应编码问题**:服务器端处理请求并返回结果时,字符集设置不正确。 3. **配置文件问题**:Struts2框架的配置文件(struts.xml或struts.properties)中的编码设置不正确。 #### 三、解决方案详解 针对上述原因...
struts.devMode=false struts.enable.DynamicMethodInvocation=true struts.i18n.reload=true struts.ui.theme=simple struts.locale=zh_CN struts.i18n.encoding=UTF-8 struts.serve.static.browserCache=false ...
struts.devMode=false ``` 上述配置分别启用了动态方法调用和关闭了开发模式。 ### 总结 Struts2框架因其高度的灵活性、易于集成的特性,在Java Web开发领域占据了重要的地位。通过深入理解其工作原理和配置...
当应用处于开发阶段时,为了确保每次请求都能获取最新的服务器响应,通常设置此属性为`false`。 #### struts.enable.DynamicMethodInvocation 指定了Struts 2是否支持动态方法调用,默认值为`true`。如果需要禁用...
2. **关闭开发模式**:通过设置`struts.devMode`属性为`false`,可以关闭开发模式,避免每次请求都进行模板编译等耗时操作。 ```xml <!-- 在struts.xml或web.xml中 --> <constant name="struts.devMode" value=...
- 方式二:在`struts.xml`中添加`<constant>`标签,如`<constant name="struts.devMode" value="false" />`。 - 方式三:在`web.xml`中配置`Filter`的初始化参数,如`<init-param><param-name>struts.devMode...
<constant name="struts.devMode" value="false"/> <constant name="struts.objectFactory" value="org.apache.struts2.spring.StrutsSpringObjectFactory"/> <constant name="struts.json.package.include" ...
如果希望在不配置任何`<result>`的情况下让Struts2的Action执行,可以在`struts.xml`中添加如下配置: ```xml <constant name="struts.devMode" value="true"/> <!-- 请求参数的编码方式 --> <constant name=...
<constant name="struts.enable.DynamicMethodInvocation" value="false"/> <constant name="struts.devMode" value="true"/> <package name="default" namespace="/" extends="struts-default,jquery-default"> ...
1. **struts.i18n.encoding**: 这个属性定义了Web应用的默认字符编码,设置为`UTF-8`意味着所有请求和响应都将使用UTF-8编码。在处理多语言和国际化时,确保正确的字符编码是非常重要的。 2. **struts.i18n.reload*...
- `struts.devMode`设定开发模式,当其值为`false`时,表示不在开发模式下运行,这可以提高性能但不会提供错误的详细信息。 - `struts.configuration.xml.reload`控制配置文件是否在更改后自动重载,`true`表示会...
- 开发模式(`struts.devMode`)允许开发者开启额外的调试和日志信息,便于开发阶段的调试和问题定位。默认情况下,该配置为`false`,但在开发过程中将其设置为`true`可以提供更多的帮助。 2. **查看源码**: - ...
- **关闭调试模式**:在生产环境中禁用Struts的devMode调试模式。 - **操作名称禁止使用通配符**:避免使用通配符(*)作为Action名称。 2. **其他组件及接口** - **避免使用JNI**:尽可能避免使用JNI(Java ...
- **生产环境关闭struts的devMode调试模式:** 关闭调试模式,避免敏感信息泄露。 - **Struts2操作名称禁止使用通配符(*):** 避免使用通配符匹配操作名称,增加安全性。 - **其他组件及接口:** - **程序实现...