init-param และ context-param


88

อะไรคือความแตกต่างระหว่าง<init-param>และ<context-param>!?


@RC. คำถามนั้นไม่มีที่ไหนพูดถึงความแตกต่างระหว่างพารามิเตอร์ทั้งสองนี้ .. เป็นเพียงเรื่องคุณสมบัติที่โหลดในสองบริบท ..
Rohit Jain

ฉันหยุดที่ชื่อเรื่องความเลวของฉัน

คำตอบ:


122

<init-param>และ<context-param>เป็นพารามิเตอร์คงที่ซึ่งเก็บไว้ในไฟล์ web.xml หากคุณมีข้อมูลใด ๆ ที่ไม่เปลี่ยนแปลงบ่อยคุณสามารถจัดเก็บไว้ในหนึ่งในนั้น

หากคุณต้องการจัดเก็บข้อมูลเฉพาะซึ่งถูก จำกัด ไว้ในขอบเขต servlet เฉพาะคุณสามารถ<init-param>ใช้ได้ทุกสิ่งที่คุณประกาศภายใน<init-param>จะสามารถเข้าถึงได้สำหรับเฉพาะ servletนั้นเท่านั้นinit-paramจะถูกประกาศภายใน<servlet>แท็ก

<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>

และคุณสามารถเข้าถึงพารามิเตอร์เหล่านั้นใน servlet ได้ดังนี้:

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

หากคุณต้องการจัดเก็บข้อมูลซึ่งเป็นเรื่องปกติสำหรับแอปพลิเคชันทั้งหมดและหากไม่มีการเปลี่ยนแปลงบ่อยคุณสามารถใช้<context-param>แทนservletContext.setAttribute()วิธีการของบริบทแอปพลิเคชันได้ สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการใช้<context-param>VS โปรดServletContext.setAttribute()ดูคำถามนี้ บริบทพระรามweb-appมีการประกาศภายใต้แท็ก คุณสามารถประกาศและเข้าถึงสิ่ง<context-param>ต่อไปนี้

<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>

การใช้งานในแอปพลิเคชันทั้งใน JSP หรือ Servlet

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

1
วิธีการตั้งค่าพารามิเตอร์บริบทโดยทางโปรแกรม?
Gaurav

2
@gaurav ที่น่าสนใจฉันสามารถหาวิธีการ<init-param>: แต่ไม่สำหรับการตั้งค่าพารามิเตอร์บริบทServletContext::setInitParameter(String name, String value) <context-param>
Basil Bourque

8

พิจารณาคำจำกัดความด้านล่างใน 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>

คุณจะเห็นว่า init-param ถูกกำหนดไว้ภายในองค์ประกอบ servlet ซึ่งหมายความว่าสามารถใช้ได้เฉพาะกับ servlet ภายใต้การประกาศเท่านั้นและไม่สามารถใช้ได้กับส่วนอื่น ๆ ของเว็บแอปพลิเคชัน หากคุณต้องการให้พารามิเตอร์นี้พร้อมใช้งานในส่วนอื่น ๆ ของแอ็พพลิเคชันให้บอกว่า JSP จำเป็นต้องส่งผ่านไปยัง JSP อย่างชัดเจน ตัวอย่างเช่นส่งผ่านเป็น request.setAttribute () สิ่งนี้ไม่มีประสิทธิภาพสูงและยากต่อการเขียนโค้ด

ดังนั้นหากคุณต้องการเข้าถึงค่าส่วนกลางจากที่ใดก็ได้ภายในแอปพลิเคชันโดยไม่ต้องส่งผ่านค่าเหล่านั้นอย่างชัดเจนคุณต้องใช้พารามิเตอร์ Context Init

พิจารณาคำจำกัดความต่อไปนี้ใน web.xml

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

พารามิเตอร์บริบทนี้พร้อมใช้งานสำหรับทุกส่วนของเว็บแอ็พพลิเคชันและสามารถเรียกดูได้จากอ็อบเจ็กต์บริบท ตัวอย่างเช่น getServletContext (). getInitParameter (“ dbname”);

จาก JSP คุณสามารถเข้าถึงพารามิเตอร์บริบทโดยใช้อ็อบเจ็กต์นัยของแอ็พพลิเคชัน ตัวอย่างเช่น application.getAttribute (“ dbname”);


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

ฉันได้เริ่มต้นPersistenceContext.xmlภายในของฉันแล้ว<context-param>เนื่องจาก servlets ทั้งหมดของฉันจะโต้ตอบกับฐานข้อมูลในกรอบ MVC

ฮาเวอร์เวอร์

<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>

ในรหัสข้างต้นฉันกำลังกำหนดค่าเสื้อและApplicationContext.xmlชั้นที่เหลือเท่านั้น สำหรับสิ่งเดียวกันฉันใช้</init-param>


5

<init-param>จะถูกใช้หากคุณต้องการเริ่มต้นพารามิเตอร์สำหรับ servlet เฉพาะ เมื่อมีการร้องขอมาเซิร์ฟเล็ตแรกของinitวิธีการที่จะถูกเรียกแล้วในขณะที่ถ้าคุณต้องการที่จะเริ่มต้นตัวแปรบางอย่างสำหรับโปรแกรมทั้งหมดที่คุณจะต้องใช้doGet/doPost <context-param>ทุก servlet จะสามารถเข้าถึงตัวแปรบริบทได้


4

อะไรคือความแตกต่างระหว่าง<init-param>และ<context-param>!?

servlet เดียวกับหลายservlet

คำตอบอื่น ๆ ให้รายละเอียด แต่นี่คือบทสรุป:

เว็บแอปซึ่งก็คือ "บริบท" ประกอบด้วยหนึ่งรายการหรือหลายรายการ

  • <init-param>กำหนดค่าที่มีให้กับservlet เฉพาะรายการเดียวภายในบริบท
  • <context-param>กำหนดค่าที่มีให้สำหรับ servlets ทั้งหมดภายในบริบท
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.