본문 바로가기

프로그래밍/Servlet&JSP

(5)
redirect & dispatch 요청에 대한 응답을 다른곳에서 처리하도록 지정할 수 있는 방법. redirect : 완전히 다른 URL로 요청을 방향을 전환. dispatch : 다른 서블릿이나 JSP로 처리를 위임. ※ redirect이 처리 순서 1. 브라우저 주소 창에 URL을 입력하고 서버로 요청을 전송. 2. 서블릿에서 다른 url로 redirect. 3. HttpServletResponse의 sendRedirect() 메서드를 호출. 4. 브라우저로 전송할 Http response에는 status 코드값으로 301과 Header에 Location으로 요청을 다시 보낼 url을 포함. 5. 브라우저는 전달받은 url로 다시 요청. (다른 url로 재요청) 6. 서버에서 요청을 처리 하고 브라우저로 response 전달. 7. ..
HttpServletRequest 객체의 port 조회 메서드 구분 클라이언트의 요청에 대한 객체로 HttpServletRequest 만들어져서 요청 정보들이 담기게 되는데, 이 객체안에는 포트를 조회하는 3개의 메서드가 있다. 1. getRemotePort() - 이 메서드가 실행되는곳은 서버일테니, 서버 입장에서의 원격지는 클라이언트이다. 한마디로 클라이언트의 포트. 2. getServerPort() - 클라이언트의 요청을 리스닝하고 있는 포트. 만약 톰캣을 통해 서블릿을 서비스하고 있다면, 톰캣에 할당한 포트. 3. getLocalPort() - 스레드를 위한 포트. 클라이언트의 요청은 처음에 serverPort로 받지만, 처리해야할 요청이 여러개라면 이후 새로운 포트를 열고 스레드를 할당해서 처리한다.
서블릿 라이프사이클 1. 컨테이너가 서블릿 클래스 파일을 찾고 클래스에 로딩한다. ※ 컨테이너마다 다른 클래스 로딩방법 컨테이너가 시작될 때 최초 클라이언트 요청 시 2. 서블릿을 인스턴스화해서 메모리에 로드한다. 3. init() 메서드를 호출한다. 4. service() 메서드를 호출한다. 요청이 들어오면 새로운 스레드(또는 스레드 풀의 스레드)에서 실행된다. 5. service()메서드에서 doGet이나 doPost를 실행. (메모리 로드된 채로 요청이 들어올 때마다 4-5번 사이클 반복) 6. 서블릿이 제거될때 destroy() 메서드를 실행한다. (컨테이너의 종료 또는 리로드) ※ 서블릿 라이프사이클 메서드별 정리 메서드 호출되는시점 목적 재정의 필요 init() 해당 서블릿의 최초 요청시 단 한번만 실행. 서블릿..
컨테이너(예 : 톰캣)의 역할 1. 웹서버와의 통신 컨테이너는 웹서버와의 통신 API를 지원한다. 개발자가 직접 웹서버와의 데이터 교환을 신경 안써도 된다. 2. 서블릿의 생명주기 관리 서블릿 클래스를 알아서 생성, 초기화, 요청에 대한 실행, 종료를 시킨다. 3. 멀티스레딩 지원 요청이 들어오면 자바 스레드로 서블릿을 실행. 4. 선언적인(xml) 보안 관리 자바 코드가 아닌 XML 배포 서술자에 기록해서 보안관리를 간편하게 가능. (컴파일을 하지 않아도 됨) ※ 배포서술자(DD, Deployment Descriptor)란? 웹 애플리케이션의 구동에 대한 환경설정을 기술하는 XML로 된 파일이다. 예를 들어, 서블릿 배포를 위해 URL과 서블릿 파일을 매핑하고, 보안설정, 에러페이지 설정을 한다. 5. JSP 지원 JSP 파일을 읽..
CGI와 서블릿 서블릿 관련 책을 보다 CGI와 서블릿의 차이에 대한 내용이 나왔다. CGI에 대한 궁금증이 생겨 좀더 찾아보았는데, 서칭할수록 더 혼란만 오게 되었다. 그 이유는 CGI에 대한 개념을 알게된 이후인데 아래는 CGI와 서블릿에 대한 설명이다. CGI Common Gateway Interface(공통 게이트웨이 인터페이스)의 약자. 정의를 보면 웹서버와 외부 프로그램간의 데이터를 주고받는 방법에 대한 규격인데, 웹 서버가 동적인 컨텐츠도 제공할 수 있게하는 방법이다. 웹 서버는 미리 서버상에 준비되어 있는 정적 컨텐츠(html, 이미지)만 제공할 수 있다. 하지만 사람들은 웹 서버가 클라이언트의 요구에 따라 동적으로 컨텐츠를 만들어 제공할 수 있게 되길 원했다. 그래서 동적 컨텐츠를 생성할 수 있는 프로그..