繁星淼淼
2019-06-04 16:23:34
使用特殊的自動啟動servlet在啟動時初始化并共享應用程序數據我需要獲得一些配置,并連接到某個地方的外部資源/對象/系統,并將其存儲在應用程序范圍內。我可以看到設置應用程序的兩種方法:覆蓋init()在現有的servlet和必需的代碼中,并將所有構造的對象保存在同一個servlet中。具有某種初始化servlet,并使用其init()去做這項工作。然后將創建的對象存儲在ServletContext與我的其他servlet共享它。以上哪種方法更好?是否有更好的方法在servlet之間共享對象?直接給他們打電話嗎.?
1 回答

一只斗牛犬
TA貢獻1784條經驗 獲得超2個贊
CDI/JSF/EJB不可用?使用 ServletContextListener
@WebListenerpublic class Config implements ServletContextListener { public void contextInitialized(ServletContextEvent event) { // Do stuff during webapp's startup. } public void contextDestroyed(ServletContextEvent event) { // Do stuff during webapp's shutdown. }}
@WebListener
/WEB-INF/web.xml
<listener> <listener-class>com.example.Config</listener-class></listener>
ServletContext#setAttribute()
#getAttribute()
.
public void contextInitialized(ServletContextEvent event) { event.getServletContext().setAttribute("config", this); // ... }
protected void doGet(HttpServletRequest request, HttpServletResponse response) { Config config = (Config) getServletContext().getAttribute("config"); // ... }
${config}
有CDI嗎?使用 @Observes
在……上面 ApplicationScoped.class
import javax.enterprise.context.ApplicationScoped;@ApplicationScopedpublic class Config { public void init(@Observes @Initialized(ApplicationScoped.class) ServletContext context) { // Do stuff during webapp's startup. } public void destroy(@Observes @Destroyed(ApplicationScoped.class) ServletContext context) { // Do stuff during webapp's shutdown. }}
@Inject
@Named
#{config}
JSF可用嗎?使用 @ManagedBean(eager=true)
import javax.faces.bean.ManagedBeanimport javax.faces.bean.ApplicationScoped;@ManagedBean(eager=true)@ApplicationScopedpublic class Config { @PostConstruct public void init() { // Do stuff during webapp's startup. } @PreDestroy public void destroy() { // Do stuff during webapp's shutdown. }}
#{config}
EJB可用嗎?考慮 @Startup
@Singleton
@Startup@Singletonpublic class Config { @PostConstruct public void init() { // Do stuff during webapp's startup. } @PreDestroy public void destroy() { // Do stuff during webapp's shutdown. }}
@EJB
@Singleton
另見:
添加回答
舉報
0/150
提交
取消