웹 개발 기초/자바 웹을 다루는 기술

@WebServlet 애너테이션과 web.xml을 이용한 서블릿 설정

sungw00 2023. 2. 20. 20:15
728x90

서블릿에서 사용할 설정 정보를 읽어 들여와 초기화하는 방법 중 하나.

 

@WebServlet의 구성 요소들

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

 

@WebServlet으로 서블릿을 생성할 때 사용할 매개변수를 설정하고 가져오는 방법

1. InitParamServlet.java 클래스 이름을 지정하고 Next 클릭

 

2. Initialization parameters 의 Add를 클릭하고 다음 두 가지 Name과 Value를 설정한다.

 

3. Name과 Value가 잘 들어갔는지 확인 후 URL mappings의 기본값으로 존재하는 /InitParamServlet을 Remove를 눌러 삭제한 뒤 Add를 클릭한다.

 

4. 패턴으로 /sInit과 /sInit2를 추가한다.

 

5. URL mappings를 확인한 후 Next를 클릭

 

6. Inherited abstract methods와 doGet을 체크하고 Finish 클릭

 

7. 그럼 이렇게 설정한 대로 @WebServlet으로 추가된 매핑 이름과 매개변수가 표시되는 것을 확인할 수 있음

 

8. InitParamServlet 클래스 작성

(getInitParameter( ) 메서드에 애너테이션으로 매개변수를 설정할 때 지정한 email과 name을 인자로 전달하여 각 값을 가져옴)

// InitParamServlet.java
package sec06.ex01;

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

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;

/**
 * Servlet implementation class initParamServlet
 */
@WebServlet(name="initParamServlet",
		// urlPatterns를 이용해 매핑 이름을 여러 개 설정이 가능
		urlPatterns = {"/sInit","/sInit2"}, 
        // @WebInitParam을 이용해 여러 개의 매개변수를 설정하는 것이 가능
		initParams = {@WebInitParam(name = "email", value = "admin@jweb.com"), 
						@WebInitParam(name = "tel", value = "010-1111-2222")})
public class InitParamServlet extends HttpServlet {
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
        // 설정한 매개변수의 name으로 값을 가져옴
		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></tr>");
		out.print("</tr></table></body></html>");
	}

}

 

9. 브라우저에서 각각 매핑 이름 /sInit과 /sInit2로 요청하면 동일한 결과가 출력되는 것을 확인할 수 있음

매핑 이름 /sInit과 /sInit2로 요청한 결과


추가로 지금은 잘 이용되지 않지만 다음과 같이 web.xml 을 이용해 매개변수를 설정하는 방법도 있음

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
	<servlet>
    	<servlet-name>sinit</servlet-name>
        <servlet-class>sec06.ex01.initParamServlet</servlet-class>
        <!-- <init-param> 태그 안에 매개변수를 설정할 수 있음 -->
        <init-param>
        	<param-name>email</param-name>
            <param-value>admin@jweb.com</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>/first</url-pattern>
    </servlet-mapping>
</web-app>

 

728x90