可以从Java类调用servlet吗?

时间:2010-06-10 14:01:16

标签: java class servlets java-ee

我正在使用IBM WebSphere作为我的servlet容器。我的应用程序有几个servlet和Java类。我的目的是直接从Java类中调用其中一个servlet。做了一些研究我发现可以使用RequestDispatcher接口来实现这一点。但是有必要将对象ServletRequest和ServletResponse作为参数传递给方法forward()。有一些方法可以安全地绕过这个“很好”吗? “很好”,我的意思是保留良好的编程和设计模式。

3 个答案:

答案 0 :(得分:5)

完美地做到这一点的唯一方法是将所需的逻辑与servlet分离。此要求表明servlet与业务/域代码逻辑过于紧密耦合,显然需要在Web应用程序上下文之外使用。

将原始servlet代码重构为可重用的Java类和方法(反过来使用javax.servlet包中的任何内容),以便最终导入并从两者 servlet类和“普通的vanilla”Java类中调用它。

答案 1 :(得分:2)

您可以编写一个过滤器,将当前请求和响应存储在静态ThreadLocal中,以便您以后可以在同一请求中使用它们。然后,您可以实现自己的静态方法forward,使用它们并分派到另一个页面。

这在某种程度上是JSF采用的方法,可以随时访问FacesContext.getCurrentInstance

但我不认为这是一个优雅的设计。而是尝试遵循@BalusC建议并重构您的逻辑。

答案 2 :(得分:2)

这将有助于获得更多背景信息,说明您为什么要这样做。我假设你想在servlet中调用一些业务逻辑。这表明应用程序设计不佳。

您熟悉MVC architecture吗?如果您的“模型”代码松散耦合,您可以直接调用它。