我是使用 Servlet 的新手,所以如果我使用了不正确的术语,请原谅我。我在 JSF Bean 类“检测器”中有一个名为“Provider”的对象,它需要实例化一次,然后可以用于所有其他请求。我做了一些搜索,发现ServletContextListener接口似乎可以满足我的需求。我已经在我的 web.xml 文件中提到了它,如下所示:
<listener>
<listener-class>
p1.ContextListener
</listener-class>
</listener>
这个类看起来像这样:
package p1;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class ContextListener implements ServletContextListener{
@Override
public void contextInitialized(ServletContextEvent sce) {
Detector.startProvider();
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
Provider.dispose();
}
}
这是我的检测器类:
package p1;
import javax.faces.bean.ManagedBean;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
@ManagedBean
public class Detector{
private static Provider p;
FacesContext context;
String userAgent;
public Detector() {
context = FacesContext.getCurrentInstance();
}
public String getValue() {
return p.getValue();
}
public String getUserAgent() {
return ((HttpServletRequest) context.getExternalContext().getRequest()).getHeader("User-Agent");
}
public static void startProvider(){
p = Creater.create();
}
}
我的代码一切正常,但对我来说似乎正确的唯一方法是将提供者对象作为静态对象,但这在用于不同请求的 Bean 中似乎是个坏主意。我的问题是将提供者对象作为静态对象是否正确?