반응형
ServletConfig
각 Servlet 객체에 대해 생성
ServletConfig는 javax.servlet 패키지에 인터페이스로 선언되어 있으며, 서블릿에 대한 여러가지 기능을 제공
각 서블릿에서만 접근할 수 있으며 공유는 불가능
ServletConfig는 서블릿과 동일하게 생성되고 서블릿이 소멸되면 같이 소멸
ServletConfig 기능
- ServletContext 객체를 얻는 기능
- 서블릿에 대한 초기화 작업 기능
서블릿을 초기화하는 방법
- @WebServlet 애너테이션
- web.xml에 설정
① @WebServlet 애너테이션을 이용한 서블릿 설정
▲ @WebServlet 구성 요소
- urlPatterns : 웹 브라우저에서 서블릿 요청 시 사용하는 매핑 이름
- name : 서블릿 이름
- loadOnStartup : 컨테이너 실행 시 서블릿이 로드되는 순서 지정
- initParams : @WebInitParam 애너테이션 이용해 매개변수를 추가하는 기능
- description : 서블릿에 대한 설명
@WebServlet(
urlPatterns = {
"/sInit"
"/sInit2"
},
initParams = {
@WebInitParam(name = "email", value="ttttt@domain.com"),
@WebInitParam(name = "tel", value="010-1111-1111")
})
위 코드 예시처럼 애너테이션으로 여러개의 매개변수를 설정
- InintParamServlet 클래스
...생략
String email = getInitParameter("email");
String tel = getInitParameter("tel");
...
설정할 때 지정한 name을 인자로 전달하여 각 값을 가져옴.
② web.xml을 이용해 매개변수 설정
* 잘 이용하지는 않는 방법
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<servlet>
<servlet-name>sinit</servlet-name>
<servlet-class>sec.06.ex01.initParamServlet</servlet-class>
<init-param>
<param-name>email</param-name>
<param-value>admin@web.com</param-value>
</init-param>
<init-param>
<param-name>tel</param-name>
<param-value>010-111-1111</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>sinit</servlet-name>
<url-pattern>/first</url-pattern>
</servlet-mapping>
</web-app>
<init-param> 태그 안에 매개변수를 설정
load-on-startup
서블릿은 브라우저에서 최초 요청 시, init( ) 메서드를 실행한 후 메모리에 로드되어 기능을 수행
따라서 최초 요청에 대해서는 실행 시간이 길어지게 됨.
이런 단점을 보완하기 위해 load-on-startup을 이용
load-on-startup 특징
- 톰캣 컨테이너가 실행되면서 미리 서블릿을 실행
- 지정한 숫자가 0보다 크면 톰캣 컨테이너가 실행되면서 서블릿이 초기화 됨.
- 지정한 숫자는 우선순위를 의미하며 작은 숫자부터 먼저 초기화
load-on-startup 기능을 구현하는 방법
- 애너테이션을 이용
- web.xml에 설정
① 애너테이션을 이용하는 방법
/**
* load-on-startup 기능 사용
*/
@WebServlet(name = "loadConfig", urlPatterns = { "/pra08loadConfig" }, loadOnStartup = 1)
public class LoadAppConfig extends HttpServlet {
private static final long serialVersionUID = 1L;
private ServletContext context; // 변수 context를 멤버변수로 선언
public void init(ServletConfig config) throws ServletException {
System.out.println("LoadAppConfig의 init 메서드 호출");
context = config.getServletContext(); // init() 메서드에서 ServletContext 객체를 얻음
// getInitParameter() 메서드로 web.xml의 메뉴 절보를 읽어 들임.
String menu_member = context.getInitParameter("menu_member");
String menu_order = context.getInitParameter("menu_order");
String menu_goods = context.getInitParameter("menu_goods");
// 메뉴 정보를 ServletContext 객체에 바인딩
context.setAttribute("menu_member", menu_member);
context.setAttribute("menu_order", menu_order);
context.setAttribute("menu_goods",menu_goods);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
String menuMember = (String) context.getAttribute("menu_member");
String menuOrder = (String) context.getAttribute("menu_order");
String menuGoods = (String) context.getAttribute("menu_goods");
out.println("<html><body>");
out.println("<table border=1><tr>메뉴이름</tr>");
out.println("<tr><td>" + menuMember + "</td></tr>");
out.println("<tr><td>" + menuOrder + "</td></tr>");
out.println("<tr><td>" + menuGoods + "</td></tr>");
out.println("</table></body></html>");
}
}
위 코드 예시 처럼 애너테이션에 loadOnStartup = 1 이라고 설정
* ServletContext는 멤버 변수로 선언
//지역 변수로 지정시 init에서 사용 못함
- 우선 순위는 양의 정수로 지정하며 숫자가 작으면 우선순위가 높으므로 먼저 실행
- 톰캣 실행 시 init( ) 메서드를 호출하면 getInitParameter( ) 메서드를 이용해 web.xml 정보를 읽음
- 그리고 ServletContext 객체에 setAttribute( ) 메서드로 바인딩
- 브라우저에서 요청하면 이미 톰캣에서 실행시 저장된 정보를 출력하기 때문에 빠르게 출력이 됨
② web.xml에 설정하는 방법
<servlet>
<servlet-name>loadConfig</servlet-name>
<servlet-class>sec06.ex02.LoadAppConfig</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
- <servlet-name> 태그의 값은 반드시 서블릿을 생성할 때 name으로 지정한 값으로 설정
반응형
'개발 > Programming' 카테고리의 다른 글
서블릿의 필터와 리스너 기능 (0) | 2021.06.22 |
---|---|
웹 페이지 연결 기능(Session Tracking) (0) | 2021.06.18 |
ServletContext (0) | 2021.06.13 |
서블릿 포워드 와 바인딩 기능 (0) | 2021.06.10 |
[ORACLE] ORA-01950: 테이블스페이스 'USERS'에 대한 권한이 없습니다. (0) | 2021.05.22 |