💻 Web_Back end/Servlet

서블릿 API 사용하기

개발진스 2023. 4. 12. 00:04
728x90

1. 서블릿 포워드 기능 사용하기

 

프로그램을 실행하다보면 서블릿끼리 또는 서블릿과 JSP를 연동해서 작업해야 하는 경우가 있다.

이처럼 하나의 서블릿에서 다른 서블릿이나 JSP와 연동하는 방법을 포워드라고 한다.

 

 

포워드 기능이 사용되는 용도

 

1) 요청에 대한 추가 작업을 다른 서블릿에게 수행하게 함

2) 요청에 포함된 정보를 다른 서블릿이나 JSP와 공유가 가능

3) 요청에 정보를 포함시켜 다른 서블릿에 전달이 가능

4) 모델2 개발 시 서블릿에서 JSP로 데이터를 전달하는 데 사용됨

 

 

포워딩 기능 : 서블릿에서 다른 서블릿이나 JSP로 요청을 전달하는 역할, 요청을 전달할 때 추가 데이터를 포함시켜서 전달한다. 모델2 방식으로 웹 애플리케이션을 개발할 경우 서블릿에서 JSP로 데이터를 전달할 때 주로 사용

 

 

 

2. 서블릿의 여러가지 포워드 방법

 

1) redirect 방법

  • HttpServletResponse 객체의 sendRedirect( ) 메서드를 이용
  • 웹 브라우저에 재요청하는 방식
  • 형식: sendRedirect("포워드할 서블릿 또는 JSP");

 

2) Refresh 방법

  • HttpServletResponse 객체의 addHeader( ) 메서드를 이용
  • 웹 브라우저에 재요청하는 방식
  • 형식: response.addHeader("Refresh", "경과시간(초); url=요청할 서블릿 또는 JSP)";

 

3) location 방법

  • 자바스크립트 location 객체의 href 속성을 이용
  • 자바스크립트에서 재요청하는 방식
  • 형식: location.href='요청할 서블릿 또는 JSP';

 

4) dispatch 방법

  • 일반적으로 포워딩 기능을 지칭
  • 서블릿이 직접 요청하는 방식
  • RequestDispatcher 클래스의 forward( ) 메서드를 이용
  • 형식: RequestDispatcher dis = request.getRequestDispatcher("포워드할 서블릿 또는 JSP");  dis.forward(request, response);

 

redirect, refresh, location 방법은 서블릿이 웹 브라우저를 거쳐 다른 서블릿이나 JSP에게 요청하는 방법

반면에 dispatch 방법은 서블릿에서 클라이언트를 거치지 않고 바로 다른 서블릿에게 요청하는 방법

 

 

2-1. redirect를 이용한 포워딩 

 

redirect 방법은 서블릿의 요청이 클라이언트의 웹 브라우저를 다시 거쳐 요청되는 방식이다.

 

서블릿의 redirect 방법 수행 과정

 

1) 클라이언트의 웹 브라우저의 첫번째 서블릿에 요청

2) 첫 번째 서블릿은 sendRedirect( ) 메서드를 이용해 두 번째 서블릿을 웹 브라우저를 통해 요청

3) 웹 브라우저는 sendReadirect() 메서드가 지정한 두 번째 서블릿을 다시 요청

 

 

FirstServlet.java

	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
        
        //sendRedirect() 메서드를 이용해 웹 브라우저에게 second로 재요청
		response.sendRedirect("second");
	}

 

SecondServlet.java

	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
        
		out.print("<html><body>");
		out.println("sendRedirect를 이용한 redirect 실습");
		out.print("</body></html>");
	}

 

http://localhost:8090/pro08/first로 요청한 실행 화면

 

2-2. refresh를 이용한 포워딩 

 

redirect와 같이 웹 브라우저를 거쳐서 요청을 수행함

 

1) 클라이언트의 웹 브라우저에서 첫 번째 서블릿에 요청

2) 첫 번째 서블릿은 sendRedirect( ) 메서드를 이용해 두 번째 서블릿을 웹 브라우저를 통해 요청

3) 웹 브라우저는 sendRedirect( ) 메서드가 지정한 두 번째 서블릿을 다시 요청

 

 

FirstServlet.java

	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
        
        //웹 브라우저에 1초후 서블릿 second로 재요청
		response.addHeader("Refresh", "1; url=second");
	}

 

SecondServlet.java

	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
        
		out.print("<html><body>");
		out.println("refresh를 이용한 redirect 실습");
		out.print("</body></html>");
	}

 

http://localhost:8090/pro08/first로 요청한 실행 화면

 

 

2-3. location를 이용한 포워딩 

 

자바스크립트의 location의 href 속성에 second 서블릿을 설정해 재요청

 

FirstServlet.java

	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		out.print("<script type='text/javascript'>");
		out.print("location.href='second';");
		out.print("</script>");
	}

 

SecondServlet.java

	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		out.println("<html><body>");
		out.println("location을 이용한 redirect 실습입니다.");
		out.println("</body></html>");
	}

 

 

 

2-4. redirect 방식으로 다른 서블릿에 데이터 전달

 

자바스크립트의 location의 href 속성에 second 서블릿을 설정해 재요청

 

FirstServlet.java

		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
        
        //Get방식을 이용해 이름/값 쌍으로 데이터를 다른 서블릿으로 전달
		response.sendRedirect("second?name=lee");

 

SecondServlet.java

		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		String name = request.getParameter("name");
		out.println("<html><body>");
		out.println("이름 : " + name);
		out.println("</body></html>");

 

 

 

 

3. dispatch를 이용한 포워드 방법

 

dispatch를 이용한 포워딩 과정

 

dispatch를 이용한 포워딩 과정이 redirect 방법과 다른 점은 클라이언트의 웹 브라우저를 거치지 않고 바로 서버에서 포워딩이 진행따라서 웹 브라우저 주소창의 URL이 변경되지 않기때문에 클라이언트 측에서는 포워드가 진행되었는 지 알 수 없다.

 

dispatch를 이용한 포워딩 수행 과정

 

1) 클라이언트의 웹 브라우저에서 첫 번째 서블릿에 요청

2) 첫 번째 서블릿은 RequestDispatcher를 이용해 두 번째 서블릿으로 포워드

 

 

FirstServlet.java

		response.setContentType("text/html; charset=utf-8");
		RequestDispatcher dispatch = request.getRequestDispatcher("second?name=lee");
		dispatch.forward(request, response);

 

SecondServlet.java

		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		String name = request.getParameter("name");
		out.println("<html><body>");
		out.println("이름:" + name);
		out.println("<br>");
		out.println("dispatch를 이용한 forward 실습입니다.");
		out.println("</body></html>");

 

 

http://localhost:8090/first로 요청한 결과

 

 

4. 바인딩

 

다른 서블릿으로 포워딩 할대 전달하는 데이터 양이 적을때는 Get방식이 편리하다.

그러나 대량의 정보를 전달할때는 바인딩 기능을 사용한다.

 

바인딩 : 두개를 하나로 묶는다

 

이는 웹 프로그램 실행시 자원을 서블릿 관련 객체에 저장하는 방법으로,  HttpServletRequest, HttpSession, ServletContext 객체에서 사용되며 저장된 자원(데이터)은 프로그램 실행 시 서블릿이나 JSP에서 공유하여 사용한다.

 

 

서블릿 객체에서 사용되는 바인딩 관련 메서드

관련 메서드 기능
setAttribute(String name, Object obj) 자원(데이터)을 각 객체에 바인딩 함
getAttribute(String name) 각 객체에 바인딩된 자원(데이터)을 name으로 가져옴
removeAttribute(String name) 각 객체에 바인딩된 자원(데이터)을 name으로 제거함

 

 

4-1. HttpServletRequest를 이용한 redirect 포워딩 시 바인딩

 

FirstServlet.java

	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		
		//웹 브라우저에 요청한 request 객체에 address의 값으로 서울시 성북구를 바인딩
		request.setAttribute("address", "서울시 성북구");
		//두번째 서블릿으로 전달하기 위해 sendRedirect()를 호출
		response.sendRedirect("second");
	}

 

SecondServlet.java

	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		String name = request.getParameter("name");
		
		//전달된 request에서 getAttribute()를 이용해 address의 값을 가져온다
		String address = (String)request.getAttribute("address");
		out.println("<html><body>");
		out.println("주소:" + address);
		out.println("<br>");
		out.println("redirect를 이용한 바인딩 실습입니다.");
		out.println("</body></html>");
	}

 

실행화면

 

실행 결과는 NULL이다.

 

WHY?

 

위에서 설명했던 redirect 방식 포워드 과정 때문이다. 포워딩 과정 1단계인 웹브라우저에서 요청할때 서블릿에 전달되는 첫번째 requst는 웹 브라우저를 통해 재요청되는 3단계의 두번째 request와 다른 요청이다.

즉, redirect 방식으로는 서블릿에서 바인딩한 데이터를 다른 서블릿으로 전송할 수 없다는 것이다.

 

 

서블릿의 redirect 방법 수행 과정

위의 예제들 처럼 GET방법으로 전송하면 문제 없이 전달 할 수 있을 것이다. 하지만 대용량의 상품 전달시에는 GET방법은 효율적이지 않다. 이러한 문제점을 해결하기 위해서 dispatch 포워딩을 사용한다.

 

 

4-2. HttpServletRequest를 이용한 dispatch 포워딩 시 바인딩

 

FirstServlet.java

	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html; charset=utf-8");
		
		//웹 브라우저의 최초 요청 request에 바인딩
		request.setAttribute("address", "서울시 성북구");
		// 바인딩된 request를 다시 두 번째 서블릿으로 포워딩
        RequestDispatcher dispatch = request.getRequestDispatcher("second");
		dispatch.forward(request, response);
	}

 

SecondServlet.java

	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		String name = request.getParameter("name");
		
		//전달된 request에서 getAttribute()를 이용해 주소를 받아옴
		String address = (String)request.getAttribute("address"); 
		out.println("<html><body>");
		out.println("주소:" + address);
		out.println("<br>");
		out.println("dispatch를 이용한 바인딩 실습입니다.");
		out.println("</body></html>");
	}

 

실행화면

 

이 포워딩 과정을 보면 첫번째 서블릿에서 두번째 서블릿으로 전달되는 request가 브라우저를 거치지 않고 바로 전달되었다.따라서 첫번재 서블릿의 request에 바인딩된 데이터가 그대로 전달된 것이다.모델2, 스프링 프레임워크로 개발할 떄는 dispatch방식으로 바인딩된 데이터를 서블릿이나 JSP로 전달한다.

 

 

4-3. 두 서블릿 간 회원 정보 조회 바인딩 실습

 

MemverServlet.java

	private void doHandle(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		MemberDAO dao = new MemberDAO();
		List membersList = dao.listMembers();
		
		//조회한 정보를 ArrayList객체에 저장한 후 request에 바인딩
		request.setAttribute("membersList", membersList);
		//바인딩한 request를 viewMembers서블릿으로 포워딩
		RequestDispatcher dispatch = request.getRequestDispatcher("viewMembers");
		dispatch.forward(request, response);
	}

 

viewServlet.java

public class ViewServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();

		//바인딩해서 넘어온 request에서 회원정보를 가져온다
		List membersList = (List) request.getAttribute("membersList");
		out.print("<html><body>");
		out.print("<table border=1><tr align='center' bgcolor='lightgreen'>");
		out.print("<td>아이디</td><td>비밀번호</td><td>이름</td><td>이메일</td><td>가입일</td><td >삭제</td></tr>");
		for (int i = 0; i < membersList.size(); i++) {
			MemberVO memberVO = (MemberVO) membersList.get(i);
			String id = memberVO.getId();
			String pwd = memberVO.getPwd();
			String name = memberVO.getName();
			String email = memberVO.getEmail();
			Date joinDate = memberVO.getJoinDate();
			out.print("<tr><td>" + id + "</td><td>" + pwd + "</td><td>" + name + "</td><td>" + email + "</td><td>"
					+ joinDate + "</td><td>" + "<a href='/pro08/member3?command=delMember&id=" + id
					+ "'>삭제 </a></td></tr>");

		}
		out.print("</table></body></html>");
		out.print("<a href='/pro08/memberForm.html'>새 회원 등록하기</a");
	}

 

실행화면

 

 

 

5. ServletContext와 ServletConfig 사용법

 

캣 컨테이너 실행 시 각 컨텍스트(웹 애플리케이션)마다 한 개의 ServletContext 객체를 생성한다.

톰캣 컨테이너가 종료하면 ServletContext 객체 역시 소멸된다.

ServletContext 객체는 웹 애플리케이션이 실행되면서 애플리케이션 전체의 공통 자원이나 정보를 미리 바인딩해서 서블릿들이 공유하며 사용한다.

 

 

ServletContext 클래스의 특징

 

javax.servlet.ServletContext로 정의
서블릿과 컨테이너 간 연동을 위해 사용
컨텍스트(웹 애플리케이션)마다 하나의 ServletContext가 생성
서블릿끼리 자원(데이터)을 공유하는 데 사용
컨테이너 실행 시 생성되고 컨테이너 종료 시 소멸



ServletContext가 제공하는 기능

서블릿에서 파일 접근 기능
자원 바인딩 기능
로그 파일 기능
컨텍스트에서 제공하는 설정 정보 제공 기능

 

톰캣 컨테이너

 

 

ServletContext에서 제공하는 여러 가지 메서드의 기능

 

메서드 기능
getAttribute(String name) - 주어진 name을 이용해 바인딩된 value를 가져옴
- name이 존재하지 않으면 null을 반환
getAttributeNames( ) 바인딩된 속성들의 name을 반환
getContext(String uripath) 지정한 uripath에 해당되는 객체를 반환
getInitParameter(String name) - name에 해당되는 매개변수의 초기화 값을 반환
- name에 해당되는 매개변수가 존재하지 않으면 null을 반환
getInitParameterNames( ) - 컨텍스트의 초기화 관련 매개변수들의 이름들을 String 객체가 저장된 Enumeration 타입으로 반환
- 매개변수가 존재하지 않으면 null을 반환
getMajorVersion( ) 서블릿 컨테이너가 지원하는 주요 서블릿 API 버전을 반환
getRealPath(String path) 지정한 path에 해당되는 실제 경로를 반환
getResource(String path) 지정한 path에 해당되는 Resource를 반환
getServerInfo( ) 현재 서블릿이 실행되고 있는 서블릿 컨테이너의 이름과 버전을 반환
getServletContextName( ) 해당 애플리케이션의 배치 관리자가 지정한 ServletContext에 대한 해당 웹 애플리케이션의 이름을 반환
log(String msg) 로그 파일에 로그를 기록
removeAttribute(String name) 해당 name으로 ServletContext에 바인딩 된 객체를 제거
setAttribute(String name, Object object) 해당 name으로 객체를 ServletContext에 바인딩
setInitParameter(String name, String value) 주어진 name으로 value를 컨텍스트 초기화 매개변수로 설정

 

5-1. ServletContext 바인딩 기능

 

getServletContext( ) 메서드를 이용해 ServletContext 객체에 접근한 다음 ArrayList에 이름과 나이를 저장한 후 다시 ServletContext 객체에 setAttribute( ) 메서드를 이용해 바인딩한다.

 

SetServletContext.java

	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		ServletContext context = getServletContext(); // ServletContext 객체를 가져옴
		List member = new ArrayList();
		member.add("이순신");
		member.add(30);
		context.setAttribute("member", member); // ServletContext 객체에 데이터를 바인딩
		out.print("<html><body>");
		out.print("이순신과 30 설정");
		out.print("</html></body>");
	}

set 실행

 

 

getServletContext( ) 메서드를 이용해 ServletContext 객체에 접근한다.

getAttribute( ) 메서드를 이용해 다른 서블릿에서 바인딩한 ArrayList를 가져와 회원 정보를 출력한다.

 

GetServletContext.java

	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws  ServletException, IOException {
		response.setContentType("text/html; charset=utf-8");
		PrintWriter out = response.getWriter();
		
		// ServletContext 객체를 가져옴
		ServletContext context = getServletContext(); 
		
		// member로 이전에 바인딩된 회원 정보를 가져옴
		List member = (List) context.getAttribute("member"); 
		String name = (String) member.get(0);
		int age = (Integer) member.get(1);
		out.print("<html><body>");
		out.print(name + "<br>");
		out.print(age + "<br>");
		out.print("</html></body>");
   }

get 실행

 

이처럼 ServletContext에 바인딩된 데이터는 모든 서블릿들이 접근할 수 있다.

따라서 웹 어플리케이션에서 모든 사용자가 공통으로 사용하는 데이터는 ServletContext에 바인딩해놓고 사용하면 편리하다.

 

5-2. ServletContext의 매개변수 설정 기능

 

대부분의 웹 애플리케이션의 메뉴는 공통으로 사용하는 기능이다. 따라서 web.xml에 설정해놓고 프로그램 시작 시 초기화할 때 가져와서 사용하면 편리하다. 그러면 새로운 메뉴 항목이 생성되거나 기존 메뉴 항목을 추가, 삭제할 때도 쉽게 수정이 가능하다.

 

web.xml

	<context-param>
		<param-name>menu_member</param-name>
		<param-value>회원등록  회원조회 회원수정</param-value>
	</context-param>
	<context-param>
		<param-name>menu_order</param-name>
		<param-value>주문조회  주문등록 주문수정 주문취소</param-value>
	</context-param>
	<context-param>
		<param-name>menu_goods</param-name>
		<param-value>상품조회  상품등록 상품수정 상품삭제</param-value>
	</context-param>

 

ContextParamServlet. java

	protected  void doGet(HttpServletRequest request,HttpServletResponse response) 
			throws ServletException,  IOException {
      request.setCharacterEncoding("utf-8");
      response.setContentType("text/html;charset=utf-8");
      PrintWriter out = response.getWriter();
      ServletContext context = getServletContext();

      String menu_member = context.getInitParameter("menu_member");
      String menu_order = context.getInitParameter("menu_order");
      String menu_goods =context.getInitParameter("menu_goods");

      out.print("<html><body>");
      out.print("<table border=1 cellspacing=0><tr>메뉴 이름</tr>");
      out.print("<tr><td>" + menu_member + "</td></tr>");
      out.print("<tr><td>" + menu_order + "</td></tr>");
      out.print("<tr><td>" + menu_goods + "</td></tr>");
      out.print("</tr></table></body></html>");	
   }

 

엣지 실행화면
크롬 실행화면

 

모든 브라우저에서 같은 메뉴를 출력하는걸 확인 할 수있다.

즉 메뉴는 ContextServlet객체를 통해 접근하므로 공유하면서 접근이 가능하다

 

 

5-3. ServletContext의 파일 입출력 기능

 

이번에는 ServletContext의 파일에서 데이터를 읽어오는 기능

 

경로 : pro08/webapp/WEB-INF/bin/init.txt 

 

init.txt에서 메뉴 데이터를 읽어와 출력하는 기능을 구현

 

 

ContextFileServlet.java

	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
			throws ServletException, IOException {
		response.setContentType("text/html;charset=euc-kr");
		PrintWriter out = response.getWriter();
		ServletContext context = getServletContext();
		InputStream is = context.getResourceAsStream("/WEB-INF/bin/init.txt");
		BufferedReader buffer = new BufferedReader(new InputStreamReader(is));

		String menu = null;
		String menu_member = null;
		String menu_order = null;
		String menu_goods = null;
		while ((menu = buffer.readLine()) != null) {
			StringTokenizer tokens = new StringTokenizer(menu, ",");
			menu_member = tokens.nextToken();
			menu_order = tokens.nextToken();
			menu_goods = tokens.nextToken();
		}
		out.print("<html><body>");
		out.print(menu_member + "<br>");
		out.print(menu_order + "<br>");
		out.print(menu_goods + "<br>");
		out.print("</body></html>");
		out.close();
	}

 

출력화면

 

 

5-4. ServletConfig

 

ServletConfig에서 제공하는 여러 가지 메서드를 이용해 서블릿에 관련된 기능을 사용할 수 있다

대표적인 기능이 ServletContext 객체를 가져오는 기능이다.

 

ServletConfig는 javax.servlet 패키지에 인터페이스로 선언되어 있으며, 서블릿에 대한 여러가지 기능을 제공한다.

각 서블릿에서만 접근이 가능하며 공유는 불가능하다. ServletConfig는 서블릿과 동일하게 생성되고, 서블릿 소멸 시 같이 소멸된다.

 

ServlerConfig가 제공하는 기능

ServletContext 객체를 얻는 기능

서블릿에 대한 초기화 작업 기능

 

 

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

 

@WebServlet의 구성 요소들

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

 

@WebServlet값을 설정하는 방법

 

1. Servlet 생성하기
2. 매개변수와 매핑이름 설정하기

 

initParamServlet.java

@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>");
	}

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

 

sInit / sInit2 실행화면

 

 

 


참고자료 : 자바 웹을 다루는 기술

728x90