2012-10-19 203 views
7

我有用JAX-RS實現的REST服務。該Web服務旨在用於測試目的。我的應用程序有一個HashMap,它管理我想要檢索的對象。如何在服務啓動時初始化此HashMap以便HashMap具有一些可以檢索的對象?我試圖在構造函數中將一些對象添加到HashMap中,但服務啓動時HashMap爲空。我使用Jersey的JAX-RS實現並使用web.xml文件配置我的資源。JAX-RS應用程序的初始化

web.xml文件具有以下內容:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> 
<display-name>OPMSimulator</display-name> 

<servlet> 
    <servlet-name>MyServlet</servlet-name> 
    <servlet-class>com.ibm.websphere.jaxrs.server.IBMRestServlet</servlet-class> 
     <init-param> 
      <param-name>javax.ws.rs.Application</param-name> 
    <param-value>com.ibm.opm.mobile.prototype.TestApplication</param-value> 
    </init-param> 
     <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>MyServlet</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 
</web-app> 

我的資源類有以下內容:

public class Test { 

    private static HashMap<Integer, Database> databases; 

    @GET 
    @Produces(MediaType.TEXT_XML) 
    @Path("/database/{id}") 
    public String database(@PathParam("id")String id) { 
     Database database = databases.get(Integer.parseInt(id)); 
     return XMLGenerator.getXML(database); 
    } 
} 
+0

究竟你的意思是什麼初始化? – Javiator

+0

1.您使用的是什麼JAX-RS實現?澤西島,CXF,Resteasy? 2.如何配置JAX-RS資源?你使用'web.xml'還是一些配置類?也許你甚至使用Spring。 – 2012-10-19 07:38:14

+0

我使用Jersey實現,並使用web.xml文件配置我的JAX-RS資源。 – Javiator

回答

9

在你的servlet的構造應該工作(它總是叫調用doGet前和doPost),但除此之外,您可以註冊聽衆來初始化您的所有內容:

import javax.servlet.ServletContextEvent; 
import javax.servlet.ServletContextListener; 
import javax.servlet.annotation.WebListener; 

@WebListener 
public class Manager implements ServletContextListener { 

    public void contextInitialized(ServletContextEvent event) { 
    } 

    public void contextDestroyed(ServletContextEvent event) { 
    } 

} 

如果你不上Servlet 3.0但並不能升級,因此無法使用@WebListener註解,那麼你需要手動註冊在/WEB-INF/web.xml象下面這樣:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"> 
<display-name>projectName</display-name> 
<listener> 
    <listener-class>Manager</listener-class> 
    </listener> 
    ... 
</web-app>