2022.03.05 - [멀티캠퍼스 풀스택 과정/백엔드] - 백엔드2-1. Servlet-1 Servlet기초와예제, HttpServlet, web-xml, url
2022.03.05 - [멀티캠퍼스 풀스택 과정/백엔드] - 백엔드1-10. JSP-9: JSTL를 이용한 로그인 로그아웃
Servlet클래스의 ServletConfig(서블릿 초기화 파라미터) - Init( )
서블릿을 생성하고, 초기화할 때 자동으로 호출되는 메서드로 한 번만 호출한다.
HttpServlet의 최상위 클래스인 Servlet 인터페이스에 정의되어 있다.
public void init(ServletConfig config) throws ServletException;
서블릿 컨테이너가 서블릿을 생성하려고 할 때 하나의 ServletConfig 객체를 생성한 후 이 객체를 이용해 서블릿을 초기화 할 수 있다.
서블릿의 초기화 파라미터는 web.xml 파일에 기재한다.
초기화 파라미터는 String으로만 저장할 수 있고, 리턴 값 또한 String이다.
서블릿 안에서 초기화 파라미터 값을 가져오려면 ServletConfig의 getInitParameter( )를 이용해야한다.
- 이메서드는 서블릿클래스의 상위클래스(super)인 javax.servlet.GenericServlet 에 속하기 때문에 메서드 이름만 가지고 호출 가능하다.
- 초기화 파라미터의 이름을 파라미터로 넘겨주면 이 메서드는 그 이름에 해당하는 초기화 파라미터의 값을 리턴한다.
web.xml 파일 servlet 클래스 파일 <servlet>
<servlet-name>form</servlet-name>
<servlet-class>projectName.servletClassName</servlet-class>
<init-param>
<param-name>name</param-name>
<param-value>단호박</param-value>
</init-param>
</servlet>// 매개변수로 web.xml에서 지정했던 param-name 데이터를 가져오기
String name = getInitParameter("name");
ServletConfig의 과정
- 서블릿이 생성될 때 서블릿 컨테이너가 web.xml에 적혀진 파라미터를 읽는다.
- ServletConfig은 web.xml에 매개변수(parameter)를 설정할때, init-param을 이용한다.
- ServletConfin는 파라미터를 servlet항목에 포함시킨다.
- 서블릿 컨테이너는 ServletConfig객체를 만든 뒤, 읽었던 파라미터 정보를 ServletConfig에 넘겨준다.
- 서블릿 컨테이너는 정보를 가지고 있는 ServletConfig를 해당 서블릿의 init()메서드의 파라미터로 넣어준다.
- 해당 Servlet의 초기화 완료
Servlet클래스의 ServletContext(서블릿 초기화 파라미터)
하나의 서블릿이 아니라 모든 웹 어플리케이션의 파라미터로 사용된다. 특정한 서블릿 외에 다른 서블릿이나 JSP에서도 파라미터를 사용할 수 있다.
서블릿의 정보를 가져오기 위해서는 서블릿 컨테이너에 접근해야 하는데, 이 접근을 가능하게 해주는 것이 ServletContext이다.
ServletContext는 서블릿 컨테이너가 시작될 때 웹서버에 등록된 웹 애플리케이션 단위로 하나의 ServletContext 객체가 자동으로 생성되고 웹 애플리케이션 서비스가 중지될 때 소멸한다.
ServletContext sc = getServletContext( );
- ServletContext는 ServletConfig의 getServletContext( )를 사용해서 얻는다.
- servlet은 HttpServlet 상속, HttpServlet은 ServletConfig 구현 -> getServletContext( )를 바로 사용 가능
- ServletContext를 사용하기위해서는 import.javax.servlet.ServletContext을 해야한다.
ServletContext의 과정
- 어플리케이션이 시작될때 서블릿 컨테이너가 web.xml에 적혀진 파라미터를 읽는다.
- ServletContext는 web.xml에 매개변수(parameter)를 설정할때, context-param을 이용한다.
- ServletContext는 파라미터를 servlet항목이 아닌 web-app에 포함시킨다.
- 서블릿 컨테이너는 ServletContext객체를 만든 뒤, 읽었던 파라미터 정보를 ServletContext에 넘겨준다.
- 같은 웹 어플리케이션에 있는 모든 Servlet과 JSP가 ServletContext에 접근할 수 있다.
예제
1. web.xml
<servlet>
<servlet-name>InitParamServlet</servlet-name>
<servlet-class>myApp.InitParamServlet</servlet-class>
<init-param>
<param-name>userid</param-name>
<param-value>pumpkin</param-value>
</init-param>
<init-param>
<param-name>username</param-name>
<param-value>호박</param-value>
</init-param>
</servlet>
<context-param>
<param-name>userage</param-name>
<param-value>20</param-value>
</context-param>
<servlet-mapping>
<servlet-name>InitParamServlet</servlet-name>
<url-pattern>/init</url-pattern>
</servlet-mapping>
<init-param> | 특정 서블릿에서만 사용가능한 파라미터 값(지역변수) |
<context-param> | 모든 서블릿에서 사용가능한 파라미터 값(전역변수) |
어느 하나의 서블릿 태그안에 속하는 것이 아닌 독립적으로 추가 | |
<param-name> | 매개변수의 이름 정의 |
<param-value> | 매개변수의 값 정의 |
2. 서블릿 생성(InitParamServlet.java)
package myApp;
//@WebServlet("/init")
public class InitParamServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// web.xml의 context-param 데이터를 가져오기
// import.javax.servlet.ServletContext
ServletContext sc = getServletContext();
String age = sc.getInitParameter("userage");
//web.xml의 init-param 데이터를 가져오기
String id = getInitParameter("userid");
String name = getInitParameter("username");
// 한글인코딩
response.setContentType("text/html;charset=UTF-8");
// response 객체 쓰기를 하기위해 PrintWriter 객체를 얻어온다.
PrintWriter pw = response.getWriter(); // import PrintWriter
pw.println("<!DOCTYOE html><html><head><title>init테스트</title></head><body>");
pw.println("<ul><li>아이디="+id+"</li>");
pw.println("<li>이름="+name+"</li>");
pw.println("<li>나이="+age+"</li></ul></body></html>");
}
}
ServletConfig와 ServletContext
ServletConfig | ServletContext | |
초기화 시기 | 서블릿을 생성할 때 | 웹 어플리케이션이 시작될 때 |
객체의 수 | 서블릿 당 하나 | 웹 어플리케이션 당 하나 |
접근 범위 | 특정 서블릿 | 모든 웹 어플리케이션 |
web.xml에서의 사용법 | servlet항목 안에 <init-param> | web-app항목 안에 <context-param> |
https://dololak.tistory.com/47
'멀티캠퍼스 풀스택 과정 > 백엔드' 카테고리의 다른 글
Spring:2 home.jsp와 연결 (@어노테이션), Model, View, Controller (0) | 2022.03.08 |
---|---|
Spring:1 [Spring환경설정] STS4 설치후 프로젝트 생성하고 출력 (0) | 2022.03.07 |
백엔드2-1. Servlet-1 Servlet기초와예제, HttpServlet, web-xml, url(get,post방식) (0) | 2022.03.05 |
백엔드1-10. JSP-9: JSTL를 이용한 로그인 로그아웃 (0) | 2022.03.05 |
백엔드1-9. JSP-8: JSTL 기초(taglib를 사용한 <c:>태그사용) (0) | 2022.03.05 |