Unexpected Exception caught setting

本文详细解析了在使用Struts框架时遇到的配置错误,包括开发者通知、异常捕获及解决方法。主要关注了在设置密码相关属性时出现的提示,并提供了调整devMode、增加setter方法及使用域对象或驱动模型等解决方案。旨在帮助开发者快速定位并解决此类问题,提高开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

......


三月 15, 2016 1:31:04 下午 com.opensymphony.xwork2.util.logging.commons.CommonsLogger error

严重: Developer Notification (set struts.devMode to false to disable this message):
Unexpected Exception caught setting 'confirmNewPwd' on 'class com.wlgj.xtjc.biz.user.action.UserAction: Error setting expression 'confirmNewPwd' with value ['123456789', ]
三月 15, 2016 1:31:04 下午 com.opensymphony.xwork2.util.logging.commons.CommonsLogger error
严重: Developer Notification (set struts.devMode to false to disable this message):
Unexpected Exception caught setting 'currentPwd' on 'class com.wlgj.xtjc.biz.user.action.UserAction: Error setting expression 'currentPwd' with value ['123', ]
三月 15, 2016 1:31:04 下午 com.opensymphony.xwork2.util.logging.commons.CommonsLogger error
严重: Developer Notification (set struts.devMode to false to disable this message):

Unexpected Exception caught setting 'newPwd' on 'class com.wlgj.xtjc.biz.user.action.UserAction: Error setting expression 'newPwd' with value ['123456', ]

................

 “当struts.devMode设置为true时,html表单数据中有和action属性匹配不上的参数名时(使用域对象时的非对象属性,或DrivenModel时,此model没有的属性时)就会报此提示。出现这个没什么影响,就是为了便于使用者调试。struts.devMode设置为false就没有了。可能它的log级别设置的容易让人误会。” Action中没有定义setter和getter方法时,使用request.getParameter("name")也可以取到;


   解决方法 1:struts.devMode设置为false  

          解决方法 2: 在Action中增加对应的setter方法

         解决方法 3:使用域对象或驱动模型时,给domain对应的增加对应的属性或者临时属性即可。


<think>嗯,用户问的是关于编程中的意外异常(unexpected exception)的原因和解决方法。首先,我需要明确什么是意外异常。根据引用[1]中的内容,异常在传播时类型可能变得不那么相关,而包装异常可以提供更相关的信息给调用者。这可能意味着开发者在处理异常时如果没有正确包装或传递,可能导致上层无法准确识别异常来源,从而出现意外异常。 接下来,常见原因部分。用户可能遇到的情况包括空指针引用、越界访问、类型转换错误、资源未释放、逻辑错误和外部依赖问题。比如,空指针异常在Java或C#中很常见,尤其是在没有进行null检查的情况下直接调用方法或访问属性。数组越界则是访问了不存在的索引,比如在循环中处理数组时条件判断错误。类型转换错误可能发生在动态类型语言如Python中,或者在静态类型语言中进行强制类型转换时未检查类型是否兼容。资源未释放可能导致内存泄漏或文件句柄耗尽,特别是在没有使用try-with-resources或finally块的情况下。逻辑错误比如除以零,或者条件判断错误导致程序进入意外分支。外部依赖如数据库连接失败、API调用超时等,这些异常通常需要重试机制或备用方案。 然后,解决方法部分。需要逐一对应原因给出方案。例如,空指针的预防可以通过代码规范,如Optional类或空检查。输入验证确保参数合法,避免非法输入导致异常。异常处理的最佳实践包括捕获特定异常而非通用的Exception,避免隐藏问题。资源管理方面,使用自动资源管理结构,如C#的using或Java的try-with-resources。日志记录和监控帮助追踪问题根源,尤其是在生产环境中。防御性编程如断言和单元测试,可以在开发阶段发现潜在问题。对于外部依赖,需要超时设置、重试机制和降级处理,保证系统部分功能可用。 引用部分的应用,引用[1]提到包装异常的重要性,这可能提示在捕获底层异常时,应转换为更上层的异常类型,避免暴露过多细节,同时保留原始异常信息。而引用[2]提到使用全局异常处理(如AppDomain.UnhandledException)可能导致难以维护,因此应谨慎使用,仅在必要时记录未处理的异常,而不是作为常规处理手段。 用户可能的需求不仅是了解原因和解决方法,还可能想知道如何调试这些异常,或者如何设计鲁棒的系统架构。因此,生成的相关问题可以包括调试技巧、单元测试异常的方法、全局异常处理的最佳实践,以及如何设计容错系统。这些问题帮助用户进一步深入学习和应用异常处理策略,提升代码质量。</think>### 意外异常(Unexpected Exception)的原因和解决方法 #### 1. 常见原因 - **空指针引用**(如访问未初始化的对象) 例如:$obj = null; \text{ } obj.method()$ 会导致 `NullPointerException`(Java)或 `NullReferenceException`(C#)[^1]。 - **越界访问** 例如:数组索引超出范围(`ArrayIndexOutOfBoundsException`)或集合操作越界(`IndexOutOfRangeException`)。 - **类型转换错误** 例如:强制类型转换失败(`ClassCastException` 或 `InvalidCastException`)。 - **资源未释放** 如文件句柄未关闭导致 `IOException`,或数据库连接未释放引发资源泄漏。 - **逻辑错误** 如除零操作(`ArithmeticException`)、死锁或竞态条件。 - **外部依赖异常** 如网络请求超时(`SocketTimeoutException`)或数据库连接失败(`SQLException`)。 #### 2. 解决方法 - **空指针预防** 使用代码规范(如 `Optional` 类型)或静态分析工具(如 `SonarQube`)。 - **输入验证** 对参数进行预检查,例如: ```java if (input == null) throw new IllegalArgumentException("输入不能为空"); ``` - **异常处理最佳实践** - 捕获特定异常而非通用 `Exception`(避免隐藏潜在问题)[^1]。 - 使用 `try-with-resources`(Java)或 `using`(C#)自动释放资源。 - **日志与监控** 记录异常堆栈信息(如通过 `logger.error("Error", e)`)并集成监控工具(如 Prometheus)。 - **防御性编程** 使用断言(`assert`)和单元测试覆盖边界条件。 - **外部依赖容错** 实现重试机制(如指数退避)或熔断模式(如 Hystrix)。 #### 3. 引用说明 - 当需要向上层传递更明确的异常时,可包装原始异常(如 `throw new ServiceException("操作失败", e)`),但需谨慎避免过度包装。 - 避免依赖全局异常处理(如 `AppDomain.UnhandledException`)作为主要手段,因其会降低代码可维护性[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值