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