460 likes | 1.04k Views
3 장 . 웹 어플리케이션과 JSP 및 Servlet 의 이해. 1. 웹 어플리케이션 개념 및 폴더 구조. 웹 어플리케이션의 개념 독립 어플리케이션 (Stand-alone Application) 웹 어플리케이션 (Web Application) 웹 브라우저 상에서 수행되는 어플리케이션 HTTP 와 HTML 을 기본으로 사용 웹 어플리케이션이 Tomcat 에서 구현될 때의 규칙 임의의 웹 어플리케이션은 webapps 폴더 하위에 하나의 폴더로 구성. jspbook 웹 어플리케이션
E N D
3장. 웹 어플리케이션과 JSP 및 Servlet의 이해 제3장
1. 웹 어플리케이션 개념 및 폴더 구조 • 웹 어플리케이션의 개념 • 독립 어플리케이션 (Stand-alone Application) • 웹 어플리케이션 (Web Application) • 웹 브라우저 상에서 수행되는 어플리케이션 • HTTP와 HTML을 기본으로 사용 • 웹 어플리케이션이 Tomcat 에서 구현될 때의 규칙 • 임의의 웹 어플리케이션은 webapps 폴더 하위에 하나의 폴더로 구성 jspbook 웹 어플리케이션 (첫 번째 웹 어플리케이션) 제3장 웹 어플리케이션과 webapps 내의 폴더
1. 웹 어플리케이션 개념 및 폴더 구조 • 웹 어플리케이션의 개념 webapps ‘폴더’ 내에 새로운 폴더 생성 = 새로운 ‘Context’ 생성 (ServletContext: servlet들이 실행되는 환경) = 새로운 웹 어플리케이션들 생성 jspbook 웹 어플리케이션 (첫 번째 웹 어플리케이션) myapp 웹 어플리케이션 (두 번째 웹 어플리케이션) webapps 내의 두 번째 웹 어플리케이션 생성 제3장
1. 웹 어플리케이션 개념 및 폴더 구조 • 웹 어플리케이션의 개념 • 웹 어플리케이션 폴더는 하나의 ServletContext와 매핑 • ServletContext는 하나의 웹 어플리케이션 폴더 내에 여러 JSP 페이지와 Servlet 들이 ‘공동으로’ 활용할 수 있는 저장소로 활용 • 즉, 어플리케이션 환경(environment) • 서로 다른 두 개의 웹 어플리케이션은 ServletContext 객체와 매핑되어 각자 독립적인 공간에 자신만의 정보를 관리 • 웹 어플리케이션 폴더와 URL간의 매핑 • URL에 웹 어플리케이션 지정 없이 http://localhost:8080 으로요청 • webapps 폴더 밑의 ROOT 폴더로 자동으로 접근 • http://localhost:8080/hello.jsp webapps/ROOT/hello.jsp 파일 접근 • http://localhost:8080 webapps/ROOT/index.html 파일 접근 제3장
1. 웹 어플리케이션 개념 및 폴더 구조 • 웹 어플리케이션 폴더와 URL간의 매핑 • webapps 내에 jspbook과 myapp 웹 어플리케이션을 생성시에 함께 생성되는 URL • 위 URL로 접근하면 jspbook 및 myapp 폴더 밑의 index.html 또는 index.jsp 파일을 접근 • index.html,index.jsp: 파일명까지 정확하게 입력하지 않아도 폴더명만으로도 찾아지는 디폴트 파일 제3장
1. 웹 어플리케이션 개념 및 폴더 구조 • 웹 어플리케이션 폴더(Context)와 URL간의 매핑 • 중요 메소드 2개 • request.getContextPath() • 웹 어플리케이션의 경로를 리턴 • application.getRealPath("/") • 웹 어플리케이션의 하드디스크상 실제 경로를 리턴 [예제 3.1] jspbook\ch03\path.jsp 제3장
1. 웹 어플리케이션 개념 및 폴더 구조 • 웹 어플리케이션 폴더와 URL간의 매핑 • jspbook/test 폴더 밑의 testjsp.jsp 파일 접근 URL • jspbook/images 폴더 밑의 apple.bmp 파일 접근 URL 제3장
1. 웹 어플리케이션 개념 및 폴더 구조 • 웹 어플리케이션의 폴더 구조 일반적인 웹 어플리케이션의 구조에는 반드시 WEB-INF 폴더와 web.xml 파일이 그 안에 존재한다. 하지만 간단한 웹 어플리케이션인 경우에는 WEB-INF 폴더 및 web.xml 생략이 가능하다. 영화제작과 비교하면 영화를 만드는 데에 있어서 뒤에서 일하는 스텝들과 같은 역할을 하는 파일 및 자원들은 모두 WEB-INF 폴더 내에 두어야 하며 WEB-INF 폴더 내의 파일 및 자원들은 웹 브라우저인 클라이언트에서 절대 접근할 수 없다. 제3장
1. 웹 어플리케이션 개념 및 폴더 구조 • 웹 어플리케이션의 폴더 구조 제3장
2. JSP의 처리 과정 및 Servlet과의 관계 • JSP 파일의 Servlet 파일로의 자동 변환 • 2장에서 만든 다음과 같은 파일이 있는지 확인하고 브라우저에서 실행해보자. • 그다음 아래 경로 및 파일을 탐색기에서 확인해 보자. 제3장
2. JSP의 처리 과정 및 Servlet과의 관계 • JSP 파일의 Servlet 파일로의 자동 변환 • JSP 파일은 실행이 될 때 일단 Servlet인 Java 소스파일로 변환되고 다시 클래스 파일로 컴파일 됨 • 이 클래스 파일이 JSP/Servlet 컨테이너인 Tomcat 내에서 실행되어 그 결과가 최종적으로 웹 브라우저로 전달 제3장
2. JSP의 처리 과정 및 Servlet과의 관계 • JSP 파일의 Servlet 파일로의 자동 변환 개발자에게 코딩하기 복잡한 Servlet 대신에 스크립트 언어인 JSP로 작성하게 하고 JSP/Servlet 컨테이너인 Tomcat이 내부에서 JSP 파일을 Servlet으로 변환 및 컴파일하여 클래스 파일을 메모리에 적재한 후 실행하여 응답한다. jspbook\ch02\helloworld.jsp 제3장
2. JSP의 처리 과정 및 Servlet과의 관계 • JSP 파일의 Servlet 파일로의 자동 변환 Tomcat 설치 폴더\work\Catalina\localhost\jspbook\org\apache\jsp\ch02\helloworld_jsp.java 제3장
2. JSP의 처리 과정 및 Servlet과의 관계 • JSP 파일의 Servlet 파일로의 자동 변환 Tomcat 설치 폴더\work\Catalina\localhost\jspbook\org\apache\jsp\ch02\helloworld_jsp.java (계속) JSP 파일에 작성한 내용이 이 곳에 존재함. out 객체의 write 메소드와 println 메소드가 JSP 파일의 내용을 출력시켜주는 역할을 수행 제3장
2. JSP의 처리 과정 및 Servlet과의 관계 • JSP 파일 재요청시의 동작 과정 • 변환 및 컴파일 과정은 해당 JSP를 웹 브라우저에서 맨 처음 요청했을 때에만 이루어지는 과정 • 한번이라도 요청했던 JSP 파일을 다시 임의의 사용자가 재요청하면 이미 메모리에 적재된 클래스를 재실행 • JSP로 작성된 웹 페이지의 대부분의 응답은 하드디스크에 대한 접근 없이 바로 메모리에서 응답을 주기 때문에 대체로 평균 응답 시간이 매우 짧다. 제3장
2. JSP의 처리 과정 및 Servlet과의 관계 • JSP 파일 수정 후 같은 JSP 재요청시의 동작 과정 • JSP의 장점: JSP를 수정하면 Tomcat이 자동으로 변환 및 컴파일 수행 클래스 파일이 JSP 파일보다 이후에 만들어진 최신 클래스 파일인지 반드시 확인하여 수행 결과를 웹 브라우저로 보내준다 제3장
2. JSP의 처리 과정 및 Servlet과의 관계 • 종합적인 JSP 파일 처리 과정 SQL/JDBC MySQL/Oracle 제3장
3. Servlet의 이해 • Servlet의 생성 배경 및 장점 • JSP은 Servlet을 기반으로 한 기술 • JSP는 Servlet을 대체하는 기술이 아니라 상호보완적인 기술 • Servlet은 기본적으로 Java 언어 기반이므로 Java 언어에 대한 프로그램 실력을 쌓는 것이 중요 제3장
3. Servlet의 이해 • Servlet의 생성 배경 및 장점 [Servlet의 장점] ∙Java를 기반으로 하므로 Java API를 모두 사용할 수 있다. ∙쓰레드를 기반으로 하므로 웹 어플리케이션 서버 자원을 효율적으로 활용할 수 있다. ∙웹 어플리케이션에서 효율적인 자료 공유 방법을 제공한다. ∙비즈니스 로직과 프리젠테이션 로직을 분리할 수 있다. ∙컨트롤러와 뷰의 역할 분담으로 인해 웹 디자이너와 개발자 간의 효율적인 업무 분담이 가능하다. ∙유지보수가 수월하다. ∙기능 확장이 용이하다. ∙Servlet 컨텍스트 리스너 및 필터 Servlet 등 고급 프로그래밍 기법을 통해 보다 효과적인 웹 어플리케이션 설계가 가능해진다. 제3장
3. Servlet의 이해 • Servlet 동작 과정과 생명주기 제3장
3. Servlet의 이해 • Servlet 동작 과정과 생명주기 • 서블릿에 대한 사용자 요청 처리 과정 • web.xml 파일을 참조해 URL 매핑(URL Mapping)을 확인 • 해당 Servlet 인스턴스로부터 스레드를 생성 • service() 메소드 호출 • 즉, 모든 사용자 요청에 대해 개별적인 service() 메소드가 호출 • GET 또는 POST 요청을 구분하여 doGet() 또는 doPost() 메소드가 호출됨 • 따라서 Servlet 개발자는 doGet() 또는 doPost() 메소드에 대부분의 필요한 기능을 구현한다. Servlet 구조 제3장
3. Servlet의 이해 • Servlet 동작 과정과 생명주기 • Servlet은 컴파일 과정이 필요하고 특정 클래스를 상속 받아 구현 • javax.servlet.http.HttpServlet 클래스를 상속하여 구현 • 개발자가 구현해야 할 부분은 doGet() 또는 doPost() 메소드에 작성 • 하지만, doGet()메소드에서 다시 doPost()를 호출하고 doPost() 내부에만 관련 처리 과정을 코딩하는 편이 편하다. javax.servlet.http.HttpServlet을 상속받은 MyServlet 동작 구조 제3장
3. Servlet의 이해 • 클라이언트 요청 #1 - GET 방식 • 단순히 서버에 있는 정보를 가져오기 위해 사용 • 특징 • HTML, 이미지 등을 웹 브라우저에서 가져오기 위한 일반적 방식 • 서버로의 데이터 전달은 QUERY_STRING 환경변수를 통해서 가능 • QUERY_STRING: 요청 URL에서 ‘?’ 이후의 값들.‘속성=값’ 형태로 사용해야 하며 ‘&’는 여러 속성 값을 전달할 때 연결해주는 문자열이다. • 클라이언트에서 서버로 전달할 수 있는 데이터 크기 (QUERY_STRING )는 최대 240Byte까지 가능하다. • - 필요한 데이터를 검색할 때 필요한 key 값 등을 전달 • 요청 URL에 값들이 노출되기 때문에 ‘보안 문제’가 생길 수 있다. • - 보내는 값이 URL 뒤에 붙어서 전송됨: 주소창에서 노출이 가능 • 데이터 조회용 웹 애플리케이션에 적합 제3장
3. Servlet의 이해 • 클라이언트 요청 #2 - POST 방식 • 클라이언트에 있는 정보를 서버로 올리기 위해 사용 • 특징 • 예를 들어 HTML 폼에 입력한 내용을 서버에 전달할 때 사용 • 서버에 전달할 수 있는 데이터 크기는 제한이 없다 • URL에 전달하려는 정보 값이 표시되지 않는다. • 그래서 로그인 정보를 전달할 때에는 POST 방식을 사용한다. • 데이터 저장용 웹 애플리케이션에 적합 제3장
4. 첫번째 servlet 프로그램 -helloworldservlet • 컴파일을 위한 환경 설정 • 일반적인 자바 프로그램의 라이브러리들이 위치한 곳 • C:\Program Files\Java\jdk1.6.0_13\jre\lib • 위 폴더의 rt.jar에 대부분의 표준 라이브러리들이 위치 • 위 폴더에 있는 .jar 및 .class들은 CLASSPATH 지원 없이 javac 프로그램 자체적으로 자동으로 검색하여 필요한 내용을 참조 • Servlet 프로그램이 활용하는 라이브러리들이 위치한 곳 • C:\apache-tomcat-6.0.18\lib • 위 폴더의 servlet-api.jar파일에 대부분의 라이브러리들이 위치 • Servlet 소스 코드를 javac.exe 로 컴파일하기 위해서는 CLASSPATH 환경 변수에 등록 필요 • 컴파일시에 CLASSPATH 환경변수 값 설정 옵션:-cp 기존의 CLASSPATH 환경 변수들도 그대로 설정 TOMCAT 이 설치된 폴더(2장에서 등록한 환경변수) 제3장
4. 첫번째 servlet 프로그램 -helloworldservlet • 컴파일을 위한 환경 설정 • 컴파일된 class 파일이 위치해야 하는 곳 • \웹 어플리케이션 폴더\WEB-INF\classes • 컴파일시에 컴파일된 class 파일이 위치해야 하는 곳 지정 옵션: -d • 웹 어플리케이션 폴더가 jspbook일 때 다음과같이 컴파일 • – cp와 –d를 함께 사용하여 javac 명령을 새로 구성한 배치화일 [예제 3.2 ] Java설치 폴더\bin\sjc.bat sjc.bat 파일을 실행시킬 때 인자로 들어오는 Java 파일명으로 자동으로 대체됨 제3장
4. 첫번째 servlet 프로그램 -helloworldservlet • Servlet 등록 및 URL 매핑 • Servlet을 작성하여 실행하려면 반드시 JSP/Servlet 컨테이너에 등록을 시키고 관련 URL을 매핑하는 작업 필요 • 웹 어플리케이션의 배치 정의자 역할을 수행하는 web.xml에 기록 제3장
4. 첫번째 servlet 프로그램 -helloworldservlet • Servlet 등록 및 URL 매핑 • 컴파일한 서블릿을 “http://localhost:8080/jspbook/helloServlet” URL로 접근하기 위한 서블릿 매핑 방법 제3장
4. 첫번째 servlet 프로그램 -helloworldservlet • Servlet 등록 및 URL 매핑 • 컴파일한 서블릿을 “http://localhost:8080/jspbook/servlets/helloServlet” URL로 접근하기 위한 서블릿 매핑 방법 • <url-pattern> 태그값에 “/servlets/helloServlet” 입력 • [실습] 단계 1 • jspbook 폴더 밑에 WEB-INF 폴더 생성 제3장
4. 첫번째 servlet 프로그램 -helloworldservlet • [실습] – 단계 2 • WEB-INF 폴더 내에 classes 폴더와 java_sources 폴더 생성 • classes 폴더 명은 정확하게 기입 • java_sources 폴더 명은 변경해도 상관없음 제3장
4. 첫번째 servlet 프로그램 -helloworldservlet • [실습] – 단계 3 • 서블릿 코딩 [예제 3.1] jspbook\WEB-INF\java_sources\HelloServlet.java 제3장
4. 첫번째 servlet 프로그램 -helloworldservlet • [실습] – 단계 4 • 컴파일 • WEB-INF 폴더 밑의 classes에 서블릿 클래스가 생성되었는지 확인 제3장
4. 첫번째 servlet 프로그램 -helloworldservlet • [실습] – 단계 5 • web.xml에 서블릿 등록 [예제 3.2 ] jspbook\WEB-INF\web.xml 제3장
4. 첫번째 servlet 프로그램 -helloworldservlet • [실습] – 단계 5 • 웹 브라우저에서 실행 첫 번째 Servlet인 helloServlet 수행 확인 제3장
4. 첫번째 servlet 프로그램 -helloworldservlet • [실습] – 단계 6 • cmd 창에서 출력 결과 확인 • init() 메소드와 doGet() 메소드수행 확인 • 브라우저에서 새로고침할 때 마다 cmd 창 확인 • 새로고침할 때 마다 doGet() 메소드수행 확인 제3장