<<스터디 주제>>
- 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() 메소드를 호출해 요청에 대한 처리와 처리결과를 클라이언트에게 전달(응답)
- 생성자가 호출되어 인스턴스 생성
- 서블릿 인스턴스에 의해 가장먼저 한번만 호출되는 init()메소드 호출
- 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 |