Hayden's Archive
[Web] 웹 도입 / Servlet / Servlet API / GenericServlet 본문
- 결론적으로 클래스 필드로 정보가 저장되는데 최종적으로 정보를 넣는 곳이 DB. DB에 액세스하기 위한 프로그램이 DAO.
- Model : DAO와 VO를 한꺼번에 가리키는 말.
- 개발의 순서는 Back부터 시작. 그래서 프로그램 배울 때도 Back부터 시작. 그게 안 되어있으면 앞으로 dependency 할 수 없음.
- 제이쿼리는 Front UI 프레임워크 => 프론트 쪽에서 쓰이는 자바스크립트를 다 모아놨다.
- 프로그램은 동적. 들어오는 입력값에 따라 결과값이 달라짐. 이게 프로그래밍. html, css는 값이 들어올 공간도 없을 뿐더러 값이 고정.
- 프로그램의 전반적인 매커니즘을 알려면 연결구조를 알아야 한다. 연결구조를 알려면 이 부분을 알아야 함.
- 화면은 2가지가 있음. 초기(intro) 페이지, 결과 페이지. (html로 결과를 만들수도 있고 다른 걸로 만들수도 있다)
- 서블릿은 오각형으로 그린다.
- 서블릿과 자바의 차이?
Front UI에서의 기술은 브라우저에서 실행되는 기술. Model에서의 기술은 메인이 있어야 돌아가고 메인은 로컬 JVM 머신에서 돌아감. 궁극적으로 Tomcat이라는 서버사이드 => 여기에서 돌아감.
J2EE 스펙은 JVM도 돌고 서버사이드도 같이 돈다. JVM 위에 템플릿 서버가 탑재되어져 있는 구조. 같이 돌아감.
서블린 관련 환경
- new-dynamic web project에서 dynamic web module version을 2.5로 낮춰서(WAS를 직접 핸들링할 수 있는 부분을 남겨두겠다) WAS의 원리를 이해할 것. 이해하고 나서 Spring Framwork에 가서는 높은 걸 쓸 것.
- 그리고 제목 쓰고 next 누르면 아래 Default output folder: build\classes 있음.
- 2.5로 바꾸면 generate web.xml deployment descriptor 자동으로 체크되어 있음. (3.1로 바꾸면 annotation으로 가서 web.xml 못봄. WAS의 매커니즘을 많이 놓침.)
- 웹에서는 2.5 버전으로 계속 가는 게 좋음. 프레임워크에서 3.0으로 바꿔서 Maven 기반으로 가는 게 좋긴 함. 2.5 버전으로 하는 이유는 web.xml을 보겠다는 이야기고 WAS를 주시하겠다는 얘기
- tomcat 홈에서
작성한 코드가 있는 폴더. => webapps
서버의 설정 관련 파일이 있는 폴더 => conf
서버의 실행 관련 파일이 있는 폴더 => bin
- html, jsp는 Context Path 폴더 바로 아래 위치한다.
(웹 서버) != (컨테이너==WAS)
★ WebContent (Context Path) => 웹 서버 레벨 (상위) / WEB-INF => 컨테이너 레벨 (하위)
- 서블릿은
tomcat 홈 - webapps - context path - WEB-INF 에서
3개(classes, lib, web.xml)가 무조건 있어야 함.
- classes 폴더 안에 서블릿, 자바 클래스가 들어간다.
- lib는 해당 Context Path의 라이브러리 폴더이다. // 이클립스에서 이 Context Path의 lib에 라이브러리 자료를 넣으면... 이 프로젝트 하나에만 먹힌다. ==> 그런데 모든 프로젝트마다 일일이 라이브러리 자료를 넣으면 힘들다. 모든 프로젝트에 한꺼번에 라이브러리 자료 쓰려면 더 상위에 있는 탐캣홈의 lib에 넣으면 된다. 여기도 넣고 저기도 넣으면 충돌날 수 있음.
정리)
Servlet API
아파치 홈페이지 ( http://tomcat.apache.org/ ) 들어가서 documentation - tomcat 7.0 클릭해서 Reference - Servlet Javadocs 클릭 => 서블릿 api임. 즐겨찾기 해두고 열심히 봐두기.
http://tomcat.apache.org/tomcat-7.0-doc/servletapi/index.html
package에서 javax.servlet과 javax.servlet.http 두 개를 중점적으로 보면 됨.
javax.servlet 에서 Classes - GenericServlet
tomcat.apache.org/tomcat-7.0-doc/servletapi/javax/servlet/GenericServlet.html
- servlet이 실행되는 곳. Tomcat, Server Side, WAS, Container (여기서 넷 다 같은 곳을 지칭)에서! WAS와 Container는 같다.
- 아래의 서블릿 A는 GenericServlet을 상속받는다.
- 無에서 만들려고 하면 시간이 오래 걸리고 미리 받아놓은 것을 가져다 쓸 때 자바에서의 상속!
- 서블릿을 만들 때는 상속받으면 됨. 이게 javax.servlet 패키지에 담겨져 있는데 그 중에서도 GenericServlet을 상속받으면 된다. GenericServlet은 서버사이드에서 돌아가는 서블릿을 만드는 핵심 기술
- GenericServlet은 부모가 2개임.(자바에서는 다중상속 안 됨. 부모가 2개라는 말은 부모 둘 다 인터페이스. 첫번째 부모 Servlet, 두번째 부모 ServletConfig)
- GenericServlet이 부모로부터 물려받지 않은 독자적인 기능 log()
- service()는 오버라이딩해서 쓰는 메소드이다.
- id, pass 입력하고 send(input type=submit) 누르면 form action=""에 입력된 서블릿으로 날아감. 클라이언트에서 취하는 모든 요청은 GenericServlet의 service() 메소드로 들어감. service()는 모든 요청을 받는 역할.
service(ServletRequest, ServletResponse){}
- service() 메소드 인자값이 2개임. ServletRequest와 ServletResponse. 요청하는 도시락 따로 응답하는 도시락 따로.(따로따로 보냄) 요청하는 모든 정보는 ServletRequest 객체에 담겨서 들어옴. 결과는 ServletResponse 객체에 담겨서 응답함.
- 그럼 이 서블릿 인스턴스는 누가 만드는가? ==> WAS(Web Application Server)가 만든다.