我是使用Servlets的新手,所以请原谅我,如果我使用不正确的术语。我在JSF Bean Class“Detector”中有一个名为“Provider”的对象,它需要实例化一次,然后可以用于所有其他请求。我做了一些搜索,发现接口似乎是我所需要的。香港专业教育学院在我的web.xml文件中提到它像这样:在Bean中仅实例化一次值
<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();
}
}
我的所有代码工作,但唯一对我来说合适的方法是将Provider对象设置为静态,但在Bean中这似乎是一个坏主意,它将用于不同的请求。我的问题是将提供者对象设置为静态是否正确?
你的问题很混乱。你没有使用servlet。您正在使用JSF支持bean。至于具体的问题,只要具体的功能需求不清楚,就不能回答。我们不知道“Detector”,“Provider”和“Creater”应该做什么。但是,通常情况下,在企业多线程应用程序中,使用'static'这种方式是不被接受的。你应该宁愿“创造一个”。 – BalusC