Получить ServletContext в ресурсе JAX-RS
Я играю с JAX-RS, развертывая на Tomcat. Это в основном:
@Path("/hello")
@Produces({"text/plain"})
public class Hellohandler {
@GET
public String hello() {
return "Hello World";
}
}
есть ли способ я могу достать ServletContext в пределах моего ресурса JAX-RS?
5 ответов:
кроме того,
@Resourceаннотация может не работать. Попробуйте это@javax.ws.rs.core.Context ServletContext context;инъекция не происходит, пока вы не нажмете на метод обслуживания
public class MyService { @Context ServletContext context; public MyService() { print("Constructor " + context); // null here } @GET @Path("/thing") { print("in wizard service " + context); // available here
Как отмечали другие, servletContext может быть введен на уровне поля. Он также может быть введен на уровне метода:
public static class MyService { private ServletContext context; private int minFoo; public MyService() { System.out.println("Constructor " + context); // null here } @Context public void setServletContext(ServletContext context) { System.out.println("servlet context set here"); this.context = context; minFoo = Integer.parseInt(servletContext.getInitParameter("minFoo")).intValue(); } @GET @Path("/thing") public void foo() { System.out.println("in wizard service " + context); // available here System.out.println("minFoo " + minFoo); } }Это позволит вам выполнить дополнительную инициализацию с доступным servletContext.
очевидное замечание - вы не должны использовать имя метода setServletContext. Вы можете использовать любое имя метода, которое вы хотите, пока вы следуете стандартному шаблону именования Java bean для сеттеров, void setXXX(Foo фу) и используйте аннотацию @Context.
контекст сервлета также доступен при реализации ServletContextListener. Это позволяет легко загружать такие параметры, как строка подключения при запуске. Вы можете определить класс слушателя в интернете.xml, который загружает вам ServletContextListener при запуске вашего веб-приложения.
внутри сети.xml-файл, добавьте
<listener>и<context-param>теги. Элемент<listener>указывает класс, который вызывается при запуске. Элемент<context-param>тег определяет параметр контекста, который доступен в web-приложение.во-первых, включить
<listener>и<context-param>теги в интернете.xml-файл:<web-app> <!-- ... --> <listener> <listener-class>com.your.package.ServletContextClass</listener-class> </listener> <!-- Init parameters for db connection --> <context-param> <param-name>your_param</param-name> <param-value>your_param_value</param-value> </context-param> <!-- ... --> </web-app>Теперь создайте класс контекста сервлета следующим образом.
public class ServletContextClass implements ServletContextListener { public void contextInitialized(ServletContextEvent arg0) { //use the ServletContextEvent argument to access the //parameter from the context-param String my_param = arg0.getServletContext().getInitParameter("your_param"); }//end contextInitialized method @Override public void contextDestroyed(ServletContextEvent arg0) { }//end constextDestroyed method }теперь вы можете выбрать, какой статической переменной назначить параметр, который вы прочитали. Это позволяет считывать параметр один раз при запуске и многократно использовать его через статическую переменную, которой он назначен.
Comments