websphere7 下解析http请求异常 java.io.IOException: SRVE0216E: post 主体包含的字节比内容长度指定的字节要少...

本文详细描述了使用Websphere7在解析HTTP请求时遇到的异常问题,包括错误信息和解决方案。具体表现为在请求过程中出现解析参数错误和POST主体长度不匹配的问题,通过在HTTP请求头中设置特定的Content-type属性得以解决。

最近的项目用到websphere7 这东西真不咋地。。。其中一个异常如下,官网上说打补丁就能够解决,丫的从头打到尾。 还是不好使。。

 

 

websphere 下解析http请求时如果报

 

 E com.ibm.ws.webcontainer.srt.SRTServletRequest parseParameters SRVE0133E: 解析参数时出错。{0}
                                 java.io.IOException: SRVE0216E: post 主体包含的字节比内容长度指定的字节要少

 

解决办法:在请http请求头中加入httpURLConnection.setRequestProperty("Content-type", "application/x-java-serialized-object");//设定传送的内容类型是可序列化的java对象

 

<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、付费专栏及课程。

余额充值