init-param dan konteks-param


88

Apa perbedaan antara <init-param>dan <context-param>!?


@Rumah Pertanyaan itu tidak di mana membahas perbedaan antara kedua parameter tersebut .. Ini hanya tentang properti yang dimuat dalam dua konteks ..
Rohit Jain

Aku berhenti pada judulnya, kesalahanku.

Jawaban:


122

<init-param>dan <context-param>merupakan parameter statis yang disimpan dalam file web.xml. Jika Anda memiliki data yang tidak sering berubah, Anda dapat menyimpannya di salah satunya.

Jika Anda ingin menyimpan data tertentu yang dibatasi pada lingkup servlet tertentu , maka Anda dapat menggunakan. <init-param>Apa pun yang Anda deklarasikan di dalamnya <init-param>hanya dapat diakses hanya untuk servlet tersebut. Init-param dideklarasikan di dalam <servlet>tag.

<servlet>
     <display-name>HelloWorldServlet</display-name>
     <servlet-name>HelloWorldServlet</servlet-name>
     <init-param>
         <param-name>Greetings</param-name>
         <param-value>Hello</param-value>
     </init-param>
</servlet>

dan Anda dapat mengakses parameter tersebut di servlet sebagai berikut:

out.println(getInitParameter("Greetings"));

Jika Anda ingin menyimpan data yang umum untuk seluruh aplikasi dan jika tidak sering berubah Anda dapat menggunakan <context-param>bukannya servletContext.setAttribute()metode konteks aplikasi. Untuk informasi lebih lanjut tentang penggunaan <context-param>VS, ServletContext.setAttribute()lihat pertanyaan ini . konteks-param dideklarasikan di bawah tag web-app. Anda dapat mendeklarasikan dan mengakses <context-param>sebagai berikut

<web-app>
    <context-param>
        <param-name>Country</param-name>
        <param-value>India</param-value>
    </context-param>
    <context-param>
        <param-name>Age</param-name>
        <param-value>24</param-value>
    </context-param>
</web-app>

Penggunaan dalam aplikasi baik di JSP atau Servlet

getServletContext().getInitParameter("Country");
getServletContext().getInitParameter("Age");

1
bagaimana mengatur parameter konteks secara terprogram?
Gaurav

2
@ Gaurav Menarik, saya dapat menemukan metode untuk <init-param>: ServletContext::setInitParameter(String name, String value)tetapi bukan metode untuk menyetel parameter konteks <context-param>.
Basil Bourque

8

Pertimbangkan definisi di bawah ini di web.xml

<servlet>
    <servlet-name>HelloWorld</servlet-name>
    <servlet-class>TestServlet</servlet-class>
    <init-param>
        <param-name>myprop</param-name>
        <param-value>value</param-value>
    </init-param>
</servlet>

Anda dapat melihat bahwa init-param didefinisikan di dalam elemen servlet. Ini berarti ini hanya tersedia untuk servlet di bawah deklarasi dan tidak untuk bagian lain dari aplikasi web. Jika Anda ingin parameter ini tersedia untuk bagian lain dari aplikasi, katakanlah JSP ini perlu diteruskan secara eksplisit ke JSP. Misalnya diteruskan sebagai request.setAttribute (). Ini sangat tidak efisien dan sulit untuk dikodekan.

Jadi jika Anda ingin mendapatkan akses ke nilai global dari mana saja dalam aplikasi tanpa secara eksplisit meneruskan nilai tersebut, Anda perlu menggunakan parameter Context Init.

Pertimbangkan definisi berikut di web.xml

 <web-app>
      <context-param>
           <param-name>myprop</param-name>
           <param-value>value</param-value>
      </context-param>
 </web-app>

Parameter konteks ini tersedia untuk semua bagian aplikasi web dan dapat diambil dari objek Konteks. Misalnya, getServletContext (). GetInitParameter (“dbname”);

Dari JSP Anda dapat mengakses parameter konteks menggunakan objek aplikasi implisit. Misalnya, application.getAttribute ("dbname");


6
<context-param> 
    <param-name>contextConfigLocation</param-name>
    <param-value>
        classpath*:/META-INF/PersistenceContext.xml
    </param-value>
</context-param>

Saya telah menginisialisasi PersistenceContext.xmldalam saya <context-param>karena semua servlet saya akan berinteraksi dengan database dalam kerangka MVC.

Howerver,

<servlet>
    <servlet-name>jersey-servlet</servlet-name>
    <servlet-class>com.sun.jersey.spi.spring.container.servlet.SpringServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath:ApplicationContext.xml
        </param-value>
    </init-param>
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>com.organisation.project.rest</param-value>
    </init-param>
</servlet>

Dalam kode yang disebutkan di atas, saya mengkonfigurasi jersey dan ApplicationContext.xmlsatu - satunya lapisan istirahat. Untuk hal yang sama saya gunakan</init-param>


5

<init-param>akan digunakan jika Anda ingin menginisialisasi beberapa parameter untuk servlet tertentu. Ketika request datang ke servlet pertama, initmetodenya akan dipanggil kemudian doGet/doPostsedangkan jika Anda ingin menginisialisasi beberapa variabel untuk seluruh aplikasi, Anda perlu menggunakan <context-param>. Setiap servlet akan memiliki akses ke variabel konteks.


4

Apa perbedaan antara <init-param>dan <context-param>!?

Servlet tunggal versus banyak servlet.

Jawaban Lain memberikan detil, tapi berikut ringkasannya:

Aplikasi web, yaitu "konteks", terdiri dari satu atau lebih servlet .

  • <init-param>mendefinisikan nilai yang tersedia untuk satu servlet tertentu dalam suatu konteks.
  • <context-param>mendefinisikan nilai yang tersedia untuk semua servlet dalam suatu konteks.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.