3 장 . 웹 어플리케이션과 jsp 및 servlet 의 이해
DESCRIPTION
3 장 . 웹 어플리케이션과 JSP 및 Servlet 의 이해. 1. 웹 어플리케이션 개념 및 폴더 구조. 웹 어플리케이션의 개념 독립 어플리케이션 (Stand-alone Application) 웹 어플리케이션 (Web Application) 웹 브라우저 상에서 수행되는 어플리케이션 HTTP 와 HTML 을 기본으로 사용 웹 어플리케이션이 Tomcat 에서 구현될 때의 규칙 임의의 웹 어플리케이션은 webapps 폴더 하위에 하나의 폴더로 구성. jspbook 웹 어플리케이션 - PowerPoint PPT PresentationTRANSCRIPT
3 장 . 웹 어플리케이션과JSP 및 Servlet 의 이해
제 3 장
1. 웹 어플리케이션 개념 및 폴더 구조웹 어플리케이션의 개념
독립 어플리케이션 (Stand-alone Application) 웹 어플리케이션 (Web Application)
웹 브라우저 상에서 수행되는 어플리케이션 HTTP 와 HTML 을 기본으로 사용
웹 어플리케이션이 Tomcat 에서 구현될 때의 규칙 임의의 웹 어플리케이션은 webapps 폴더 하위에 하나의 폴더로 구성
2/35 제 3 장웹 어플리케이션과 webapps 내의 폴더
jspbook 웹 어플리케이션( 첫 번째 웹 어플리케이션 )
1. 웹 어플리케이션 개념 및 폴더 구조웹 어플리케이션의 개념
3/35 제 3 장
webapps 내의 두 번째 웹 어플리케이션 생성
jspbook 웹 어플리케이션( 첫 번째 웹 어플리케이션 )
myapp 웹 어플리케이션( 두 번째 웹 어플리케이션 )
webapps ‘ 폴더’ 내에 새로운 폴더 생성 = 새로운 ‘ Context’ 생성 (ServletContext: servlet 들이 실행되는 환경 )= 새로운 웹 어플리케이션들 생성
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 파일 접근
4/35 제 3 장
1. 웹 어플리케이션 개념 및 폴더 구조웹 어플리케이션 폴더와 URL 간의 매핑
webapps 내에 jspbook 과 myapp 웹 어플리케이션을 생성시에 함께 생성되는 URL
위 URL 로 접근하면 jspbook 및 myapp 폴더 밑의 index.html 또는 index.jsp 파일을 접근
index.html, index.jsp: 파일명까지 정확하게 입력하지 않아도 폴더명만으로도 찾아지는 디폴트 파일
5/35 제 3 장
http://localhost:8080/jspbook
http://localhost:8080/myapp
1. 웹 어플리케이션 개념 및 폴더 구조웹 어플리케이션 폴더 (Context) 와 URL 간의 매핑
중요 메소드 2 개 request.getContextPath()
웹 어플리케이션의 경로를 리턴 application.getRealPath("/")
웹 어플리케이션의 하드디스크상 실제 경로를 리턴
6/35 제 3 장
01
02
03
04
05
06
07
08
<%@ page contentType="text/html;charset=utf-8" %>
<html>
<head><title>context 의 경로 </title></head>
<body>
현재 수행 JSP 의 context ( 웹 어플리케이션 ) 경로 : <%= request.getContextPath() %> <br/>
현재 수행 JSP 의 context 실제 경로 : <%= application.getRealPath("/") %>
</body>
</html>
[ 예제 3.1] jspbook\ch03\path.jsp
1. 웹 어플리케이션 개념 및 폴더 구조웹 어플리케이션 폴더와 URL 간의 매핑
jspbook/test 폴더 밑의 testjsp.jsp 파일 접근 URL
jspbook/images 폴더 밑의 apple.bmp 파일 접근 URL
7/35 제 3 장
http://localhost:8080/jspbook/test/
testjsp.jsp
http://localhost:8080/jspbook/images/
apple.bmp
1. 웹 어플리케이션 개념 및 폴더 구조웹 어플리케이션의 폴더 구조
8/35 제 3 장
일반적인 웹 어플리케이션의 구조에는 반드시 WEB-INF 폴더와 web.xml 파일이 그 안에 존재한다 . 하지만 간단한 웹 어플리케이션인 경우에는 WEB-INF 폴더 및 web.xml 생략이 가능하다 .
영화제작과 비교하면 영화를 만드는 데에 있어서 뒤에서 일하는 스텝들과 같은 역할을 하는 파일 및 자원들은 모두 WEB-INF 폴더 내에 두어야 하며 WEB-INF 폴더 내의 파일 및 자원들은 웹 브라우저인 클라이언트에서 절대 접근할 수 없다 .
1. 웹 어플리케이션 개념 및 폴더 구조웹 어플리케이션의 폴더 구조
9/35 제 3 장
폴더 또는 파일 설명
/웹 어플리케이션 폴더 /웹 어플리케이션의 루트 (ROOT) 폴더이다 . 웹 어플리케이션과 관련된 모든
HTML, JSP, Servlet, Java 클래스 , 이미지파일들이 이 폴더 밑에 저장된다 .
/웹 어플리케이션 폴더 /WEB-INF
웹 어 플 리 케 이 션 의 환 경 설 정 , 관 련 Serlvet 및 Utility 클 래 스 와
JavaBeans 와 라 이 브 러 리 들 을 위 치 시 키 는 폴 더 이 다 . 이 폴 더에 웹
어플리케이션 배치 정의자인 web.xml 이 위치한다 . 이곳에 위치한 파일은
클라이언트가 직접적으로 접근할 수 없다 .
/ 웹 어 플 리 케 이 션
폴더 /WEB-INF/web.xml웹 어플리케이션 배치 정의자 역할을 하는 파일이다 .
/웹 어플리케이션 폴더 /WEB-INF/classesServlet 및 JavaBeans 클래스를 포함한 여러 클래스들이 위치하는
폴더이다 .
/웹 어플리케이션 폴더 /WEB-INF/lib라이브러리 역할을 하는 jar 파일이 위치하는 폴더이다 . JDBC 드라이버나
태그 라이브러리를 구성하는 jar 파일이 여기 위치한다 .
/웹 어플리케이션 폴더 /WEB-INF/tld태그 라이브러리 관련 설정 파일들이 위치한다 . 태그 라이브러리는 19
장에서 학습한다 .
/웹 어플리케이션 폴더 /images
images 라는 이름 자체는 JSP/Servlet 컨테이너와 약속이 된 것은 아니지만
보통 이 폴더 내에 웹 어플리케이션과 관련된 모든 이미지 파일을 위치시킨
다 .
2. JSP 의 처리 과정 및 Servlet 과의 관계JSP 파일의 Servlet 파일로의 자동 변환
2 장에서 만든 다음과 같은 파일이 있는지 확인하고 브라우저에서 실행해보자 .
그 다음 아래 경로 및 파일을 탐색기에서 확인해 보자 .
10/35 제 3 장
Tomcat 설치 폴더 \webapps\jspbook\ch02\helloworld.jsp
Tomcat 설치 폴더 (*.java)
\work\Catalina\localhost\jspbook\org\apache\jsp\ch02\helloworld_jsp.java
Tomcat 설치 폴더 (*.class)
\work\Catalina\localhost\jspbook\org\apache\jsp\ch02\helloworld_jsp.class
2. JSP 의 처리 과정 및 Servlet 과의 관계JSP 파일의 Servlet 파일로의 자동 변환
JSP 파일은 실행이 될 때 일단 Servlet 인 Java 소스파일로 변환되고 다시 클래스 파일로 컴파일 됨
이 클래스 파일이 JSP/Servlet 컨테이너인 Tomcat 내에서 실행되어 그 결과가 최종적으로 웹 브라우저로 전달
11/35 제 3 장
2. JSP 의 처리 과정 및 Servlet 과의 관계JSP 파일의 Servlet 파일로의 자동 변환
12/35 제 3 장
개발자에게 코딩하기 복잡한 Servlet 대신에 스크립트 언어인 JSP 로 작성하게 하고 JSP/Servlet 컨테이너인 Tomcat 이 내부에서 JSP 파일을 Servlet 으로 변환 및 컴파일하여 클래스 파일을 메모리에 적재한 후 실행하여 응답한다 .
0
1
0
2
0
3
0
4
0
5
0
6
0
7
<%@ page contentType="text/html;charset=utf-8" %>
<html>
<body>
<% out.println("Hello World!"); %> <br/>
<% out.println(" 안녕하세요 ."); %>
</body>
</html>
jspbook\ch02\helloworld.jsp
2. JSP 의 처리 과정 및 Servlet 과의 관계JSP 파일의 Servlet 파일로의 자동 변환
13/35 제 3 장
package org.apache.jsp.ch02;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
public final class helloworld_jsp extends
org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent {
... 중간 생략 ...
public void _jspInit() {
... 중간 생략 ...
}
public void _jspDestroy() {
}
public void _jspService(HttpServletRequest request, HttpServletResponse
response)
throws java.io.IOException, ServletException {
... 중간 생략 … }
Tomcat 설치 폴더 \work\Catalina\localhost\jspbook\org\apache\jsp\ch02\helloworld_jsp.java
2. JSP 의 처리 과정 및 Servlet 과의 관계JSP 파일의 Servlet 파일로의 자동 변환
14/35 제 3 장
try {
... 중간 생략 ...
out.write("\r\n");
out.write("<html>\r\n");
out.write("<body>\r\n");
out.println("Hello World!");
out.write(" <br/>\r\n");
out.println(" 안녕하세요 .");
out.write("\r\n");
out.write("</body>\r\n");
out.write("</html>\r\n");
} catch (Throwable t) {
. .. 중간 생략 ...
} finally {
_jspxFactory.releasePageContext(_jspx_page_context);
}
}
}
JSP 파 일 에 작성한 내용이 이 곳 에 존 재함 .
Tomcat 설치 폴더 \work\Catalina\localhost\jspbook\org\apache\jsp\ch02\helloworld_jsp.java ( 계속 )
out 객체의 write 메소드와 println 메소드가 JSP 파일의 내용을 출력시켜주는 역할을 수행
2. JSP 의 처리 과정 및 Servlet 과의 관계JSP 파일 재요청시의 동작 과정
변환 및 컴파일 과정은 해당 JSP 를 웹 브라우저에서 맨 처음 요청했을 때에만 이루어지는 과정
한번이라도 요청했던 JSP 파일을 다시 임의의 사용자가 재요청하면 이미 메모리에 적재된 클래스를 재실행
JSP 로 작성된 웹 페이지의 대부분의 응답은 하드디스크에 대한 접근 없이 바로 메모리에서 응답을 주기 때문에 대체로 평균 응답 시간이 매우 짧다 .
15/35 제 3 장
2. JSP 의 처리 과정 및 Servlet 과의 관계JSP 파일 수정 후 같은 JSP 재요청시의 동작 과정
JSP 의 장점 : JSP 를 수정하면 Tomcat 이 자동으로 변환 및 컴파일 수행
16/35 제 3 장
클래스 파일이 JSP 파일보다 이후에 만들어진 최신 클래스 파일인지 반드시 확인하여 수행 결과를 웹 브라우저로 보내준다
2. JSP 의 처리 과정 및 Servlet 과의 관계종합적인 JSP 파일 처리 과정
17/35 제 3 장
SQL/JDBC
MySQL/Oracle
3. Servlet 의 이해Servlet 의 생성 배경 및 장점
JSP 은 Servlet 을 기반으로 한 기술
JSP 는 Servlet 을 대체하는 기술이 아니라 상호보완적인 기술
Servlet 은 기본적으로 Java 언어 기반이므로 Java 언어에 대한 프로그램 실력을 쌓는 것이 중요
18/35 제 3 장
3. Servlet 의 이해Servlet 의 생성 배경 및 장점
19/35 제 3 장
[Servlet 의 장점 ]∙Java 를 기반으로 하므로 Java API 를 모두 사용할 수 있다 .
∙ 쓰레드를 기반으로 하므로 웹 어플리케이션 서버 자원을 효율적으로 활용할 수 있다 .
∙ 웹 어플리케이션에서 효율적인 자료 공유 방법을 제공한다 .
∙ 비즈니스 로직과 프리젠테이션 로직을 분리할 수 있다 .
∙ 컨트롤러와 뷰의 역할 분담으로 인해 웹 디자이너와 개발자 간의 효율적인 업무 분담이 가능하다 .
∙ 유지보수가 수월하다 .
∙ 기능 확장이 용이하다 .
∙Servlet 컨텍스트 리스너 및 필터 Servlet 등 고급 프로그래밍 기법을 통해 보다 효과적인 웹 어플리케이션 설계가 가능해진다 .
3. Servlet 의 이해Servlet 동작 과정과 생명주기
20/35 제 3 장
3. Servlet 의 이해Servlet 동작 과정과 생명주기
서블릿에 대한 사용자 요청 처리 과정 web.xml 파일을 참조해 URL 매핑 (URL Mapping) 을 확인 해당 Servlet 인스턴스로부터 스레드를 생성 service() 메소드 호출 즉 , 모든 사용자 요청에 대해 개별적인 service() 메소드가 호출 GET 또는 POST 요청을 구분하여 doGet() 또는 doPost() 메소드가
호출됨 따라서 Servlet 개발자는 doGet() 또는 doPost() 메소드에 대부분의
필요한 기능을 구현한다 .
21/35 제 3 장
Servlet 구조
3. Servlet 의 이해Servlet 동작 과정과 생명주기
Servlet 은 컴파일 과정이 필요하고 특정 클래스를 상속 받아 구현 javax.servlet.http.HttpServlet 클래스를 상속하여 구현
개발자가 구현해야 할 부분은 doGet() 또는 doPost() 메소드에 작성 하지만 , doGet() 메소드에서 다시 doPost() 를 호출하고 doPost()
내부에만 관련 처리 과정을 코딩하는 편이 편하다 .
22/35 제 3 장
javax.servlet.http.HttpServlet 을 상속받은 MyServlet 동작 구조
3. Servlet 의 이해클라이언트 요청 #1 - GET 방식
단순히 서버에 있는 정보를 가져오기 위해 사용 특징
HTML, 이미지 등을 웹 브라우저에서 가져오기 위한 일반적 방식 서버로의 데이터 전달은 QUERY_STRING 환경변수를 통해서 가능
QUERY_STRING: 요청 URL 에서 ‘ ?’ 이후의 값들 . ‘ 속성 = 값’ 형태로 사용해야 하며 ‘ &’ 는 여러 속성 값을 전달할 때 연결해주는 문자열이다 .
클라이언트에서 서버로 전달할 수 있는 데이터 크기 (QUERY_STRING ) 는 최대 240Byte 까지 가능하다 .
- 필요한 데이터를 검색할 때 필요한 key 값 등을 전달 요청 URL 에 값들이 노출되기 때문에 ‘보안 문제’가 생길 수 있다 . - 보내는 값이 URL 뒤에 붙어서 전송됨 : 주소창에서 노출이 가능 데이터 조회용 웹 애플리케이션에 적합
23/35 제 3 장
3. Servlet 의 이해클라이언트 요청 #2 - POST 방식
클라이언트에 있는 정보를 서버로 올리기 위해 사용 특징
예를 들어 HTML 폼에 입력한 내용을 서버에 전달할 때 사용 서버에 전달할 수 있는 데이터 크기는 제한이 없다 URL 에 전달하려는 정보 값이 표시되지 않는다 . 그래서 로그인 정보를 전달할 때에는 POST 방식을 사용한다 . 데이터 저장용 웹 애플리케이션에 적합
24/35 제 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
25/35 제 3 장
javac -cp %CLASSPATH%;%CATALINA_HOME%\lib\servlet-api.jar
HelloWorldServlet.java
기존의 CLASSPATH 환경 변수들도 그대로 설정
TOMCAT 이 설치된 폴더(2 장에서 등록한 환경변수 )
4. 첫번째 servlet 프로그램 -helloworldservlet
컴파일을 위한 환경 설정 컴파일된 class 파일이 위치해야 하는 곳
\웹 어플리케이션 폴더 \WEB-INF\classes 컴파일시에 컴파일된 class 파일이 위치해야 하는 곳 지정 옵션 : -d 웹 어플리케이션 폴더가 jspbook 일 때 다음과 같이 컴파일
– cp 와 – d 를 함께 사용하여 javac 명령을 새로 구성한 배치화일
26/35 제 3 장
javac -d %CATALINA_HOME%\webapps\jspbook\WEB-INF\classes
HelloWorldServlet.java
01
-
javac -cp %CLASSPATH%;%CATALINA_HOME%\lib\servlet-api.jar -d
%CATALINA_HOME%\webapps\jspbook\WEB-INF\classes %1
[ 예제 3.2 ] Java 설치 폴더 \bin\sjc.bat
sjc.bat 파일을 실행시킬 때 인자로 들어오는 Java 파일명으로 자동으로 대체됨
Servlet 등록 및 URL 매핑 Servlet 을 작성하여 실행하려면 반드시 JSP/Servlet 컨테이너에
등록을 시키고 관련 URL 을 매핑하는 작업 필요 웹 어플리케이션의 배치 정의자 역할을 수행하는 web.xml 에 기록
27/35 제 3 장
엘리먼트 설명
<servlet>웹 어플리케이션 내에서 지칭하기 위한 Servlet 이름과 실제 Servlet
클래스 이름을 매핑하는 역할을 한다 .
<servlet-name>Servlet 이 름 </servlet-
name>웹 어플리케이션 내에서 지칭하는 Servlet 이름을 명기한다 .
<servlet-class> 클래스 이름 <servlet-class>실제 Servlet 클래스 이름을 명기한다 . 확장자 class 는 포함하지
않는다 .
</servlet> <servlet>엘리먼트의 종료태그
<servlet-mapping> Servlet 을 접근하기 위한 URL 을 정한다 .
<servlet-name>Servlet 이 름 </servlet-
name>URL 매핑을 원하는 Servlet 이름을 명기한다 .
<url-pattern>URL</url-mapping>Servlet 을 접근하기 위한 URL 을 명기한다 . 보통 "/" 으로 시작되며
"/" 의 의미는 웹 어플리케이션의 루트를 의미한다 .
</servlet-mapping> <servlet-mapping>엘리먼트의 종료태그
4. 첫번째 servlet 프로그램 -helloworldservlet
Servlet 등록 및 URL 매핑 컴파일한 서블릿을 “ http://localhost:8080/jspbook/helloServlet”
URL 로 접근하기 위한 서블릿 매핑 방법
28/35 제 3 장
4. 첫번째 servlet 프로그램 -helloworldservlet
Servlet 등록 및 URL 매핑 컴파일한 서블릿을
“ http://localhost:8080/jspbook/servlets/helloServlet” URL 로 접근하기 위한 서블릿 매핑 방법
<url-pattern> 태그 값에 “ /servlets/helloServlet” 입력
[ 실습 ] 단계 1 jspbook 폴더 밑에 WEB-INF 폴더 생성
29/35 제 3 장
4. 첫번째 servlet 프로그램 -helloworldservlet
30/35 제 3 장
4. 첫번째 servlet 프로그램 -helloworldservlet
[ 실습 ] – 단계 2 WEB-INF 폴더 내에 classes 폴더와 java_sources 폴더 생성
classes 폴더 명은 정확하게 기입 java_sources 폴더 명은 변경해도 상관없음
[ 실습 ] – 단계 3 서블릿 코딩
31/35 제 3 장
01
02
03
04
05
06
07
08
09
10
-
11
12
13
14
15
16
17
18
19
20
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class HelloWorldServlet extends HttpServlet {
public void init() { // Servlet 객체 최초 생성시 한번만 호출 System.out.println("Init!!!");
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException,
ServletException { // Servlet 요청시 매번 호출 System.out.println("doGet!!!");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><body bgcolor=\"yellow\">Hello Servlet!</body></html>");
}
public void destroy() { // Servlet 이 메모리에서 삭제될 때 한번만 호출 System.out.println("destroy!!!");
}
}
[ 예제 3.1] jspbook\WEB-INF\java_sources\HelloServlet.java
4. 첫번째 servlet 프로그램 -helloworldservlet
[ 실습 ] – 단계 4 컴파일
WEB-INF 폴더 밑의 classes 에 서블릿 클래스가 생성되었는지 확인
32/35 제 3 장
> cd C:\apache-tomcat-6.0.18\webapps\jspbook\WEB-INF\
java_sources
> sjc HelloWorldServlet.java
4. 첫번째 servlet 프로그램 -helloworldservlet
[ 실습 ] – 단계 5 web.xml 에 서블릿 등록
33/35 제 3 장
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<description>
JSPBOOK Examples.
</description>
<display-name>JSPBOOK Examples</display-name>
<servlet>
<servlet-name>helloServlet</servlet-name>
<servlet-class>HelloWorldServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/helloServlet</url-pattern>
</servlet-mapping>
</web-app>
[ 예제 3.2 ] jspbook\WEB-INF\web.xml
4. 첫번째 servlet 프로그램 -helloworldservlet
[ 실습 ] – 단계 5 웹 브라우저에서 실행
34/35 제 3 장
첫 번째 Servlet 인 helloServlet 수행 확인
http://localhost:8080/jspbook/helloServlet
4. 첫번째 servlet 프로그램 -helloworldservlet
[ 실습 ] – 단계 6 cmd 창에서 출력 결과 확인
init() 메소드와 doGet() 메소드수행 확인
브라우저에서 새로고침할 때 마다 cmd 창 확인 새로고침할 때 마다 doGet() 메소드 수행 확인
35/35 제 3 장
4. 첫번째 servlet 프로그램 -helloworldservlet