2013-06-26 18 views
8

Tôi đang tạo một ứng dụng web trong Tomcat bằng cách sử dụng áo. Tôi đã không tạo ra một Servlet, tôi chỉ sử dụng ServletContainer jersey và một số lớp tài nguyên.Nhận dữ liệu cấu hình từ web.xml khi sử dụng một bộ ServletContainer

web.xml của tôi:

<?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_2_5.xsd" 
     version="2.5"> 
    <servlet> 
     <servlet-name>Jersey REST Service</servlet-name> 
     <servlet-class> 
      com.sun.jersey.spi.container.servlet.ServletContainer 
     </servlet-class> 
     <init-param> 
      <param-name>com.sun.jersey.config.property.packages</param-name> 
      <param-value>com.mycompany.myproduct.rest</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>Jersey REST Service</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

webapp của tôi cần phải đọc một số giá trị cấu hình. Tôi có ấn tượng rằng cách tốt nhất để làm điều này là với context-Params, như sau:

<web-app> 
    ... 
    <context-param> 
    <description>This is a context parameter example</description> 
    <param-name>ContextParam</param-name> 
    <param-value>ContextParam value</param-value> 
    </context-param> 
</web-app> 

Đây có phải là cách tốt nhất không? Làm thế nào tôi có thể truy cập các tham số ngữ cảnh từ các lớp tài nguyên của tôi?

Dưới đây là một lớp tài nguyên Ví dụ:

@Path("/api/ping") 
public class PingResource { 
    @GET 
    @Produces(MediaType.TEXT_PLAIN) 
    public String helloWorld() { 
     return "pong"; 
    } 
} 

Trả lời

10

Bạn có thể tiêm các ServletContext và tra cứu các thông số từ đó. Một cái gì đó như:

public class PingResource { 

    @Context ServletContext context; 

    public String myServiceMethod() { 
     context.getInitParam("ContextParam"); 
    } 

} 
+0

này có vẻ tốt. Nhưng tôi giả sử nó trả về một param init. Điều gì về một param ngữ cảnh? Tôi không thấy làm thế nào để có được nó từ một ServletContext. – tallseth

+0

Không hoàn toàn ... hãy xem http://stackoverflow.com/questions/2069902/dd-elements-context-param-and-init-param-both-use-the-getinitparameter-me –

+0

Tôi đã thử điều này, nhưng ngữ cảnh là null. – tallseth

4

Dưới đây là ảnh chụp mà làm việc cho tôi :)

// thêm nhập khẩu

import javax.servlet.ServletContext; 
import javax.ws.rs.core.Context; 

// thêm tài sản trong lớp học của bạn

@Context 
ServletContext context; 

// Sử dụng thông số ngữ cảnh trong các phương pháp của bạn

String companyName = this.context.getInitParameter("companyName"); 

// thêm ngữ cảnh cho web.xml

<context-param> 
    <description>Context Parameter Test</description> 
    <param-name>companyName</param-name> 
    <param-value>Test Organization, Incorporated</param-value> 
</context-param> 
Các vấn đề liên quan