我正在研究JSF(v1.2)应用程序。在我的应用程序中,我需要一个可以为任何资源(PDF,图像,Excel等)提供服务的通用servlet。我的想法是要求调用者发送所需的信息,以便我可以使用一些配置找出正确的委托者类。
此委托人类将负责提供正确的资源。
例如,这是请求网址
http://example.com/servlet?delegatorid=abcd
我的Servlet代码是这样的。
protected void doGet(HttpServletRequest request, HttpServletResponse response){
String delegatorID=request.getParameter("delegatorid");
//Get the configuration from Configuration table
configuration=getConfiguration(delegatorID);
//invoke the method of the delegator class based on this configuration
Object result=invokeMethod(configuration);
//write the response to the stream
}
我的问题是在JSF项目中执行此操作的最佳方法是什么?
你能告诉我你对此的想法吗?
答案 0 :(得分:7)
FacesContext
(以及ExternalContext
)只是facade而非HttpServletRequest
,HttpServletResponse
,HttpSession
,ServletContext
, etcetara以及一些简单的vanilla servlet中根本不需要的JSF细节。 ExternalContext#getSessionMap()
只不过是HttpSession#get/setAttribute()
的抽象映射。
在一个简单的vanilla servlet中,会话只能由request.getSession()
提供,应用程序由getServletContext()
以常规方式提供。另请参阅此相关问题:Get JSF managed bean by name in any Servlet related class。
您还可以将需要由JSF和Servlet共享的代码重构为一个实用程序方法,该方法对javax.faces.*
和javax.servlet.*
类没有任何依赖关系(或者最多只有{{1}最后让调用者分别通过必要的信息。