被was坑惨了,websphere下面报webapp.WebApp logError SRVE0293E: [Servlet Error]-[null]错误。...

 

具体报错信息如下:

 

webapp E com.ibm.ws.webcontainer.webapp.WebApp logError SRVE0293E: [Servlet Error]-[null]: com.ibm.ws.webcontainer.webapp.WebAppErrorReport:
at com.ibm.ws.webcontainer.webapp.WebAppDispatcherContext.sendError(WebAppDispatcherContext.java:624)
at com.ibm.ws.webcontainer.srt.SRTServletResponse.sendError(SRTServletResponse.java:1071)
at org.apache.struts2.dispatcher.Dispatcher.sendError(Dispatcher.java:770)
at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:505)

 

谁能看明白这个错误信息的含义?反正我是被坑了,网上也找不到答案。

 

现在我知道是什么原因了,让我来总结一下:

第一,有个关键信息是WebApp,说明它是应用端自身的一个error

第二,报错的地方不明确,websphere上调试也极为不方便(太耗时间了),通过打印日志的方式,定位到了错误所在的行。

不过很是蹊跷,那一行既然报错了,但是为什么没有被外层的try-catch捕获呢?,而且那一行看起来没有问题啊!

 

哦,我好想明白了,是try-catch捕获的力度不够,错误的等级比Exception还要高,也就是说要用Throwable错误,赶紧试试看!

没错,事实证明了,是个Throwable类型的错误,因为我改动了接口类而没有更新class文件,导致暴出了一个Throwable类型的错误!

 

这真的是被坑惨了…………总结经验:

1、有些地方要用Throwable来捕捉错误。(看具体的情况,是否引用了接口,但是又找不到实现类?)

2、日志记录要全面,便于定位问题。为了避免每次都要修改代码,可以事先设置较全面的日志,上线时关闭,调试时可打开(开关放在数据库中)。

 

 

 

 

 

转载于:https://www.cnblogs.com/zollty/archive/2013/04/27/3046187.html

<think>好的,我现在需要解决用户提出的javax.servlet.ServletException和SRVE0190E错误,特别是处理找不到文件的问题。首先,我得理解这些错误的具体含义和常见原因。 用户提到SRVE0190E错误,这可能与Servlet容器处理请求时找不到相关资源或配置有关。结合用户提供的引用内容,尤其是引用[3]中的FileNotFoundException,用户可能在Servlet中尝试读取文件,但路径不正确导致文件找不到。引用[4]提到通过类加载器或ServletContext来获取资源,这可能是一个关键点。 首先,我需要检查文件路径是否正确。用户提到haha.properties在WEB-INF/classes目录下,但访问时错。这时候应该使用类加载器来获取资源,比如使用ClassLoader.getResourceAsStream(),而不是绝对路径。因为当应用部署到服务器上时,文件的位置可能与开发环境不同,绝对路径不可靠。 其次,用户可能没有正确使用ServletContext来获取资源。ServletContext的getResourceAsStream()方法相对于Web应用的根目录,而类加载器的方法则是相对于类路径。如果文件放在WEB-INF/classes下,应该使用类加载器的方法。例如,如引用[4]所示,使用MysqlTool.class.getClassLoader().getResourceAsStream("haha.properties")。 另外,检查配置文件的位置是否正确。用户需要确认haha.properties是否确实被打包到WEB-INF/classes目录中。在Maven项目中,资源文件通常放在src/main/resources,构建时会自动复制到classes目录。如果用户直接放在src下,可能需要检查构建配置是否正确。 还有,查看是否存在部署问题。有时候文件虽然存在,但服务器没有正确部署或缓存导致找不到文件。清理服务器工作目录或重新部署应用可能会有帮助。 用户提到的错误还可能和Servlet配置有关,比如web.xml中的servlet映射是否正确,或者是否有过滤器配置错误。引用[5]中的配置参数可能涉及Web容器的兼容性设置,如果应用运行在IBM WebSphere上,可能需要调整这些参数。例如,检查是否配置了正确的过滤器映射,避免路径解析问题。 此外,用户可能遇到的是权限问题,虽然可能性较低,但需要确认Tomcat是否有权限访问该文件。例如,检查文件的读取权限是否开放。 总结一下,解决步骤可能是: 1. 确认文件路径和访问方式是否正确,使用类加载器或ServletContext获取资源。 2. 检查文件是否被正确打包到部署目录中。 3. 检查Servlet配置和过滤器设置,确保没有路径映射错误。 4. 清理服务器缓存,重新部署应用。 5. 检查服务器日志,获取更详细的错误信息,帮助定位问题。 需要确保用户在代码中使用正确的方法读取文件,避免硬编码路径,而是使用相对路径和正确API。同时,验证资源文件的位置和构建过程是否正确,排除部署问题。如果用户的环境是特定应用服务器,如WebSphere,可能需要调整相关配置参数,如引用[5]中的内容。</think>### javax.servlet.ServletException与SRVE0190E错误解决方案 #### 一、错误原因分析 1. **SRVE0190E**是WebSphere服务器特有的错误码,表示Servlet容器处理请求时发生异常[^5] 2. **FileNotFoundException**通常由以下原因导致: - 资源文件未正确部署到`WEB-INF/classes`目录 - 使用绝对路径而非相对路径访问资源 - Servlet配置文件中存在路径错误(如`dispatcherServlet-servlet.xml`未找到)[^2] #### 二、关键解决步骤 1. **验证文件部署位置** - 确保`.properties`文件在Maven项目的`src/main/resources`目录 - 构建后检查`WEB-INF/classes`目录是否包含目标文件 ```java // 正确读取方式示例 InputStream in = MyServlet.class.getClassLoader() .getResourceAsStream("haha.properties"); ``` 2. **使用ServletContext访问资源** ```java // 适用于WEB-INF目录下的资源 InputStream is = getServletContext() .getResourceAsStream("/WEB-INF/classes/haha.properties"); ``` 3. **检查XML配置文件** - 确认`dispatcherServlet-servlet.xml`存在于: ``` src/main/webapp/WEB-INF/ ``` - 在`web.xml`中添加配置检查: ```xml <context-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/dispatcherServlet-servlet.xml</param-value> </context-param> ``` 4. **WebSphere特殊配置** 在`ibm-web-ext.xml`中添加: ```xml <jsp-attribute name="reloadEnabled" value="true"/> <jsp-attribute name="reloadInterval" value="5"/> ``` #### 三、异常处理建议 1. 统一使用UTF-8编码: ```java Properties prop = new Properties(); try (InputStreamReader isr = new InputStreamReader( getClass().getClassLoader() .getResourceAsStream("haha.properties"), StandardCharsets.UTF_8)) { prop.load(isr); } ``` 2. 部署验证清单: - [ ] 文件存在于`WEB-INF/classes` - [ ] 无中文路径 - [ ] 文件权限设置为644 - [ ] 服务器已清理缓存 #### 四、进阶调试方法 1. 通过URL定位问题: ```java URL fileUrl = getServletContext().getResource("/WEB-INF/classes/haha.properties"); System.out.println("Actual file path: " + fileUrl.getPath()); ``` 2. 启用详细日志: ```properties # 在logging.properties中添加 org.apache.catalina.core.ContainerBase.[Catalina].level = FINE ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值