스터디 모음/Web 스터디

[Web] 서블릿 초기화 매개변수와 컨텍스트 초기화 매개변수

always-dev 2022. 8. 11.
반응형

 

 

 

 

 

개요

 

서블릿 초기화 매개변수와 컨텍스트 초기화 매개변수가 뭔지 아시나요 ?

 

서블릿 초기화 매개변수는 서블릿을 생성하고 초기화할 때 [Init()를 초기화할 때] 서블릿 컨테이너가 전달하는 데이터입니다.

 

예를 들어보겠습니다.

데이터베이스 A, 데이터베이스 B가 있습니다.

10개가 있을 때 서블릿 모두 데이터베이스 A에서 데이터를 꺼내와야 합니다.

다른 웹에서는 데이터베이스 A와 B를 각 2개의 서블릿이 꺼내려고 합니다.

 

이 때

서블릿 초기화 매개변수는 특정 서블릿에서 사용할 정보로 사용하고

컨텍스트 초기화 매개변수는 여러 서블릿에서 공통으로 사용할 정보일 때 사용합니다.

 

그렇다면 데이터베이스 A만을 사용하는 웹에는 컨텍스트 초기화 매개변수를 이용하고

데이터베이스 A, B를 각각 2개의 서블릿에서 사용하는 웹에는 서블릿 초기화 매개변수를 이용하면 됩니다.

 

 

 

 

 

 

서블릿 초기화 매개변수

서블릿 초기화 매개변수를 사용하는 방법은 2가지 있습니다.

  1. DD파일 설정 (web.xml)
  2. 애노테이션 설정

코드 예시는 JDBC를 이용한 데이터베이스 접근 예시입니다.

 

 

 

 

1. DD 파일

먼저 web.xml에 서블릿 배치 정보를 적어주면 됩니다.

이 때 <init-param>이 서블릿 초기화 매개변수 설정 태그입니다.

<servlet>
    <servlet-name><!-- 서블릿 이름 --></servlet-name>
    <servlet-class><!-- 서블릿 --></servlet-class>
    <init-param>
        <param-name>driver</param-name>
        <param-value>com.mysql.jdbc.Driver</param-value>
    </init-param>
    <init-param>
        <param-name>url</param-name>
        <param-value>jdbc:mysql://localhost/test</param-value>
    </init-param>
    <init-param>
        <param-name>username</param-name>
        <param-value>root</param-value>
    </init-param>
    <init-param>
        <param-name>password</param-name>
        <param-value>root</param-value>
    </init-param>
</servlet>

 

 

여기서 선언한 서블릿 초기화 매개변수들은 매개변수를 선언한 서블릿 내에서만 사용할 수 있습니다.

 

 

서블릿을 작성하게 되면 아래와 같습니다.

HttpServlet 클래스에서 상속받은 getInitparameter()를 이용하면 서블릿 초기화 매개변수의 값을 꺼낼 수 있습니다.

public class MemberUpdateServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		
		try {
			Class.forName(this.getInitParameter("driver"));
			conn = DriverManager.getConnection(				
								this.getInitParameter("url"),
								this.getInitParameter("username"),
								this.getInitParameter("password")
							);
		
			stmt = ...
		} ...

 

 

 

 

2. 애노테이션 이용

web.xml이 아닌 서블릿 소스 코드에 애노테이션으로 서블릿 초기화 매개변수를 설정합니다.

항상 바뀔 수 있는 정보이기에 추천하는 방법은 아닙니다.

 

구현 방법은 @WebServlet 을 사용하면 됩니다.

@WebServlet 애노테이션의 initParams는 서블릿 초기화 매개변수 설정 속성입니다.

속성의 값은 @WebInitParam()을 이용합니다.

 

코드는 아래와 같습니다.

@WebServlet(
		urlPatterns= {"/member/update"},
		initParams= {
				@WebInitParam(name="dirver", value="com.mysql.jdbc.Driver"),
				@WebInitParam(name="url", value="jdbc:mysql://localhost/test"),
				@WebInitParam(name="username", value="root"),
				@WebInitParam(name="password", value="")
		}
)
public class MemberUpdateServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		
		try {
			Class.forName(this.getInitParameter("driver"));
			conn = DriverManager.getConnection(				
								this.getInitParameter("url"),
								this.getInitParameter("username"),
								this.getInitParameter("password")
							);
		
			stmt = ...
		} ...

 

 

 

 

 

 

 

컨텍스트 초기화 매개변수

컨텍스트 초기화 매개변수는 같은 웹 애플리케이션에 소속된 서블릿들이 공유하는 매개변수 입니다.

 

컨텍스트 초기화 매개변수의 값을 얻으려면 ServletContext 객체가 필요한데 HttpServlet 클래스로부터 상속받은 getServletContext()를 호출하여 ServletContext 객체를 받아오면 됩니다.

 

 

 

 

 

 

 

1. DD 파일 설정

먼저 서블릿 정보는 애노테이션으로 처리되어 있는 상태이고 현 web.xml에는 컨텍스트 매개변수만 등록해줍니다.

<context-param>
    <param-name>driver</param-name>
    <param-value>com.mysql.jdbc.Drier</param-value>
</context-param>
<context-param>
    <param-name>url</param-name>
    <param-value>jdbc:mysql://localhost/test</param-value>
</context-param>
<context-param>
    <param-name>username</param-name>
    <param-value>root</param-value>
</context-param>
<context-param>
    <param-name>password</param-name>
    <param-value></param-value>
</context-param>

 

 

 

 

 

 

 

 

2. 컨텍스트 초기화 매개변수 이용

위에서 언급했던 것 처럼 ServletContext 객체를 사용하면 됩니다.

@WebServlet(urlPatterns= {"/member/update"})
public class MemberUpdateServlet extends HttpServlet {

	@Override
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Connection conn = null;
		Statement stmt = null;
		ResultSet rs = null;
		
		try {
			ServletContext sc = this.getServletContext();

			Class.forName(sc.getInitParameter("driver"));
			conn = DriverManager.getConnection(
					sc.getInitParameter("url"),
					sc.getInitParameter("username"),
					sc.getInitParameter("password")
					);

			stmt = conn.createStatement();
			// ...
반응형

댓글