ServletConfig 란?
Servlet 설정 정보 객체입니다.
Servlet 객체당 하나 생성합니다.
ServletConfig 객체는 Servlet이 초기화될 때 생성되며, Servlet의 init() 메서드에서 사용할 수 있습니다. ServletConfig 객체는 Servlet이 종료될 때까지 사용할 수 있습니다.
ServletConfig 객체는 Servlet을 구성하는 데 사용할 수 있습니다. 예를 들어, ServletConfig 객체를 사용하여 로깅 프레임워크를 설정하거나, 데이터베이스 연결을 초기화하거나, Servlet의 구성을 설정할 수 있습니다.
ServletConfig 객체 일부 메서드
- getInitParameter(String name): 애플리케이션의 초기화 매개변수에 대한 값을 가져옵니다.
- getInitParameterNames(): 애플리케이션의 초기화 매개변수의 이름 목록을 가져옵니다.
- getServletContext(): Servlet의 ServletContext를 가져옵니다.
- getServletName(): Servlet의 이름을 가져옵니다.
ServletContext란?
웹 애플리케이션의 컨텍스트입니다. 웹 애플리케이션의 이름, 경로 및 초기화 파라미터를 포함한 웹 애플리케이션에 대한 정보를 포함합니다. 또한 웹 애플리케이션의 모든 서블릿 및 JSP에 대한 공유 저장소로 사용할 수 있습니다.
ServletContext 객체는 웹 애플리케이션이 시작될 때 웹 컨테이너에 의해 생성되고 웹 애플리케이션이 종료될 때 웹 컨테이너에 의해 파괴됩니다.
ServletContext 객체는 getServletContext() 메서드를 사용하여 가져올 수 있습니다.
ServletContext 객체 메서드
- getInitParameter() - 지정된 이름의 초기화 파라미터의 값을 반환합니다.
- getInitParameterNames() - 웹 애플리케이션의 모든 초기화 파라미터의 이름을 반환하는 열거형을 반환합니다.
- getContextPath() - 웹 애플리케이션의 경로를 반환합니다.
- getRealPath() - 지정된 경로의 실제 경로를 반환합니다.
- setAttribute() - 지정된 이름과 값으로 새 속성을 설정합니다.
- getAttribute() - 지정된 이름의 속성 값을 반환합니다.
- removeAttribute() - 지정된 이름의 속성을 제거합니다.
- log() - 지정된 메시지를 웹 애플리케이션의 로그에 기록합니다.
- getMajorVersion() - 웹 애플리케이션을 지원하는 Servlet API의 주요 버전을 반환합니다.
- getMinorVersion() - 웹 애플리케이션을 지원하는 Servlet API의 마이너 버전을 반환합니다.
예제
servletConfig 예제
XML로 확인하는 config와 context 예제입니다.
파일 2개를 생성해서 확인해보겠습니다. 참고로 Dynamic web module version을 2.5로 해서 Project를 생성합니다.
Servlet 파일 2개를 생성하면 xml 파일에 무엇인가 생성이 됩니다.
package step2;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* ServletConfig 를 테스트 하는 예제
*/
public class ServletConfigTestServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/*
* HttpServlet 의 super class 인 GenericServlet 이 Servlet interface의
* abstract method init(ServletConfig) 을 구현
* 즉 현 서블릿은 HttpServlet을 상속받았으므로 init(ServletConfig) 메서드를 이미 내장하고 있음
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
out.print("<html>");
out.print("<body bgcolor=yellow>");
out.print("<h4>");
// 웹 컨테이너에 의해 init 에서 전달받은 servletConfig(사원증) 객체를 반환받아 확인
ServletConfig servletConfig=this.getServletConfig();
out.print("ServletConfig : "+servletConfig.toString());
out.print("</h4>");
// 연습차원에서 spring 설정파일경로정보를 얻기
String springConfig=servletConfig.getInitParameter("contextConfigLocation");
out.print("스프링 설정파일경로:"+springConfig);
out.print("<br><br>"+servletConfig.getServletName());
out.print("<br><br> ServletConfig로부터 ServletContext 주소값 반환:"
+servletConfig.getServletContext());
ServletContext servletContext=getServletConfig().getServletContext();
String securityInfo=servletContext.getInitParameter("securityLocation");
out.print("<br><br> security info:"+securityInfo);
out.print("</body>");
out.print("</html>");
out.close();
}
}
이 파일을 생성하면 src/main/webapp/WEB-INF 에 있는 xml 파일에
<servlet>
<description></description>
<display-name>ServletConfigTestServlet</display-name>
<servlet-name>ServletConfigTestServlet</servlet-name>
<servlet-class>step2.ServletConfigTestServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletConfigTestServlet</servlet-name>
<url-pattern>/ServletConfigTestServlet</url-pattern>
</servlet-mapping>
이런 것이 생길 겁니다.
저 파일 servlet 태그 안에 init-param 태그를 넣어 설정값을 넣어줍니다.
<servlet>
<description></description>
<display-name>ServletConfigTestServlet</display-name>
<servlet-name>ServletConfigTestServlet</servlet-name>
<servlet-class>step2.ServletConfigTestServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/springmvc-config.xml</param-value>
</init-param>
</servlet>
이렇게 하면 아까전에 만들었던 Servlet 파일의 servletConfig.getInitParameter("contextConfigLocation") 를 확인 할 수 있습니다.
사실 저도 설정파일을 사용해보지 않았지만 이렇게 설정을 하는 것이라는 것만 알고있습니다. Spring 할 때 사용한다고 하니 그냥 이런 것이 있구나! 정도만 알고 가면 될 것 같습니다.
ServletContext 예제
<context-param>
<param-name>securityLocation</param-name>
<param-value>/WEB-INF/spring-security.xml</param-value>
</context-param>
을 xml 파일에 작성해서 확인해봅시다.
servletContext는 어플리케이션 전체에 설정을 적용할 수 있습니다.
package step3;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Servlet implementation class ContextTestServlet1
*/
public class ContextTestServlet1 extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
out.print("<html>");
out.print("<body bgcolor=yellow>");
ServletContext servletContext=getServletConfig().getServletContext();
//서블릿컨텍스트에 특정 정보를 저장할 수 있다
//servletContext.setAttribute("adminInfo", "admin");
String securityInfo=servletContext.getInitParameter("securityLocation");
out.print("<h4>");
out.print(getServletConfig().getServletName()+" security info:"+securityInfo);
out.print("</h4>");
out.print("</body>");
out.print("</html>");
out.close();
}
}
step3 파일과 step2 파일 모두
ServletContext servletContext=getServletConfig().getServletContext();
String securityInfo=servletContext.getInitParameter("securityLocation");
out.print("<br><br> security info:"+securityInfo);
이러한 함수가 있는데 이것이 어플리케이션 전체를 설정하는 ServletContext를 불러오는 메서드입니다.
이것을 통해서 어플리케이션 안에 있는 Servlet들은 모두 설정 초기화를 할 수 있다는 말입니다.
이렇게 확인됩니다.
소감
아직 보안이나 뭐 초기 설정을 해본적은 없지만 나중에 사용을 할 수 있기 때문에 미리 배워두는 것이고, spring을 사용할 때 또 다시 설명할 날이 올 것 같습니다.
유비무환이라고 미리미리 준비해서 걱정을 좀 덜어내는 것이 중요하다고 생각합니다.
'코딩 개발 > Java' 카테고리의 다른 글
Cookie & Session (0) | 2023.05.22 |
---|---|
JSP (feat. 기본 문법) (2) | 2023.05.21 |
Java - Servlet 연동 (HTML <form>, <a> tag) (4) | 2023.05.19 |
Servlet 생명 주기 (Servlet Life Cycle) (0) | 2023.05.18 |
Java & ORACLE - TRANSACTION (0) | 2023.05.06 |