Web Dev

59일차 Study

수오니니 2022. 1. 6. 10:54

<<스터디 주제>>

- Servlet(ServerRoot, ContextRoot, ServeltContext, ServletConfig, Init)

 

<<스터디 내용>>

localhost:8000/servelt/hello.xyz

 

1st / : ServerRoot - 최상위

2nd / : ContextRoot - 최상위

 

@WebServlet

: 서블릿 클래스를 서블릿으로 등록하고 URL 주소를 매핑하기 위한 어노테이션(Annotation)

⇒ [web.xml] 파일의 servlet 엘리먼트 및 servlet-mapping 엘리먼트에 대한 기능 제공

    어노테이션 속성을 이용하여 서블릿 이름 또는 URL 주소에 대한 매핑 처리 등을 설정

⇒ name 속성 : 서블릿 이름을 속성값으로 설정 - name 속성을 생략하면 클래스명을 서블릿 이름으로 자동 설정

⇒ value 속성(필수) : 서블릿에 대한 요청 URL 주소를 속성값으로 설정 - 다른 속성이 없는 경우 속성값만 설정 가능

⇒ 어노테이션 속성은 , 기호로 구분하여 나열 가능

※ Spring에서는 xml파일 수정이 아닌 Annotation을 선언해서 프로그램의 실행에 필요한 정보를 등록하여 사용!!

 

service

: 클라이언트 요청에 요청 처리 및 응답 결과를 제공하기 위해 자동 호출되는 요청 처리 메소드

 

webapps

: 웹에서 쓰일 웹 문서를 만드는 영역

  • meta-inf, web-inf : private 폴더 . 클라이언트에서 접근하지 못하는 폴더 → 서버에서는 접근 가능
    ⇒ 시스템 경로 servlet “\” WEB-INF = context root

 

서블릿(웹프로그램)은 클라이언트 요청에 의해 WAS(Web Application Server)에 등록된 서블릿 클래스를 읽어 메모리에 저장하고 서블릿 인스턴스를 생성하여 service() 메소드를 호출요청에 대한 처리와 처리결과를 클라이언트에게 전달(응답)

  1. 생성자가 호출되어 인스턴스 생성
  2. 서블릿 인스턴스에 의해 가장먼저 한번만 호출되는 init()메소드 호출
  3. service 메소드 호출

 

파일 입출력

protected void service
(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	response.setContentType("image/jpeg");
	ServletOutputStream out=response.getOutputStream();
	String filePath=request.getServletContext().getRealPath("/WEB-INF/Koala.jpg");
	FileInputStream in=new FileInputStream(filePath);
	while(true) {
				int readByte=in.read();
				if(readByte==-1) break;
				out.write(readByte);
			}
	in.close();
}

 

 

init()

: WAS 프로그램이 서블릿 인스턴스를 생성하고 가장 먼저 한번만 호출하는 메소드.

⇒ 생성자 대신 init() 메소드로 필드 초기화 작업

※ 생성자가 있음에도 init() 메소드를 overide하여 초기화 작업을 해주는 이유

: ServletConfig 인스턴스를 매개변수로 제공받아 필드에 필요한 값을 저장할 수 있기 때문

 

web.xml 내 삽입!

<context-param> : 모든 컨텍스트(웹프로그램)에게 필요한 값을 제공하기 위한 부모 엘리먼트

<param-name> : 값을 제공하기 위한 이름(식별자)를 설정하는 엘리먼트

<param-value> : 제공할 값을 제공 설정하는 엘리먼트

 

 

Today's issue

Init 메소드, ServletConfig, ServletContext의 관계 흐름에 대한 정확한 이해가 중요하다 생각.

이해하기 어렵지만 풀어서 해석해보려함.

 

요청 → ServletConfig(컨텍스트 관련 환경정보를 저장한 인스턴스) → ServletContext(서버의자원을 이용 → getInitParameter해서 변수에 접근해서 초기화)

 

■ Context : WAS가 사용할 수 있는 WEB 자원(Tomcat의 webapps폴더 내에 위치함)

→ IDE의 workspace가 아닌 WAS에 의해 실행된 후 webapps 폴더 내에 생긴 servlet name(project)

→ WEB-INF\classes를 확인해보면 servlet class 파일들이 생겨있음!!!

→ IDE의 workspace의 webapp폴더를 Context Root라 하고, 해당 폴더 내에 있는 파일이 WEB자원이 될 예정인 파일들이다. (WAS에 의해 실행되고 난 후)

 

■ ServletConfig : 요청에 대한 정보를 반환.

 

■ ServletContext : 클라이언트가 요청한 정보를 저장

 

1. 클라이언트가 정보를 요청

2. 요청한 정보는 클라이언트가 접근할 수 없는 ContextRoot(webapps)에 존재함.

3. 서버가 정보를 접근해서 정보를 전달해줘야함.

4. 환경정보를 저장하고 있는 ServletConfig를 통해 ServletContext에 접근

5. 서버의 자원(ServletContext)을 이용해 getInitParameter메소드를 호출하여 변수에 접근해서 초기화

 

 

'Web Dev' 카테고리의 다른 글

61일차 Study  (0) 2022.01.11
60일차 Study  (0) 2022.01.07
58일차 Study  (0) 2022.01.04
57일차 Study  (0) 2022.01.04
주말 개인 Study  (0) 2022.01.03