2015-02-08 14 views
51

Sự khác nhau giữa <init-param><context-param>!init-param và context-param

+0

@RC. Đó là câu hỏi không có nơi thảo luận về sự khác biệt giữa hai params .. Nó chỉ là về tài sản nạp trong hai bối cảnh .. –

+0

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

Trả lời

76

<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 đó trong một trong số chúng.

Nếu bạn muốn lưu trữ dữ liệu cụ thể mà chỉ giới hạn trong một phạm vi đặc biệt servlet, sau đó bạn có thể sử dụng <init-param> .Anything bạn khai báo bên trong <init-param> là chỉ có thể chỉ cho rằng servlet.The đặc biệt init-param là được khai báo bên trong thẻ <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> 

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

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

Nếu bạn muốn lưu trữ dữ liệu đó được 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 thức ngữ cảnh ứng dụng. Để biết thêm thông tin về cách sử dụng <context-param> VS ServletContext.setAttribute(), hãy xem số question này. context-param được khai báo theo thẻ web-app. Bạn có thể khai báo và truy cập vào <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 hoặc trong một JSP hoặc Servlet

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

<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 servlet trước tiên, phương thức init của nó sẽ được gọi là doGet/doPost trong 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 phải sử dụng <context-param>. Mỗi servlet sẽ có quyền truy cập vào biến ngữ cảnh.

5

xem xét định nghĩa dưới đây 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 yếu tố servlet. Điều này có nghĩa là nó chỉ có sẵn cho servlet đang được khai báo chứ không phải 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 nói rằng một JSP cần phải được truyền một cách rõ ràng đến JSP. Ví dụ, được chuyển thành request.setAttribute(). Điều này là không hiệu quả và khó mã hóa.

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

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

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

param bối cảnh này là dành cho tất cả các bộ phận của ứng dụng web và nó có thể được lấy từ đối tượng Context. Ví dụ, getServletContext(). GetInitParameter (“dbname”);

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

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

Tôi đã khởi PersistenceContext.xml của tôi trong vòng <context-param> bởi vì tất cả các servlet của tôi sẽ được tương tác với cơ sở dữ liệu trong khung 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 các mã nói trên, tôi cấu hình jersey và ApplicationContext.xml chỉ đến lớp còn lại. Đối với cùng tôi đang sử dụng </init-param>