본문 바로가기
레거시

2021.1.5

by GroovyArea 2022. 1. 5.

- 하루 정리 - 

  • Servlet 복습 및 정리
  • 세미프로젝트 진행상황 정리

- 오늘 공부 내용 - 

Servlet

  • / : 최상위 디렉토리
  • / contextroot 디렉토리 (/)가 있어야 하는 이유
  • @WebServlet : 서블릿 클래스를 서블릿으로 등록하고 URL 주소를 매핑하기 위한 어노테이션(Annotation) ⇒ web.sml 파일의 servlet 엘리먼트 및 servlet-mapping 엘리먼트와 동일한 기능 제공
  • 어노테이션 속성을 이용하여 서블릿 이름 또는 URL 주소에 대한 매핑 처리 등을 설정
  • @WebServlet 어노테이션 속성을 이용하여 서블릿 이름 또는 URL 주소에 대한 매핑 처리등을 설정
  • ⇒ name 속성 : 서블릿 이름을 속성값으로 설정 - name 속성을 생략하면 클래스명을 서블릿
  • ⇒ value 속성 (필수) : 서블릿에 대한 요청 URL 주소를 속성값으로 설정 - 다른 속성이 없는 경우
  • ⇒ 어노테이션 속성은 , 기호로 구분하여 나열 가능
  • 서블릿은 단점이 있다. 브라우저에 출력할 문서를 직접 만들어줘야 하기 때문.
  • webapp 폴더는 요청 불가 서버만 접근 가능 (보안을 요하는 정보나 파일들이 들어있음)

@WebServlet : 서블릿 클래스를 서블릿으로 등록하고 URL 주소를 매핑하기 위한 어노테이션(Annotation)
 => [web.xml] 파일의 servlet 엘리먼트 및 servlet-mapping 엘리먼트와 동일한 기능 제공
@WebServlet 어노테이션 속성을 이용하여 서블릿 이름 또는 URL 주소에 대한 매핑 처리 등을 설정
 => name 속성 : 서블릿 이름을 속성값으로 설정 - name 속성을 생략하면 클래스명을 서블릿 이름으로 자동 설정
 => value 속성(필수) : 서블릿에 대한 요청 URL 주소를 속성값으로 설정 - 다른 속성이 없는 경우 속성값만 설정 가능
 => 어노테이션 속성은 , 기호로 구분하여 나열 가능

@WebServlet("/first.itwill") 
// 이름 생략 및 URL 주소 매핑 이렇게 하면 web.XML 파일의 mapping과 동일

서버에 저장된 이미지 파일의 시스템 경로를 반환받아 저장
HttpServletRequest.getServletContext() : ServletContext 인스턴스를 반환하는 메소드
ServletContext : 클라이언트가 요청한 컨텍스트 정보를 저장한 인스턴스
컨텍스트(Context) : 웹서버(WAS)에 의해 사용될 수 있는 자원 - HTML 문서, 이미지 파일 등
ServletContext.getRealPath(String contextFilePath) : 컨텍스트 파일의 시스템 경로를 반환하는 메소드

String filePath=request.getServletContext().getRealPath("/WEB-INF/Koala.jpg");
// 해당 경로의 이미지(파일)을 접근하여 변수에 저장

서블릿 요청 시 전달된 값 (사용자 입력 값)을 반환받아 저장
HTTPServletRequest.getParameter(String name) : 웹프로그램 요청 시 전달된 값을 얻어와 반환하는 메소드 - 전달값은 무조건 문자열(String 인스턴스)로 반환
 => GET : QueryString으로 전달된 값의 이름(식별자)을 이용하여 전달값 반환
 => POST : 입력태그의 name 속성값을 이용하여 전달값 반환

 이름(name)에 해당하는 전달값이 존재하지 않는 경우 null 반환
 => GET 방식에서는 이름만 있고 Null String 반환

String id = request.getParameter("id");
//해당 id를 요청 시 전달된 값을 HTML에서 가져온다.
<tr>
				<th bgcolor="44ff44"><font size="2">아이디</font></th>
				<td bgcolor="white" width="300"><input type="text" size="10"
					name="id" class="TXTFLD"></td>
			</tr>

=> 요놈에서 가져옴

  <!-- context-param : 모든 컨텍스트(웹프로그램)에게 필요한 값을 제공하기 위한 부모 엘리먼트 -->		
  <context-param>
  	<!-- param-name : 값을 제공하기 위한 이름(식별자)를 설정하는 엘리먼트 -->
  	<param-name>babico</param-name>
  	<!-- param-name : 제공할 값을 제공을 설정하는 엘리먼트 -->
  	<param-value>빠삐코</param-value>
  </context-param>

 

서블릿(웹프로그램)은 클라이언트가 요청에 의해 WAS(Web Application Server)에 등록된 서블릿
클래스를 읽어 메모리에 저장하고 서블릿 인스턴스를 생성하여 service() 메소드르 호출해 요청에 대한 처리처리 결과를 클라이언트에게 전달(응답)
-> 서블릿 인스턴스가 이미 존재할 경우 인스턴스를 생성하지 않고 기존 서블릿 인스턴스로 service() 메소드 호출 -> 서블릿 인스턴스는 WAS가 종료되면 소멸.

-> WAS 프로그램의 주요 기능 중 하나는 서블릿 관련 인스턴스를 관리하는 컨테이너(Container) 기능
 Container? 인스턴스의 생명주기(LifeCycle)를 관리(create, use, extinction) 하는 프로그램

 

생성자란?

생성자(Constructor) : 인스턴스를 생성하기 위한 특별한 메소드
=> 초기화 작업 : 필드 초기값 저장
=> 클라이언트 요청 시 WAS 프로그램에 의해 서블릿 클래스를 인스턴스로 생성할

 

init()?

init() : WAS 프로그램이 서블릿 인스턴스를 생성하고 가장 먼저 한번만 호출하는 메소드
 => 생성자 대신 init() 메소드로 필드 초기화 작업
생성자 대신 init() 메소드로 초기화 작업을 하는 이유는 ServletConfig 인스턴스를 매개변수로 제공받아 메소드를 호출하여 필요한 값을 필드값으로 저장 가능
ServletConfig : 컨텍스트 관련 환경정보를 저장한 인스턴스
 => [web.xml] 파일에 설정된 값을 제공받아 사용 가능 - 유지보수의 효율성 증가

@Override
	public void init(ServletConfig config) throws ServletException {
		System.out.println("### LifeCycleServlet 클래스의 init() 메소드 호출 ###");

		// ServletCongig.getServletContext() : ServletContext 인스턴스를 반환하는 메소드
		// ServiceContext.getInitParameter(String name) : [web.xml] 파일의 context-param
		// 엘리먼트로 제공되는 값을 얻어와 반환하는 메소드
		babico = config.getServletContext().getInitParameter("babico");
	}

=>> init() 메소드 오버라이드 후 재정의

 

destroy()?

destroy() : WAS 프로그램이 서블릿 인스턴스를 소멸하기 전에 한번만 호출하는 메소드
=> WAS 프로그램 종료 시 서블릿 인스턴스는 WAS 프로그램에 의해 소멸

@Override
	public void destroy() {
		System.out.println("### LifeCycleServlet 클래스의 destroy() 메소드 호출 ###");
	}

 


- 세미 팀플 -

> 각 페이지 크롤링 후 목요일까지 구글 ppt 공유 드라이브 이용해서 화면 정의서 만들게 시키기

> 소스 받은 거 import 시켜보기


- 스터디 내용 및 결과 - 

=> configContext, ServletContext의 차이점 바로 알기

=> 웹 프로그램의 흐름에 대한 servlet의 역할 바로 알기

반응형

'레거시' 카테고리의 다른 글

2022.1.7의 기록  (0) 2022.01.07
2022.1.6의 기록  (0) 2022.01.07
2021.1.4의 기록  (0) 2022.01.04
2022.1.3의 기록  (0) 2022.01.03
2022.1.2의 기록 (25살의 첫 일요일)  (1) 2022.01.02