init-param và context-param


86

Sự khác biệt giữa <init-param><context-param>!?


@RC. Câu hỏi đó không có chỗ thảo luận về sự khác biệt giữa hai thông số đó .. Nó chỉ là về các thuộc tính được tải trong hai ngữ cảnh ..
Rohit Jain

Tôi dừng lại ở tiêu đề, cái xấu của tôi.

Câu trả lời:


119

<init-param><context-param>là các tham số tĩnh được lưu trữ trong tệp web.xml. Nếu bạn có bất kỳ dữ liệu nào không thay đổi thường xuyên, bạn có thể lưu trữ dữ liệu đó vào một trong số chúng.

Nếu bạn muốn lưu trữ dữ liệu cụ thể được giới hạn trong một phạm vi servlet cụ thể , thì bạn có thể sử dụng. <init-param>Bất kỳ thứ gì bạn khai báo bên trong <init-param>chỉ có thể truy cập được cho servlet cụ thể đó. Init-param được khai báo bên trong <servlet>thẻ.

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

và bạn có thể truy cập các tham số đó trong servlet như sau:

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

Nếu bạn muốn lưu trữ dữ liệu phổ biến cho toàn bộ ứng dụng và nếu nó không thay đổi thường xuyên, bạn có thể sử dụng <context-param>thay vì servletContext.setAttribute()phương pháp của ngữ cảnh ứng dụng. Để biết thêm thông tin về việc sử dụng <context-param>VS, ServletContext.setAttribute()hãy xem câu hỏi này . context-param được khai báo trong thẻ web-app. Bạn có thể khai báo và truy cập <context-param>như sau

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

Cách sử dụng trong ứng dụng trong JSP hoặc Servlet

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

1
làm thế nào để đặt tham số ngữ cảnh theo lập trình?
Gaurav

2
@gaurav Thật thú vị, tôi có thể tìm thấy một phương thức cho <init-param>: ServletContext::setInitParameter(String name, String value)nhưng không phải một phương thức để đặt tham số ngữ cảnh <context-param>.
Basil Bourque

8

Hãy xem xét định nghĩa bên dưới trong 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>

Bạn có thể thấy rằng init-param được định nghĩa bên trong một phần tử servlet. Điều này có nghĩa là nó chỉ có sẵn cho servlet được khai báo và không có sẵn cho các phần khác của ứng dụng web. Nếu bạn muốn tham số này có sẵn cho các phần khác của ứng dụng, hãy nói một JSP, điều này cần phải được chuyển một cách rõ ràng cho JSP. Ví dụ được truyền dưới dạng request.setAttribute (). Điều này rất kém hiệu quả và khó viết mã.

Vì vậy, nếu bạn muốn có quyền truy cập vào các giá trị toàn cục từ bất kỳ đâu trong ứng dụng mà không cần chuyển các giá trị đó một cách rõ ràng, bạn cần sử dụng các tham số Context Init.

Hãy xem xét định nghĩa sau trong web.xml

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

Tham số ngữ cảnh này có sẵn cho tất cả các phần của ứng dụng web và nó có thể được truy xuất từ ​​đối tượng Ngữ cảnh. Ví dụ, getServletContext (). GetInitParameter (“dbname”);

Từ một JSP, bạn có thể truy cập tham số ngữ cảnh bằng cách sử dụng đối tượng ngầm định của ứng dụng. Ví dụ: application.getAttribute (“dbname”);


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

Tôi đã khởi tạo PersistenceContext.xmlbên trong của mình <context-param>vì tất cả các servlet của tôi sẽ tương tác với cơ sở dữ liệu trong khuôn khổ 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>

trong đoạn mã nói trên, tôi đang định cấu hình jersey và lớp ApplicationContext.xmlduy nhất để nghỉ ngơi. Đối với cùng một tôi đang sử dụng</init-param>


5

<init-param>sẽ được sử dụng nếu bạn muốn khởi tạo một số tham số cho một servlet cụ thể. Khi yêu cầu đến với servlet đầu tiên initphương thức của nó sẽ được gọi sau đó doGet/doPosttrong khi nếu bạn muốn khởi tạo một số biến cho toàn bộ ứng dụng, bạn sẽ cần sử dụng <context-param>. Mọi servlet sẽ có quyền truy cập vào biến ngữ cảnh.


4

Sự khác biệt giữa <init-param><context-param>!?

Servlet đơn so với nhiều servlet.

Các câu trả lời khác cung cấp chi tiết, nhưng đây là bản tóm tắt:

Một ứng dụng web, nghĩa là, một "ngữ cảnh", được tạo thành từ một hoặc nhiều servlet .

  • <init-param>định nghĩa một giá trị có sẵn cho một servlet cụ thể trong một ngữ cảnh.
  • <context-param>xác định một giá trị có sẵn cho tất cả các servlet trong một ngữ cảnh.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.