[英]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内部以通常的方式访问它们。
在任何情况下,当技术需要访问Servlet
或Filter
的FacesContext
,请立即停止编码并根据上述事实重新考虑您的方法。 不应该在新的托管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.