سؤال

وأنا حول اللعب مع JAX-RS، نشر على القط. انها في الاساس:

@Path("/hello")
@Produces({"text/plain"})
public class Hellohandler {

    @GET
    public String hello() {
        return "Hello World";
    }

}

هل هناك أي طريقة يمكنني الحصول على عقد من ServletContext داخل بلدي الموارد JAX-RS؟

هل كانت مفيدة؟

المحلول

وعلاوة على ذلك، قد @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 . يمكنك استخدام أي اسم الأسلوب الذي تريد طالما كنت تتبع الفول جافا القياسية تسمية نمط لواضعي، <ط> setXXX الفراغ (فو فو) واستخدام الشرحcontext.

والسياق بريمج متاح أيضا عند تنفيذ ServletContextListener. وهذا يجعل من السهل لتحميل المعلمات مثل سلسلة الاتصال عند بدء التشغيل. يمكنك تحديد الطبقة المستمع في web.xml الذي يحمل لك ServletContextListener عند بدء التشغيل من تطبيق الويب الخاص بك.

داخل ملف web.xml، إضافة العلامات <listener>and <context-param>. يحدد <listener> الفئة التي تسمى عند بدء التشغيل. وتعرف علامة <context-param> المعلمة السياق ما هو متاح في تطبيق الويب الخاص بك.

والأولى، وتشمل العلامات <listener>and <context-param> في ملف web.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
}

ويمكنك الآن اختيار أي متغير ثابت لتعيين المعلمة كنت قد قرأت. هذا يسمح لك لقراءة المعلمة مرة واحدة عند بدء التشغيل، وإعادة استخدام الكثير من الوقت من خلال المتغير الثابت التي تقوم بتعيينها ل.

ومجرد استخدام حقن الموارد مثل هذا،

@Resource ServletContext servletContext;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top