【问题标题】:How to write web application initialization code in rest service?如何在 rest 服务中编写 web 应用程序初始化代码?
【发布时间】:2014-10-31 23:52:25
【问题描述】:

您好,我在 java 中使用带有 JAX-RS 的 Rest 服务。我想要一段在应用程序启动时只执行一次的代码。不应在每个请求上执行该代码。我该怎么做?

@Path("/xyz")
class RestService{
//do anything here will be executed on each request.
}

我正在使用 tomcat 服务器。任何帮助将不胜感激。

【问题讨论】:

    标签: java rest tomcat jakarta-ee jax-rs


    【解决方案1】:

    这是上下文侦听器的确切用例。请参阅this article 以获取 servlet 上下文侦听器的一个很好的示例。本文展示了如何定义您的侦听器以及如何将其连接到您的 Web 应用程序中。

    【讨论】:

    • 我点击了那个链接,但遇到了问题。我正在使用球衣,所以我该如何导入 import import javax.servlet.ServletContextEvent;导入 javax.servlet.ServletContextListener;这些接口。因为它给出了我无法导入 ServletContextListener 接口的错误。那里不存在。
    【解决方案2】:

    您可以编写以下类来注册您的资源。在您的类的构造函数中,您可以调用任何您想要的初始化代码,并将该内容传递给您注册的每个资源的构造函数。

    如果您希望每个资源的初始化代码都不同,那么您可以在资源的构造函数中执行此操作。在下面的示例中,我正在初始化 Hibernate 配置并将其传递给资源

    @ApplicationPath("/")
    public class AppNameApplication extends Application{
    
    private Set<Object> singletons=new HashSet<Object>();
    private Set<Class<?>> empty=new HashSet<Class<?>>();
    private final SessionFactory sessionFactory;
    
    public AppNameApplication(){
    
        try{
            Configuration configuration=new Configuration();
            configuration.configure("hibernate.cfg.xml");
            ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build();
            this.sessionFactory=configuration.buildSessionFactory(serviceRegistry);
    
        }
        catch(Throwable ex){
            System.err.println("Initial SessionFactory creation failed."+ ex);
            throw new ExceptionInInitializerError(ex);
        }
    
        singletons.add(new Resource1(sessionFactory));
        singletons.add(new Resource2(sessionFactory));
        singletons.add(new Resource3(sessionFactory));
    
    }
    
    @Override
    public Set<Class<?>> getClasses(){
        return empty;
    }
    
    @Override
    public Set<Object> getSingletons(){
        return singletons;
    }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-09-07
      • 1970-01-01
      • 2011-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-03
      • 2022-07-14
      • 1970-01-01
      相关资源
      最近更新 更多