0

我正在使用 Eclipse Helios 对在 Tomcat 5.5 上运行的 JSP 和 POJO 进行编程。我正在尝试使用 org.apache.catalina.connector.Response 类,如下所示:

导入 org.apache.catalina.connector.*;...响应resp =(响应)r;

其中 r 是 HttpServletResponse 的一个实例。Eclipse 没有给出任何警告,并且项目编译良好。但是,当我浏览到包含此代码的页面时,我收到以下错误:

java.lang.ClassNotFoundException:org.apache.catalina.connector.Response

知道出了什么问题吗?

我也尝试过这种方式,结果相同。

org.apache.catalina.connector.Response resp = (org.apache.catalina.connector.Response) r;

谢谢,

伊恩

4

3 回答 3

1

显然,Tomcat 的设计者并不认为让 webapps 访问其内部类是一个好主意。这里有几个可能的原因:

  • 它使您的代码依赖于 Tomcat。
  • 面对内部细节的变化,它会让你的代码变得脆弱;即它取决于Tomcat 版本。
  • 您的 webapp 上下文中的 Tomcat 堆栈或其他东西可能会做一些事情,这意味着您的 Response 对象是一个包装器,而不是您期望的类。

要更改使您的代码“工作”,您可能需要修改 Tomcat JAR 文件......这将使其更不便携。有关可能帮助您割断自己喉咙的更多信息,请参阅此处。请注意,这是 Tomcat 5.5 特有的……与 Tomcat 6.0 版本的页面不同。


我想将其转换为 org.apache.catalina.connector.Response 的原因是在将 HTTP 响应标头发送到客户端之前读取它们中的内容。

我懂了。好吧,也许您应该实施自定义 Valve。(这是 Tomcat 特有的。)或者更好的是,看看现有的 Valve 实现是否可以为您完成这项工作。

于 2011-03-07T03:56:34.650 回答
1

ClassNotFoundException 表示类在编译时可用,但在运行时不可用。因此,在源代码中导入它的方式没有区别。

我没有检查过,但很有可能 Tomcat 不允许 Web 应用程序访问其内部类。我没有检查的原因是我知道即使我能做到,那也是个坏主意。您应该对 API(在本例中为 javax.servlet.* 下的内容)而不是实现进行编码。

于 2011-03-07T03:38:58.617 回答
0

我不认为你可以使用那个类。我不确定您要做什么,但是使用 HttpServletResponse ,您应该一切顺利。

于 2011-03-07T03:32:54.907 回答