繁体   English   中英

如何将JSF与自定义servlet集成?

[英]How to integrate JSF with custom servlets?

我刚刚开始使用JavaServer Faces,它看起来非常有吸引力。 但是,我想在与JSF相同的Web应用程序中使用自己的servlet。

这可能是非常明显的,但是将JSF与“普通”基于servlet的应用程序集成的最佳实践是什么? 这将包括从servlet访问JSF数据(读取和写入 )。

如果您的servlet写得很好,那么它们应该已经没有任何业务逻辑,而只是纯粹的请求/响应控制/预处理/后处理逻辑。 业务逻辑应该已经放在独立的类似javabean的域/模型类中。 数据库逻辑应该已经放在独立的DAO类中。 等等。 您可以在JSF中重用它们。

也就是说,知道JSF(在Servlet API上运行时 - 常见情况)管理请求范围bean作为HttpServletRequest属性,会话范围bean作为HttpSession属性,应用程序范围bean作为属性ServletContext 知道所有这些请求,会话和应用程序属性都可以通过ExternalContext#getRequestMap()ExternalContext#getRequestMap() #getSessionMap()#getApplicationMap()访问也可能是一件好事。 您现在应该意识到,您可以从servlet内部以通常的方式访问它们。

在任何情况下,当技术需要访问ServletFilterFacesContext ,请立即停止编码并根据上述事实重新考虑您的方法。 不应该在新的托管bean中做得更好吗? 或者也许是PhaseListener

您不必将servlet与JSF集成。 这与JSF的本质相反,后者是“基于组件”而不是“基于行为”。

JSF具有托管bean,当按下按钮时,其方法被调用。 您同时拥有请求和响应(使用FacesContext.getCurrentContext().getExternalContext() ),但实际上并不需要它们 - 所有数据都由JSF在托管bean的字段中自动填充。

如果您希望servlet不与JSF集成但在同一个应用程序中工作,那么您只需将它们映射到一个不与JSF servlet的url冲突的url。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM