IT탐험

서블릿 확장 API 본문

게시판만들기기록/서블릿

서블릿 확장 API

watercase 2021. 9. 21. 08:54

서블릿 포워드

  • 하나의 서블릿에서 다른 서블릿이나 JSP와 연동하는 방법
  • 사용되는 용도
    • 요청에 대한 추가 작업을 다른 서블릿에게 수행하게 한다
    • 요청(request)에 포함된 정보를 다른 서블릿이나 JSP와 공유할 수 있다
    • 요청(request)에 정보를 포함시켜 다른 서블릿에 전달할 수 있다
    • 모델2 개발 시 서블릿에서 JSP로 데이터를 전달하는 데 사용

서블릿의 포워드 방법

  1. redirect
    • HttpServletResponse 객체의 sendRedirect() 메서드를 이용
    • 웹 브라우저에 재요청하는 방식
    • 형식 : sendRedirect("포워드할 서블릿 또는 JSP");
  2. Refresh
    • HttpServletResponse 객체의 addHeader() 메서드를 이용
    • 웹 브라우저에 재요청하는 방식
    • 형식 : response.addHeader("Refresh", "경과시간(초);url=요청할 서블릿 또는 JSP");
  3. location
    • 자바스크립트 location 객체의 href 속성을 이용
    • 자바스크립트에서 재요청하는 방식
    • 형식 : location.href='요청할 서블릿 또는 JSP';
  4. dispatch
    • 일반적으로 포워드 기능을 지칭
    • 서블릿이 직접 요청하는 방법
    • RequestDispather 클래스의 forward()메서드를 이용
    • 형식 : RequestDispatcher dis=request.getRequestDispatcher("포워드할 서블릿 또는 JSP"); dis.forward(request.response);
  • redirect, refresh, location 방법은 서블릿이 웹 브라우저를 거쳐 다른 서블릿이나 JSP에게 요청하는 방법
  • 반면 dispatch 방법은 서블릿에서 클라이언트를 거치지 않고 바로 다른 서블릿에게 요청하는 방법
  • 네 가지 모두 자주 사용된다

redirect를 이용한 포워딩

  • 방법
    1. 클라이언트의 웹 브라우저에서 첫 번째 서블릿의 요청한다
    2. 첫 번째 서블릿은 sendRedirect() 메서드를 이용해 두 번째 서블릿을 웹 브라우저를 통해서 요청한다
    3. 웹 브라우저는 sendRedirect() 메서드가 지정한 두 번째 서블릿을 다시 요청한다
  • 사용예시 : http://localhost:8080/first 입력시 http://localhost:8080/second로 이동
더보기
@WebServlet("/first")
public class FirstServlet extends HttpServlet {

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

}
@WebServlet("/second")
public class SecondServlet extends HttpServlet {

	@Override
	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("sendRedirect를 이용한 redirect 실습");
		out.println("</body></html>");
	}
	
}

refresh를 이용한 포워딩

  • 방법
    1. 클라이언트의 웹 브라우저에서 첫 번째 서블릿에 요청한다
    2. 첫 번째 서블릿은 addHeader() 메서드를 이용해 두 번째 서블릿을 웹 브라우저를 통해 요청한다
    3. 웹 브라우저는 addHeader() 메서드가 지정한 두 번째 서블릿을 다시 요청한다
  • 사용예시 : http://localhost:8080/first2 입력시 http://localhost:8080/second2로 이동
더보기
@WebServlet("/first2")
public class FirstServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		response.addHeader("Refresh","1;url=second2");
	}

}
@WebServlet("/second2")
public class SecondServlet extends HttpServlet {

	@Override
	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("refresh를 이용한 redirect 실습");
		out.println("</body></html>");
	}
	
}

location을 이용한 포워딩

  • 사용예시 : http://localhost:8080/first2 입력시 http://localhost:8080/second2로 이동
더보기
@WebServlet("/first3")
public class FirstServlet extends HttpServlet {

	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='second3';");
		out.print("</script>");
	}

}
@WebServlet("/second3")
public class SecondServlet extends HttpServlet {

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

redirect 방식으로 다른 서블릿에 데이터 전달하는법

  • 사용예시 : http://localhost:8080/first4 입력시 http://localhost:8080/second4?name=lee로 이동
더보기
@WebServlet("/first4")
public class FirstServlet 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();
		response.sendRedirect("second4?name=lee");
// GET 방식을 이용해 이름/값 쌍으로 데이터를 다른 서블릿으로 전달
	}

}
@WebServlet("/second4")
public class SecondServlet extends HttpServlet {

	@Override
	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");
// name으로 이전 서블릿에서 전달된 lee를 받는다
		out.println("<html><body>");
		out.println("이름 : " + name);
		out.println("</body></html>");
	}
	
}
  • refresh나 location 또한 get 방식을 이용해 다른 서블릿으로 데이터 전달이 가능하다

dispatch를 이용한 포워드 방법

  • dispatch를 이용한 포워딩 과정
    • redirect 방식과 다르게 클라이언트의 웹 브라우저를 거치지 않고 바로 서버에서 포워딩이 진행되기 때문에 웹 브라우저 주소창의 URL이 변경되지 않는다. 즉, 클라이언트 측에서는 포워드가 진행되는지 알 수 없다
    • 수행 과정 순서
      1. 클라이언트의 웹 브라우저에서 첫 번째 서블릿에 요청한다
      2. 첫 번째 서블릿은 RequestDispatcher를 이용해 두 번째 서블릿으로 포워드한다
    • * 모델2 방식이나 스트럿츠(struts), 스프링(spring) 프레임워크에서 포워딩할 때 사용한다
  • 사용예시 : http://localhost:8080/first5 입력시 URL이 변경되지않고 그대로이다
더보기
@WebServlet("/first5")
public class FirstServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    	throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		RequestDispatcher dispatch = request.getRequestDispatcher("second5");
		dispatch.forward(request, response);
// dispatch 방법을 이용해 second로 전달
	}

}
@WebServlet("/second5")
public class SecondServlet extends HttpServlet {

	@Override
	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("dispatch를 이용한 forward 실습");
		out.println("</body></html>");
	}
	
}
  • dispatch를 이용해 전송할 때 GET 방식으로 데이터를 전송
    • 사용예시 : http://localhost:8080/first5 입력시 데이터가 전달되었음에도 URL이 변경되지않고 그대로이다
더보기
@WebServlet("/first6")
public class FirstServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		RequestDispatcher dispatch = request.getRequestDispatcher("second6?name=lee");
		dispatch.forward(request, response);
	}

}
@WebServlet("/second6")
public class SecondServlet extends HttpServlet {

	@Override
	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");
		out.println("<html><body>");
		out.println("이름 : " + name + "<br/>");
		out.println("dispatch를 이용한 forward 실습");
		out.println("</body></html>");
	}
	
}

바인딩

  • 서블릿에서 다른 서블릿 또는 JSP로 대량의 데이터를 공유하거나 전달할 때 사용하는 기능
  • 사전적의미 : 두 개를 하나로 묶는다
  • 웹 프로그램 실행 시 자원(데이터)을 서블릿 관련 객체에 저장하는 방법으로 주로 HttpServletRequest, HttpSession, ServletContext 객체에서 사용되며 저장된 자원(데이터)은 프로그램 실행 시 서블릿이나 JSP에서 공유하여 사용
  • 모델2, 스트럿츠, 스프링 프레임워크로 구현하는 웹 프로그램은 바인딩 기능을 이용하여 서블릿이나 JSP간 데이터를 전달하고 공유한다
서블릿 객체에서 사용되는 바인딩 관련 메서드 기능
setAttribute(String name, Object obj) 서블릿 객체에 name 값으로 obj를 바인딩 한다
getAttribute(String name) 서블릿 객체에 name 값으로 바인딩된 데이터를 가져온다
removeAttribute(String name) 서블릿 객체에 name 값으로 바인딩된 데이터를 삭제한다

HttpServletRequest를 이용한 redirect 포워딩 시 바인딩

  • redirect 방식은 요청할때의 request와 재요청되는 request가 다른 요청이기 때문에 서블릿에서 바인딩한 데이터를 다른 서블릿으로 전송할 수 없다

HttpServletRequest를 이용한 dispatch 포워딩 시 바인딩

  • 재요청하는 redirect 방식이 아닌 dispatch 방식은 서블릿에서 바인딩한 데이터를 다른 서블릿으로 전송할 수 있다
  • 사용예시
더보기
@WebServlet("/first8")
public class FirstServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    	throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		request.setAttribute("address", "서울시 성북구");
		RequestDispatcher dispatch = request.getRequestDispatcher("second8");
		dispatch.forward(request, response);
	}

}
@WebServlet("/second8")
public class SecondServlet extends HttpServlet {

	@Override
	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();
		String address = (String) request.getAttribute("address");
		out.println("<html><body>");
		out.println("주소 : " + address + "<br/>");
		out.println("dispatch를 이용한 바인딩 실습");
		out.println("</body></html>");
	}

}
  • 두 서블릿 간 회원 정보 조회 바인딩 사용예시
더보기
@WebServlet("/member")
public class MemberServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doHandle(request, response);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doHandle(request, response);
	}

	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 memberList=dao.listMembers();
		request.setAttribute("memberList", memberList);
// 조회된 회원 정보를 ArrayList 객체에 저장한 후 request에 바인딩
		RequestDispatcher dispatch = request.getRequestDispatcher("viewMembers");
		dispatch.forward(request, response);
// 바인딩한 request를 viewMembers 서블릿으로 포워딩
		
	}

}
@WebServlet("/viewMembers")
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();
		
		List memberList = (List) request.getAttribute("memberList");
// 바인딩해서 넘어온 request에서 회원 정보를 가져온다
		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<memberList.size();i++) {
			MemberVO memberVO = (MemberVO) memberList.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("</body></html>");
		out.print("<a href='/pro08/memberForm.html'> 새 회원 등록하기</a>");
	}

}

ViewServlet 클래스는 웹 브라우저에서 화면 기능을 담당하는데 이런 기능을 하는 서블릿이 분화되어 발전된 것이 JSP이다 


ServletContext와 ServletConfig 사용법

  • ServletContext 클래스
    • 톰캣 컨테이너 실행 시 각 컨텍스트(웹 어플리케이션)마다 한 개의 ServletContext 객체를 생성하고 톰캣 컨테이너가 종료하면 ServletContext 객체 역시 소멸된다
    • ServletContext 객체는 웹 애플리케이션이 실행되면서 애플리케이션 전체의 공통 자원이나 정보를 미리 바인딩해서 서블릿들이 공유하여 사용
  • ServletContext 클래스의 특징
    • javax.servlet.ServletContext로 정의
    • 서블릿과 컨테이너 간의 연동을 위해 사용
    • 컨텍스트(웹 애플리케이션)마다 하나의 ServletContext가 생성
    • 서블릿끼리 자원(데이터)을 공유하는 데 사용
    • 컨테이너 실행 시 생성되고 컨테이너 종료 시 소멸
  • ServletContext가 제공하는 기능
    • 서블릿에서 파일 접근 기능
    • 자원 바인딩 기능
    • 로그 파일 기능
    • 컨텍스트에서 제공하는 설정 정보 제공 기능
  • ServletConfig는 각 서블릿에 대해 생성
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를 컨텍스트 초기화 매개변수로 설정

ServletContext 바인딩 기능

더보기
@WebServlet("/cset")
public class SetServletContext extends HttpServlet {
	
	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("</body></html>");
	}

}
@WebServlet("/cget")
public class GetServletContext extends HttpServlet {
	
	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 = (ArrayList) context.getAttribute("member");
// 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("</body></html>");
				
	}

}

ServletContext에 바인딩된 데이터는 모든 서블릿들이 접근할 수 있으므로

웹 애플리케이션에서 모든 서블릿이 공통으로 사용하는 데이터는 ServletContext에 바인딩하여 사용하면 편리


ServletContext 매개변수 설정

  • 대부분의 웹 앱에서 메뉴는 공통으로 사용하는 기능이므로 web.xml에 설정 후 프로그램 시작 시 초기화할 때 가져와서 사용하면 편리
더보기

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">
  <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>
</web-app>

Servlet.java

@WebServlet("/initMenu")
public class ContextParamServlet 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();
		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("</body></html>");		
	}

}

ServletContext의 파일 입출력

  • 파일에서 데이터를 읽어올 수 있다
더보기

init.txt

회원등록 회원조회 회원수정, 주문조회 주문수정 주문취소, 상품조회 상품등록 상품수정 상품삭제

Servlet.java

@WebServlet("/cfile")
public class ContextFileServlet extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf8");
		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();
	}

}

ServletConfig

  • 컨텍스트마다 생성되는 ServletContext와 다르게 서블릿 객체마다 하나씩 생성된다
  • ServletConfig 인터페이스를 GenericServlet 클래스가 실제 구현한다
  • 각 서블릿에서만 접근할 수 있으며 공유는 불가능하다
  • ServletConfig가 제공하는 기능
    • ServletContext객체를 얻는 기능
    • 서블릿에 대한 초기화 작업 기능
  • 서블릿에서 초기화하는 방법
    1. @WebServlet 애너테이션 이용
    2. web.xml에 설정

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

@WebServlet의 구성요소 설명
urlPatterns 웹 브라우저에서 서블릿 요청 시 사용하는 매핑 이름
name 서블릿 이름
loadOnStartup 컨테이너 실행 시 서블릿이 로드되는 순서 지정
initParams @WebInitParam 애너테이션 이용해 매개변수를 추가하는 기능
description 서블릿에 대한 설명
더보기
@WebServlet(name="InitParamServlet",
	urlPatterns = {"/sInit", "/sInit2"}, 
	initParams = {@WebInitParam(name = "email", value = "admin@jweb.com"), 
			@WebInitParam(name = "tel", value = "010-1111-2222")})
public class InitParamServlet 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();
		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></table>");
		out.print("</body></html>");
	}

}

load-on-startup

  • 서블릿은 브라우저에서 최초 요청 시 init() 메서드를 실행한 후 메모리에 로드되어 기능을 수행하는데, 최초 요청에 대해 실행 시간이 길어지는 단점을 보완하기 위한 기능
  • 특징
    • 톰캣 컨테이너가 실행되면서 미리 서블릿을 실행
    • 지정한 숫자가 0보다 크면 톰캣 컨테이너가 실행되면서 서블릿이 초기화
    • 지정한 숫자는 우선순위를 의미하며 작은 숫자부터 먼저 초기화
  • 구현방법
    • 애너테이션 이용
    • web.xml에 설정
더보기
@WebServlet(name = "loadConfig", urlPatterns = { "/loadConfig" }, loadOnStartup = 1)
public class LoadAppConfig extends HttpServlet {
	
	private ServletContext context;
	
	@Override
	public void init(ServletConfig config) throws ServletException {
		System.out.println("LoadAppConfig의 init 메서드 호출");
		context = config.getServletContext();
		String menu_member = context.getInitParameter("menu_member");
		String menu_order = context.getInitParameter("menu_order");
		String menu_goods = context.getInitParameter("menu_goods");
// getInitParameter() 메서드로 web.xml의 메뉴 정보를 읽어 들인다
		context.setAttribute("menu_member", menu_member);
		context.setAttribute("menu_order", menu_order);
		context.setAttribute("menu_goods", menu_goods);
// 메뉴 정보를 ServletContext 객체에 바인딩
	}

	@Override
	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();
		
		String menu_member = (String) context.getAttribute("menu_member");
		String menu_order = (String) context.getAttribute("menu_order");
		String menu_goods = (String) context.getAttribute("menu_goods");
// 브라우저에서 요청 시 ServletContext 객체에 바인딩된 메뉴 항목을 가져온다
		
		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></table>");
		out.print("</body></html>");
		
	}

}

'게시판만들기기록 > 서블릿' 카테고리의 다른 글

서블릿의 필터와 리스너  (0) 2021.09.22
쿠키과 세션  (0) 2021.09.21
서블릿 비즈니스 로직 처리  (0) 2021.09.19
서블릿 기초  (0) 2021.09.17
서블릿  (0) 2021.09.17
Comments