본문 바로가기
학습/JSP

12. ServletConfig

by Elfen Lied 2022. 11. 9.
반응형

- ServletConfig

  • 각 Servlet 객체에 대해 생성됨.
  • ServletConfig가 제공하는 기능
    • ServletCotext 객체를 얻는 기능
    • 서블릿에 대한 초기화 작업 기능

src/main/java에 아래 이미지 설정처럼으로 InitParamServlet 서블릿 생성

 

- InitParamServlet

@WebServlet 주석을 걸고 web.xml을 설정하거나 

wb.xml 설정 없이 @ WebServlet을 살려서 써도 같음

package sec06.ex01;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

//@WebServlet(
//		urlPatterns = { 
//				"/sInit", 
//				"/sInit2"
//		}, 
//		initParams = { 
//				@WebInitParam(name = "email", value = "admin@example"), 
//				@WebInitParam(name = "tel", value = "010-1111-2222")
//		})
public class InitParamServlet extends HttpServlet {
	
	public InitParamServlet() {
		System.out.println("InitParamServlet 객체 생성");
	}
	
	@Override
	public void init() throws ServletException {
		System.out.println("InitParamServlet : init 메서드 호출");
	}
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		String email = getInitParameter("email");
		String tel = getInitParameter("tel");
		
		out.print("<html><body>");
		out.print("<table><tr>");
		out.print("<td>email : </td><td>" + email + "</td></tr>");
		out.print("<tr><td>휴대전화 : </td><td>" + tel + "</td>");
		out.print("</tr></table></body></html>");
		
//		System.out.println("서블릿 config" + getInitParameter("email"));
//		ServletContext ctx = getServletContext();
//		System.out.println("서블릿 config" + ctx.getInitParameter("email"));
		
	}

}

 

 

- @WebServlet과 대응되는 web.xml 파일

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
 
	<!-- 서블릿 등록 -->
	<servlet>
		<servlet-name>sInit</servlet-name>
		<servlet-class>sec06.ex01.InitParamServlet</servlet-class>
		
		<!-- 초기화 파라미터 -->
		<init-param>
			<param-name>email</param-name>
			<param-value>admin@example</param-value>
		</init-param>
		<init-param>
			<param-name>tel</param-name>
			<param-value>010-1111-2222</param-value>
		</init-param>
	</servlet>
	
	<!-- 서블릿 매핑 -->
	<servlet-mapping>
		<servlet-name>sInit</servlet-name>
		<url-pattern>/sInit</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>sInit</servlet-name>
		<url-pattern>/sInit2</url-pattern>
	</servlet-mapping>
</web-app>

 

sInit, sInit2 둘다 요청해도 값이 들어가면 됨

 

 

 

- @WebServlet 애너테이션을 이용한 서블릿 설정

요소 설명
urlPatterns 웹 브라우저에서 서블릿 요청 시 사용하는 매핑이름
name 서블릿 이름
loadOnStartup 컨테이너 실행 시 서블릿이 로드되는 순서 지정
initParams @webInitParam 애너테이션 이용해 매개변수를 추가하는 기능
description 서블릿에 대한 설명

 

 

 

- load-on-statup 기능 사용하기

  • 톰캣 컨테이너가 실행되면서 미리 서블릿을 실행함
  • 지정한 숫자가 0이상이면 톰캣 컨테이너가 실행되면서 서블릿이 초기화됨
  • 지정한 숫자는 우선순위를 의미하며 작은 숫자부터 먼저 초기화됨
    • 애너테이션 방법과 web.xml 설정 방법이 있음

 

package sec06.ex02;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(urlPatterns = {"/loadConfig"}, loadOnStartup = 1)
public class LoadAppConfig extends HttpServlet {

	private ServletContext ctx;
	
	public LoadAppConfig() {
		System.out.println("LoadAppConfig객체 생성");
	}
	
	@Override
	public void init(ServletConfig config) throws ServletException {
		System.out.println("LoadAppConfig 초기화 메소드 실행");
		ctx = config.getServletContext();
		String menu_member = ctx.getInitParameter("menu_member");
		
		ctx.setAttribute("menu_member", menu_member);
	}
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String menu_member = (String) ctx.getAttribute("menu_member");
		System.out.println(menu_member);
	}

}

 

package sec06.ex02;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;

@WebServlet(urlPatterns = {"/loadOnTest"}, loadOnStartup = 2)
public class LoadOnTest extends HttpServlet {

	public LoadOnTest() {
    	System.out.println("LoadOnTest 객체 생성");
    }

    @Override
    public void init() throws ServletException {
    	System.out.println("LoadOnTest : init 메서드 호출");
    }
}

 

  1. loadOnStartup에 각각 1과 2를 주고 실행하면
  2. 작은 숫자부터 실행되는것을 확인할수 있다.

 

 

 

- loadOnStartup을 web.xml에 설정하는 방법

web.xml에 추가

<!-- 서블릿 등록 -->
	<servlet>
		<servlet-name>sInit</servlet-name>
		<servlet-class>sec06.ex01.InitParamServlet</servlet-class>
		
		<!-- 초기화 파라미터 -->
		<init-param>
			<param-name>email</param-name>
			<param-value>admin@example</param-value>
		</init-param>
		<init-param>
			<param-name>tel</param-name>
			<param-value>010-1111-2222</param-value>
		</init-param>
		
		<!-- loadOnStartUp -->
		<load-on-startup>3</load-on-startup>
		
	</servlet>

<servlet>의 자식으로 <load-on-startup> 추가 해주면 끝

 

반응형

'학습 > JSP' 카테고리의 다른 글

14. 쿠키  (0) 2022.11.09
13. <hidden>태그와 URL Rewriting 이용해 웹 페이지 연동  (0) 2022.11.09
11. ServletContext  (0) 2022.11.08
10. JSP파일에 출력하기  (0) 2022.11.08
9. 포워드  (0) 2022.11.07

댓글