본문 바로가기

프로그래밍/Servlet & JSP

[프로그래밍] JSP 기본 다루기

[ 참고 ] '백견불여일타 JSP&Servlet : Eclipse&Oracle' _(저자: 성윤정 / 출판사: 로드북) 

※ 카테고리 'Servlet & JSP'에 관한 모든 내용은 참고 서적을 기준으로 작성된 글입니다.  

   Servlet / JSP 를 사용해 웹 애플리케이션을 개발하는 것을 학습 목표로 하시는 분들에게 적합한 글입니다.



컨텍스트 패스 (Context Path)

여러 개의 웹 애플리케이션이 WAS에서 동작할 경우 이를 구분하기 위해 사용한다.

톰캣 서버의 server.xml  파일에 등록해야 하지만 자동화 툴 이클립스에서는 알아서 만들어준다.

이때 자동으로 만들어지는 컨텍스트 패스는 프로젝트 이름과 동일하다.


컨텍스트 패스는 사용자가 해당 웹 애플리케이션을 사용하기 위해 접근하는 경로이다.

경우에 따라 컨텍스트 패스 이름을 변경할 수 있다.

컨텍스트 패스는 쉽게 말해 소스가 있는 경로로 이해한다.


※ Content directory

웹 프로그램에서 제공되는 모든 이미지나 웹 페이지와 같은 자원을 저장해 두는 경로를 말한다.

웹 프로그래밍을 하면서 새롭게 만들어지는 jsp 페이지를 Content directory로 지정한 경로에 저장해야 한다.


웹 서버와 웹 애플리케이션에 대한 자세한 정보

http://myblog.opendocs.co.kr/archives/425



JSP & HTML

Java Server Page 

HTML 태그에 자바로 프로그래밍하여 브라우저에 보여주는 특별한 페이지이다.

HTML 태그 사이에 <% %>를 추가 하려면 스크립트릿은 JSP에서만 동작하기 때문에 JSP 파일로 작성해야 한다.


HTML파일은 확장자가 html이고 웹 브라우저 내의 번역기가 돌린다. (웹브라우저에서 바로 동작)

JSP파일은 톰캣 서버가 번역하여 그 결과를 HTML태그로 변환후 웹브라우저에 내려 보내진다.


브라우저의 주소 입력란에 JSP페이지를 요청하면 이를 웹 서버가 요청을 받아  <% %> (JSP가 제공해주는 스크립트릿 태그) 안에 작성한 코드를 서블릿 컨테이너는 이부분을 JSP로 인식하여 이를 해석해 HTML 형태로 변환한다. 

응답받은 JSP페이지 소스를 보면 스크립트릿 태그는 없어지고 HTML로만 구성된 문서 형태 이다.


JSP파일은 서버 측에서 동작해야 할 코드들이 있을 경우 사용한다.

자바 기반으로 웹 애플리케이션을 작성하기 위한 도구로 서블릿이 먼저 만들어졌지만 서블릿은 HTML코드가 자바 코드안에 들어가는 구조여서

다자이너가 자바를 이해하지 못한 채 HTML 코드를 자바 형태인 서블릿에서 작성한다는 것은 불가능한 일이 때문에 HTML문서에 자바코드가 들어가는 

JSP가 등장한 것이다. 이 때문에 서블릿 컨테이너는 JSP를 있는 그대로 받아들이지 못하고 서블릿으로 변화한 후에 동작시킨다.


JSP가 서블릿 컨테이너에서 동작하는 순서

(1) 브라우저에서 JSP페이지(.jsp)를 웹 서버에게 요청

(2) 웹 서버는 요청을 서블릿 컨테이너에게 넘기면, 서블릿 컨테이너는 해당 jsp를 찾아 서블릿 파일(_jsp.java)을 생성

(3) 서블릿 파일은 컴파일되어 서블릿 클래스 파일(_jsp.class)을 생성

(4) 서블릿 수행 결과가 웹 서버에 전송

(5) 사용자는 서블릿의 출력 결과를 HTML형태로 응답결과를 봄.


JSP가 서블릿에 비해 처리 속도가 느리지 않는 이유

JSP가 서블릿으로 변환되는 과정은 JSP페이자가 최초로 요청되었을 때 단 한 번뿐이고 이미 요청되었던 페이지가 다시 요청되면 이미 변환된 서블릿 파일로 서비스가 처리되기 때문이다.


내장객체 

객체는 일반적으로 필요할 때마다 생성 후에 사용 가능하다. 경우에 따라 이미 생성된 객체가 제공되어 사용만 하면 되는 객체들을 내장 객체라고 한다.

out 내장객체

서블릿에서 요청이 있을 때마다 호출되는 doGet( )혹은 doPost( )에서 클라이언트에 응답을 위해 response.getWriter( ) 로 얻어낸 PrintWriter로 선언한

out객체와 동일하다. 서블릿에는 객체를 생성한 후 사용하지만 JSP 페이지에서는 out이 내장객체 형태로 제공되기 때문에 바로 사용할 수 있다.(JSP페이지에서)



JSP 기본 태그 / 스크립트 요소 

HTML, JavaScript 으로 작성된 페이지들은 사용하는 사용자 상관없이 항상 동일한 내용만들 제공해주는 정적 페이지 이다.

하지만 웹 프로그램들은 사용자에 따라 서로 다른 내용이 제공되어야 한다. 이러한 동적 페이지를 구현하기 위해서는 서버가 인식하는 JSP태그를 사용한다.

종류

사용용도 

형식 

스크립트릿(scriptlet) 

자바 코드 기술 

<% %> 

선언(declaration) 

변수와 메소드 선언

<%! %> 

표현식(expression) 

계산식이나 함수를 호출한 결과를 문자열 형태로 출력 

<%= %> 

주석(Comment) 

JSP페이지에 설명 

<%-- --%> 

지시자(Directive)

JSP페이지의 속성 지정 

<%@ %> 


스크립트릿 <% %>

웹 서버에서 처리할 문장들을 자바 언어로 부분적으로 기술하는데 이때 사용하는 자바 언어를 '서버 스크립트 언어'라고 한다.

서버 스크립트 언어인 자바를 JSP 문서 내부에 기술하려면 JSP가 제공해주는 스크립트릿 태그를 사용해야 한다.

선언문 <%! %>
JSP페이지에서 사용되는 변수나 메소드를 정의위해 선언문을 사용한다.
JSP에서 메소드 정의는 반드시 선언문 태그 내부에서 해야한다.

선언문의 위치는 아무곳이나 상관없지만 관례적으로 HTML문서 맨 위에 위치시킨다.

 


 

선언문에 선언한 변수는 서블릿 클래스의 필드로 선언(전역변수)되어 있고, 스크립트릿 변수는 _jspService( )메소드 내의 지역변수로 선언된다.

선언문에 선언된 변수는 이미 생선된 필드가 계속 사용되기 때문에 이전의 값을 유지하고 있다가 새로고침을 하면 1이 계속 증가되고,

스크립트릿 변수는 새로고침 될 때마다 _jspService( )메소드가 호출되면서 새롭게 메모리 할당을 하면서 0으로 초기화한 후에 값을 1 증가해 항상 1만 출력된다.


표현식 <%= %>

브라우저에 HTML형태로 결과를 출력하기 위해 스크립트릿 태그 내에 jsp 내장 객체 중 출력담당 out의 print 메소드를 사용한다.

<%= 변수 %>

<%= 수식 %>

<%= 메소드 호출 %>

서블릿 컨테이너는 <%= %>를 만나면 out.print( )로 변환한다.


지시자

JSP컨테이너애 대해 지시할 각종 정보들을 포함하는 문장이다.  기본형태는 <%@ 지시자 속성="값" . . . %> 이다.

 종류

사용용도 

page 

해당 JSP페이지 전반적으로 환경을 설정할 내용을 지정 

include 

현재 페이지에 다른 파일의 내용을 삽입할 때 사용 

 taglib 

태그 라이브러리에서 태그를 꺼내와 사용할 수 있는 기능 제공 


page 지시자

<%@ page 속성="값" . . . %>

<%@ page language="java" %> 
- JSP에서 사용할 언어를 결정 / default값으로 "java"로 설정되어 있음

<%@ page extends="javax.servlet.HttpJspBase" %>
- JSP페이지가 특정 클래스로부터 상속을 받으려면 extends속성에 상위 클래스로 누구를 설정할지 기술
- 기본적으로 서블릿 컨테이너에서 알아서 처리하므로 개발자가 특별히 지정하는 경우는 없음

<%@ page import="java.util.Calendar" %>
- 자바에서 이미 만들어진 자바 클래스를 가져다 사용할 때 사용

<%@ page session="false" %>
- 세션을 사용할지 말지를 결정하는 속성

<%@ page buffer="none" %>
- true : 버퍼가 꽉차게 되면 자동으로 버퍼를 비우도록 한다.
- false : 버퍼가 꽉 차게 되었을때 에러를 발생하게 된다.

<%@ page autoFlush="false" %>
- 버퍼를 사용하되 버퍼가 다 차면 에러를 발생하게 될지 아니면 버퍼를 비우고 새로운 데이터를 받아올지를 결정하기 위한 속성

<%@ page isThreadSafe="true" %>
- 각각 페이지의 스레드들이 안전하게 동작하게 한다. 요청을 한 개씩 순서대로 일을 처리

<%@ page info="JSP페이지에 대한 정보" %>
- JSP에 대한 간략한 설명을 기록하는 용도

<%@ page errorPage="error.jsp" %>
- JSP페이지에서 에러가 발생하였을 때 보여줄 에러 페이지를 설정

<%@ page isErrorPage="false" %> 
- 현재의 페이지가 에러 페이지인지 아닌지 설정하기 위한 속성

<%@ page contentType="text/html" %>
- JSP 페이지의 MIME(Multipurpose Internet Mail Extensions) 타입을 결정 
  ※ MIME(Multipurpose Internet Mail Extensions) : 서버가 브라우저에게 '이런 데이터를 보낼 것이다'라고 미리 알려주는 역할을 결정한다.

<%@ page contentType="text/html;charset=UTF-8" %>
- 한글 출력문제를 해결하기 위한 문자의 코드 방식 결정 / 인코딩

오늘 날짜 출력하기

 


include 지시자

현재 페이지에 다른 HTML문서나 JSP페이지의 내용을 삽입할 때 사용

<%@ include file="URL" %>

- JSP파일 안으로 포함시킬 파일의 URL




>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> [다음페이지]에서는 ' 내장객체와 액션태그 '