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

ServletContext의 매개변수 설정 기능

sungw00 2023. 2. 20. 18:46
728x90

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

다음과 같이 ContextParamServlet.java 클래스 파일과 web.xml 파일을 준비.

 

web.xml에 메뉴 항목을 설정. <context-param> 태그 안에 <param-value> 태그와 <param-value> 태그를 이용해 메뉴에 대한 하위 메뉴 항목을 설정.

web.xml 파일의 내용

// ContextParamServlet.java
package sec05.ex02;

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

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;

/**
 * Servlet implementation class ContextParamServlet
 */
@WebServlet("/initMenu")
public class ContextParamServlet extends HttpServlet {
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	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(); // ServletContext 객체를 가져옴
        // web.xml의 <param-name> 태그의 이름으로 <param-value> 태그의 값인 메뉴 이름들을 받아옴
		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>");
	}

}

getServletContext( ) 메서드로 ServletContext 객체에 접근하고, getInitParameter( ) 메서드의 인자로 각각의 메뉴 이름을 전달한 후 메뉴 항목들을 가져와 이를 브라우저로 출력함.

크롬에서 initMenu로 요청
IE에서 Initmenu로 요청

 

728x90