解决WebSphere异常:SRVE0199E: 已获取了 OutputStream

本文详细介绍了在WebSphere环境中,当jsp文件被编辑后,可能出现的异常问题及其解决方法。主要关注于如何通过简单地修改jsp文件尾部的代码来避免在服务方法中抛出异常的情况。

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

dlg:

例如 在WebSphere这个目录下

/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/temp/master1Node01/master1/gkht_war/gkht.war/gov/_FileDownload.java

这个java文件是jsp文件被编辑后成的java文件

此java文件末尾有:

 

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

 

    } catch (Throwable t) {
      if (!(t instanceof javax.servlet.jsp.SkipPageException)){
        out = _jspx_out;
        if (out != null && out.getBufferSize() != 0)
        out.clearBuffer();
        if (pageContext != null) pageContext.handlePageException(t);
      }
      else if (t instanceof com.ibm.ws.jsp.runtime.WsSkipPageException){
        ((com.ibm.ws.jsp.runtime.WsSkipPageException)t).printStackTraceIfTraceEnabled();
      }
    } finally {
      if (_jspxFactory != null) _jspxFactory.releasePageContext(pageContext);
    }
  }
}

 

这些是WebSphere自己给加上的,不是jsp原有的,所以要

只需在原jsp文件的尾部,执行     _jspxFactory =null ;   就不执行上面java文件中的后面那个finally 下的if语句。

只需添上这一句,就解决了WebSphere中,因为写的jsp里有  “ ……response.getOutputStream()  …… ”

而报的  :“    ……其中一个服务方法中抛出的异常。抛出的异常:java.lang.IllegalStateException: SRVE0199E: 已获取了 OutputStream     ……    ”

 

                                                                                                                                                 2008年12月5号

                                                                                                                                                  dlg 天津

转自:http://dlg2205.blog.163.com/blog/static/988694142008115103332636/

转载于:https://www.cnblogs.com/welcoming/p/3542375.html

<think>我们正在处理一个系统级错误代码:SRVE0295E。根据引用内容,用户提到了几个类似的错误(SRVE0190E),虽然错误代码不同,但都属于404文件未找到错误。因此,我们可以推断SRVE0295E可能也是类似的问题,即服务器无法找到请求的资源。首先,我们需要明确SRVE0295E错误的含义。根据IBMWebSphereApplicationServer的文档,SRVE0295E通常表示“Servlet未找到”(ServletNotFound)。这发生在Web容器无法找到与请求URL匹配的Servlet时。可能的原因包括:1.web.xml中未正确配置Servlet映射。2.应用程序部署不正确,导致Servlet类缺失或无法加载。3.上下文根(ContextRoot)配置错误。4.URL请求的路径不正确。参考用户提供的引用信息,他们解决SRVE0190E的方法主要是通过修改WebSphere的定制属性。虽然错误代码不同,但我们可以借鉴类似的思路。根据引用[2]和[3],他们设置了以下定制属性:-com.ibm.ws.webcontainer.invokefilterscompatibility=true-com.ibm.ws.webcontainer.mapFiltersToAsterisk=true-com.ibm.ws.webcontainer.removetrailingservletpathslash=true这些属性用于解决Web容器处理请求时的一些兼容性问题。对于SRVE0295E,我们也可以尝试调整这些属性,但更关键的应该是检查Servlet配置。解决步骤:1.**检查Servlet映射**:确保在web.xml(或基于注解的配置)中,Servlet的URL映射正确。例如,如果请求的URL是`/index.action`,那么必须有一个Servlet映射到`*.action`或`/index.action`。2.**检查应用程序部署**:确认应用程序已正确部署,且包含所需Servlet的类文件。可以查看WebSphere控制台的应用程序状态,或者检查部署日志。3.**检查上下文根**:在WebSphere控制台中,检查应用程序的上下文根(ContextRoot)设置。确保在访问应用程序时使用了正确的上下文路径。例如,如果上下文根是`/myapp`,则访问URL应为`http://host:port/myapp/index.action`。4.**检查URL请求**:确认前端请求的URL与服务器端配置一致。注意大小写、路径和扩展名。5.**启用跟踪日志**:如果上述步骤无法解决,可以启用WebSphere的详细跟踪日志,重新访问以获取更详细的错误信息。跟踪日志可能会显示为什么Servlet映射失败。6.**参考类似错误的解决方案**:如引用[2]所述,尝试添加或修改Web容器的定制属性。特别是,可以尝试添加:-com.ibm.ws.webcontainer.alwaysforward=true-com.ibm.ws.webcontainer.invokefilterscompatibility=true这些属性可以改变Web容器处理请求的方式,有时能解决映射问题。7.**清理缓存**:WebSphere有时会因为缓存而出现配置问题。尝试重启应用服务器,或者清除WebSphere的临时文件和缓存。8.**检查类加载顺序**:确保应用程序的类加载顺序设置正确(通常为“父类最后”),避免类加载冲突导致Servlet类无法加载。由于用户没有提供具体的应用配置细节,以上步骤需要根据实际情况逐一排查。§§相关问题§§1.如何检查WebSphere中已部署应用的Servlet映射?2.WebSphere中如何修改Web容器的定制属性?3.如何启用WebSphere的详细跟踪日志?4.类加载顺序如何影响Servlet的加载?5.除了SRVE0295E,WebSphere常见的Servlet相关错误有哪些?</think>### 错误代码 SRVE0295E 解析 **SRVE0295E 错误本质** 这是 IBM WebSphere Application Server 的特定错误代码,表示 **Servlet 未找到**(Servlet Not Found)。当 Web 容器无法匹配请求 URL 到已注册的 Servlet 时触发,属于 HTTP 404 错误的子类型。核心问题在于服务器无法定位处理请求的 Servlet 类[^1][^2]。 --- ### 常见原因与解决方案 #### 1. **Servlet 配置错误**(最高频原因) - **问题**:`web.xml` 中 `<servlet-mapping>` 配置缺失或路径不匹配 - **解决**: ```xml <!-- 示例:检查 URL 模式是否匹配请求路径 --> <servlet-mapping> <servlet-name>YourServlet</servlet-name> <url-pattern>/api/*</url-pattern> <!-- 需与实际请求路径一致 --> </servlet-mapping> ``` - 验证 `web.xml` 或注解式配置(如 `@WebServlet`)的路径是否包含请求的扩展名(如 `.action`) #### 2. **WebSphere 容器兼容性问题** - **问题**:WebSphere 对 Servlet 路径的严格处理导致映射失效 - **解决**:添加容器定制属性[^2][^3] ```properties com.ibm.ws.webcontainer.invokefilterscompatibility = true com.ibm.ws.webcontainer.mapFiltersToAsterisk = true com.ibm.ws.webcontainer.removetrailingservletpathslash = true ``` - **配置路径**:控制台 → Servers → Server1 → Web Container Settings → Web Container → Custom Properties #### 3. **部署文件缺失** - **问题**:WAR 包中缺少 Servlet 类文件或配置文件 - **解决**: - 检查构建过程是否包含所有 `*.class` 文件 - 使用命令解压 WAR 验证: ```bash jar -tvf your_app.war | grep YourServlet.class ``` #### 4. **上下文根(Context Root)冲突** - **问题**:应用上下文路径与请求 URL 不匹配 - **解决**: - 在 WebSphere 控制台确认部署应用的上下文根: `Applications → Application Types → WebSphere enterprise applications → Your App → Context Root` - 访问 URL 需包含完整路径: `http://host:port/context_root/your_path.action` --- ### 排查流程 1. **检查请求完整性** - 确保 URL 包含应用上下文根(如 `/myapp/login.action` 而非直接 `/login.action`) 2. **验证 `web.xml` 映射** - 对比 `<url-pattern>` 与实际请求路径(注意大小写敏感) 3. **启用 WebSphere 跟踪日志** ```properties com.ibm.ws.webcontainer.*=all ``` 4. **清理服务器缓存** - 重启前删除 `temp` 和 `tranlog` 目录(路径如 `was_profile/temp`) > **关键提示**:在 WebSphere 8.5+ 版本中,`com.ibm.ws.webcontainer.mapFiltersToAsterisk=true` 对解决扩展名映射问题尤为关键[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值