init-param 및 context-param


88

<init-param><context-param>! 의 차이점은 무엇입니까 ?


@RC. 그 질문없는 경우에 나와있는 두 PARAMS의 차이점은 .. 그것은 .. 두 컨텍스트에로드 특성에 대해 단지
Rohit 자이나교

나는 제목에서 멈췄다.

답변:


121

<init-param><context-param>web.xml 파일에 저장됩니다 정적 매개 변수입니다. 자주 변경되지 않는 데이터가 있으면 그중 하나에 저장할 수 있습니다.

특정 서블릿 범위에 한정된 특정 데이터를 저장 하려면을 사용할 수 있습니다. <init-param>내부 선언 <init-param>은 해당 특정 서블릿에 대해서만 액세스 할 수 있습니다. 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>

다음과 같이 서블릿에서 해당 매개 변수에 액세스 할 수 있습니다.

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

전체 응용 프로그램에 공통적 인 데이터를 저장하고 싶고 자주 변경되지 않는 경우 응용 프로그램 컨텍스트 <context-param>servletContext.setAttribute()방법 대신 사용할 수 있습니다 . <context-param>VS 사용에 대한 자세한 내용은 ServletContext.setAttribute()질문을 참조하십시오 . context-param 은 태그 아래에 선언됩니다 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>.
바질 우르 큐

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이 서블릿 요소 내부에 정의되어 있음을 알 수 있습니다. 즉, 선언중인 서블릿에서만 사용할 수 있고 웹 응용 프로그램의 다른 부분에서는 사용할 수 없습니다. 이 매개 변수를 애플리케이션의 다른 부분에서 사용할 수 있도록하려면 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>

이 컨텍스트 매개 변수는 웹 애플리케이션의 모든 부분에서 사용할 수 있으며 Context 객체에서 검색 할 수 있습니다. 예를 들어, 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>

모든 서블릿이 MVC 프레임 워크의 데이터베이스와 상호 작용할 것이기 때문에 내 PersistenceContext.xml내부를 초기화했습니다 <context-param>.

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>

앞서 언급 한 코드에서 저는 저지와 ApplicationContext.xml유일한 휴식 레이어를 구성하고 있습니다. 같은 것을 사용하고 있습니다.</init-param>


5

<init-param>특정 서블릿에 대한 일부 매개 변수를 초기화하려는 경우 사용됩니다. 요청이 서블릿에 먼저 오면 init메서드가 호출 doGet/doPost되고 전체 응용 프로그램에 대한 일부 변수를 초기화하려면을 사용해야 <context-param>합니다. 모든 서블릿은 컨텍스트 변수에 액세스 할 수 있습니다.


4

<init-param><context-param>! 의 차이점은 무엇입니까 ?

단일 서블릿다중 서블릿.

기타 답변은 자세한 내용을 제공하지만 요약은 다음과 같습니다.

웹 앱, 즉 "컨텍스트"는 하나 이상의 서블릿으로 구성 됩니다.

  • <init-param>컨텍스트 내에서 단일 특정 서블릿에 사용할 수있는 값을 정의합니다 .
  • <context-param>컨텍스트 내의 모든 서블릿에 사용할 수있는 값을 정의합니다 .
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.