WEB Application

20/08/31 웹 프로그래밍 기초 (절대경로 상대경로, 서블릿 콜백, java with resource)

Tech Signal 2020. 8. 31. 21:51

fileList.tmpl 예제


자원의 종류

1. 파일시스템 리소스

2. 클래스패스 리소스

웹 리소스

 

URI: Uniform Resource Identifier 에 속하는 것들

 

URL (Uniform Resource Locator) - 이 방법만 쓴다 
URN (Uniform Resource Naming)
URC (Uniform Resource Contents)

-------> naming, contents의 경우 유일성 확보가 어렵다.

 

절대 경로 vs. 상대 경로

절대경로 예시

1. 절대경로: root부터 depth 구조 상의 모든 경로를 표기

      Client side: 반드시 context root부터 시작. localhost에서 시작할 경우, 배포 후 localhost가 도메인으로 바뀔 수도 있기 때문

      Server side: 파일이 이미 서버 안에 있으니까 context root를 제외하고 그 이후 경로를 표기. !!서블렛에선 반드시 절대경로!!

 

2. 상대경로: 브라우저의 현재위치를 시작점으로 잡는다. 

<img src = "<%=request.getContextPath()%>/images/cute1.png" /> 

 

** 경로 쓸땐 가장 먼저 해당 코드가 어디서 쓰이는지 고민해야함.  
만약 html이면 클라이언트 사이드겠져? 
서버에서는 컨텍스트 무조건 쓰지마


서블릿: 자바 기반의 서버 사이드 웹 어플리케이션 모듈을 구현하기 위한 스펙
 
   1. 개발 단계
    1) HttpServlet의 구현체 (=extends HttpServlet) 작성 
    2) compile, 현재 컨텍스트의 classpath에 배포
    3) WAS에 서블렛을 등록 
        - web.xml : servlet 먼저 쓰고-> servlet name, servlet-class, init-param, load-on-startup 
        - @webServlet
    4) 매핑: 클라이언트가 브라우저라는 에이전트를 통해 주소체계를 이용해 요청할 때, 해당 서블릿이 동작할 수 있는 Command URI 결정

       - web.xml : servlet mapping 먼저 쓰고 -> servlet names, url-patterns
       - @webServlet
    5) WAS 재구동

 

2. W.A.S의 역할

     : Server, WAS(Web Application Server) app = context.

was가 제공하는건 앱이자 컨텍스트, Container(=web container/ servlet container)

 

!!컨테이너란? 내부 컴포넌트의 life cycle을 관리하는 관리자

          ( e.g. javaFX- 에서 뭐 만들려면 버튼->페인->...페인 죽으면 버튼도 죽는다)

 

     이 라이프사이클 내에서 컨테이너인 톰캣이 무슨 역할을 하는가?    

 

lifecycle callback: 

lifecycle 내에서 각 시점별로 호출할수있는 callback 메서드가 서블릿 스펙에 정의되어있다. 

    1) 초기화 - 아무런 설정(load-on-startup)이 없는 한, 해당 서블릿에 대한 최초의 요청이 발생하면 초기화 진행(톰캣이 서블릿객체를 생성.) 
    2) 소멸 - 아무런 설정이 없는 한, 서버는 서블릿을 싱글톤의 형태로 관리
    

=> 즉, 기본 설정에서는 서블릿에 요청이 발생해야 객체가 만들어지고 그 객체는 1개(싱글톤)다.

 

request callback:
    service: 모든 request method에 공통적으로 적용될 코드를 정의 
    doXXX: 특정 request method에 대해서만 적용할 코드를 정의 


String initName = config.getInitParameter("initName");

String filePath = getClass().getResource(initName).getFile();

----이렇게 servlet 안에서 init()을 하면 web.xml에서 init-param한 parameter를 getInitParmeter("")을 함으로써 불러올 수 있다. 

 

 

<init-param>

init()을 호출할때 서블릿 컨테이너가 서블릿에 전달하는 데이터

 

<load-on-startup>

서버 시작과 동시에 그 서블랫 객체 생성됨 (서버 시작하자마자 init() 실행) (요청 없어도 미리 생성해두는 것) (안의 숫자는 객체를 만들어놓을 순서

 

+ service는 요청이 들어왔을 때 doGet()이나 doPost()를 실행해주기 위함. 만약 Get이던 Post던 똑같은 거 하고싶다! 그러면 아예 다 service()에 적으면 됨.

 

+doGet(), doPost()의 경우 super생성자를 무조건 지워줘야함.

객체 소멸시키기


try with resource구문 (자바 1.7부터 사용)

try(

          FileInputStream fis = new FileInputStream(imageFile);
          OutputStream os = resp.getOutputStream();

){

         //예외발생할만한 코드 적기

}

 

=> try(Closable 가능 객체의 생성 및 코드 작성) {

 

}

이렇게 하면 try(){}블럭이 끝날 때 자동으로 해당 객체가 close()된다.


kr.or.ddit.utils;kr.or.ddit.utils;