อะไรคือความแตกต่างระหว่าง<init-param>
และ<context-param>
!?
อะไรคือความแตกต่างระหว่าง<init-param>
และ<context-param>
!?
คำตอบ:
<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");
<init-param>
: แต่ไม่สำหรับการตั้งค่าพารามิเตอร์บริบทServletContext::setInitParameter(String name, String value)
<context-param>
พิจารณาคำจำกัดความด้านล่างใน 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”);
<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>
<init-param>
จะถูกใช้หากคุณต้องการเริ่มต้นพารามิเตอร์สำหรับ servlet เฉพาะ เมื่อมีการร้องขอมาเซิร์ฟเล็ตแรกของinit
วิธีการที่จะถูกเรียกแล้วในขณะที่ถ้าคุณต้องการที่จะเริ่มต้นตัวแปรบางอย่างสำหรับโปรแกรมทั้งหมดที่คุณจะต้องใช้doGet/doPost
<context-param>
ทุก servlet จะสามารถเข้าถึงตัวแปรบริบทได้
อะไรคือความแตกต่างระหว่าง
<init-param>
และ<context-param>
!?
servlet เดียวกับหลายservlet
คำตอบอื่น ๆ ให้รายละเอียด แต่นี่คือบทสรุป:
เว็บแอปซึ่งก็คือ "บริบท" ประกอบด้วยหนึ่งรายการหรือหลายรายการ
<init-param>
กำหนดค่าที่มีให้กับservlet เฉพาะรายการเดียวภายในบริบท<context-param>
กำหนดค่าที่มีให้สำหรับ servlets ทั้งหมดภายในบริบท