JSP 기초강좌
강좌 정보
- 2002년
- 총 20 강
강사 정보
약어들
- GPL 라이센스에 대해 조사
- MariaDB에 대한 사용을 고려 해 보자
- LGPL
01강. JSP의 특징
- HTML의 한계
- 정적인 페이지만을 보여줌
- DB 연동 불가
- 지속적인 연결이 되지 않음.(HTML 1.x)
- CGI의 활용과 한계
- DB 연동 가능
- 동적인 페이지 작성 가능
- 사용자 요청에 대해서 각각의 프로세스를 생성
- 접속자가 많을 수록 메모리를 많이 사용하여 서버에 부담을 증가
- 서블릿의 활용과 한계
- Java 기반으로 작성됨. 풍부한 API를 사용가능, 객체 지향적으로 작성
- 멀티쓰레드 방식 사용됨.
- 표현부와 구현부가 분리되지 않음.
- JSP의 장점
- Java 장점 사용 가능
- 서블릿과 기본적으로 동일함.
- 표현부와 구현부가 분리할수 있음.
02강. JSP의 환경설정
- JDK 설치
- Tomcat 설치 - JSP container
JSP를 사용하기 위한 도구들
- Web Server
- Java 환경 - JDK
- JSP 컨테이너
- 문서 편집기
JDK 설치
- PATH 설정
- 환경변수 설정
- 간단한 예제를 통해 설치 여부 확인
현재 오라클 11도 8080 포트를 점유 하고 있음. 그러므로 다른 포트 번호로 설치 해야 한다.
03강. JSP의 작동방식
JSP 작동 원리
- JSP 페이지 요청
- 해당 페이지의 서블릿 존재 여부 검사
- 해당 페이지의 응답 객체를 생성
- 서블릿이 없는 경우 해당 페이지에 대한 서블릿을 생성
- 특정 폴더에 서블릿을 저장
- 같은 페이지 요청 시 메모리 상의 서블릿을 실행시켜 응답 객체를 생성
간단한 예제를 통한 확인
- Hello.jsp 페이지 작성
- 웹 사이트의 ROOT 폴더에 저장
- localhost:8080(9080) 포트로 접속
- 실행된 화면을 확인 후 서블릿이 저장되는 WORK 폴더에 가서 서블릿을 확인
04강. 스크립트1
JSP 스크립트 1
- 선언부
- 표현식
- 스크립트릿
선언부
- 형식
<%!
//변수 또는 메소드 정의 하는 문장
%> - 사용예
<%!
private int num=0;
%>
표현식
- 형식
<%=
//변수, 메소드의 반환값, 객체
%> - 사용예
<%=num%>
스크립트릿
- 형식
<%
// 선언분와 표현식을 제외 모든 문장
%> - 사용예
<%
for(int i= 0; i < 5 ; i++){
%>
//여기 문장도 반복한다.
<%
}
%>
05강. 스크립트2
조건문과 반복문
- if 문
- if(조건식) 실행코드
else if
else
- switch case 문
- for 문
- while 문
- do while 문
예외 처리
- try - catch - finally
주석 처리
- <!-- 내용 주석 -->
- <%-- JSP 주석 --> : JSP 파일에서만 보인다.
- <%
// 스크립트 주석 -- 서블릿 파일에서 보인다.
/*
다중 행 주석
*/
%>
06강. 디렉티브1
페이지 디렉티브(Page Directive)
- 정의 : 해당 JSP 페이지와 관련된 정보를 나타낼 때 쓰는 태그
- 형식
<%@ 디렉티브 속성1=”값1” 속성2=”2” … %> - 디렉티브의 종류
- page - 해당 페이지의 전체적인 특성을 나타냄
- include - 다른 페이지를 포함하고자 할 때 사용
- taglib - 기능 확장을 위해 사용할 커스텀 태그의 경로를 지정할 때 사용
Page 디렉티브 유형
속성 | 값 | 기본값 |
language | 스크립트 언어이름 | “java” |
contentType | MIME 타입, 문자셋 | “text/html” “text/html,charset=utf-8” |
info | 문자열 | |
import | 클래스 또는 패키지 이름 | |
session | boolean 값 | “true” |
buffer | 버퍼의 크기 또는 false | “8kb” |
autoFlush | boolean 값 - 버퍼가 가득 차을 | “true” |
isThreadSafe | boolean 값 - 해당 페이지가 쓰레드 안정성 여부 | “true” |
errorPage | 로컬 URL | |
isErrorPage | boolean 값 | “false” |
extends | 클래스 이름 - 자동으로 지정해줌 | |
pageEncoding | 패키지의 Character 인코딩 - euc-kr, utf-8 - 문자셋과 기능이 동일함. | “ISO-8859-1” |
07강. 디렉티브2
include 디렉티브
- 중복되는 페이지를 삽입할 때 사용함.
- 형식
<%@ include file=”포함할 페이지의 로컬 URL” %>
taglib 디렉티브
08강. 기본객체1
기본 객체의 종류
객체명 | 클래스 또는 인터페이스 | 설명 |
request | javax.servlet.ServletRequest | 요청 객체(요청 파라미터 포함) |
response | javax.servlet.ServeltResponse | 응답 객체 |
out | javax.servlet.jsp.JspWriter | 출력 스트림에 내용을 출력하는 객체 |
page | java.lang.Object | 현재 요청을 처리하는 페이지 객체 - 페이지 자기 자신 |
config | javax.servlet.ServletConfig | JSP 페이지의 ServletConfig 객체 |
session | javax.servlet.http.HttpSession | 세션 객체 |
application | javax.servlet.ServletContext | 서블릿의 config 객체로 부터 구할 수 있는 서블릿 Context(전체 사이트 공유 가능) |
pageContext | javax.servlet.jsp.PageContext | 현재 JSP 페이지의 Context |
exception | java.lang.Throwable | 에러 페이지에서 사용되는 예외 객체 |
기본 객체가 사용하는 메소드
메소드 | 설명 |
void setAttribute(key,value) | 키값이 key인 객체 value를 저장 |
Object getAttribute(key) | 키값이 key인 객체를 읽어 들인다. |
void removeAttribute(key) | 삭제 |
Enumeration getAttributeNames() | 모든 속성의 이름을 가져온다. |
request 기본객체
- 자신의 페이지로의 요청 정보 접근
- URL
- 헤더내용
- 쿠기
- 요청 파라미터
- 메소드들
- getParameterName() : 모든 파라미터의 이름을 구함.
- getParameter(String name) : 해당 이름을 가진 파라미터 중 첫 번째 파라미터 값을 구함.
- getParameterValues(String name)
- 지정한 이름을 가진 파라미터의 모든 값을 String[]로 구한다.
- getMethod() : 요청 방식
- getRequestURI() : 요청한 URI
- getProtocol() : 프로토콜
- getServletPath() : 요청한 서블릿 경로
- getQueryString() : Query 문자열
- getServerName() : 서버 이름
- getServerPort() : 서버 포트 번호
- getRemoteAddr() : 서버의 주소
- getAuthType() : 인증 스키마
- getLocale() : 로케일
- getHeader(name) : 주어진 이름에 해당하는 header 속성값
response 기본 객체
- 응답 객체
- 헤더, 쿠기, 응답과 관련된 정보를 설정 할 수 있는 메소드 제공
- 응답을 통해서 전송되는 내용의 형식을 지정하는 메소드(MIME 타입 지정)
response가 제공하는 메소드들
메소드 | 설명 |
addCookie(Cookie) | 응답에 쿠키를 저장 |
setHeader(name,value) | 헤더를 저장 |
addHeader(name,value) | 헤더를 추가 |
setContentType(String) | MIME 타입을 지정하며 추가로 encoding 타입 지정 |
getCharacterEncoding() | 문자열 인코딩을 구함 |
encodeRedirectURL(url) | sendRedirect() 메소드에서 사용할 URL을 인코딩 |
encodeURL(name) | 링크에서 사용할 URL을 인코딩 |
sendRedirect(url) | 지정한 URL을 사용하여 리다이렉트 응답을 보냄 |
out 기본객체
- 출력을 담당하는 객체
- JspWriter의 인스턴스
out이 제공하는 메소드들
메소드 | 설명 |
newLine() | 줄 구분자를 출력 |
print(<테이터 유형>) | 해당 데이터 유형의 문자열 형식을 출력 |
println(<테이터 유형>) | 출력하고 줄 구분자도 출력 |
page 기본객체
- 해당 jsp 페이지가 변환된 서블릿 그 자체를 나타내는 객체
- 페이지의 정보를 나타내는 getServletInfo() 메소드 제공
config 기본객체
- jsp 페이지를 초기화 할때 사용되는 초기화 파라미터를 저장
- 서블릿을 변환할 때 처리하는 서블릿의 이름은 JSP 임(*중요)
09강. 기본객체2
session 기본 객체
- 사이트에 접속한 클라이언트가 계속 유지할 수 있는 정보를 담는 객체
- javax.servlet.http.HttpSession 인터페이스의 인스턴스
session이 제공하는 메소드
메소드 | 설명 |
getId() | 클라이언트마다 주어지는 고유한 세션ID |
getCreationTime() | 세션 생성 시간을 long형으로 구함 |
getLastAccessedTime() | 마지막 요청을 받은 시간을 초 단위로 구함 |
getMaxInactiveInterval() | 두 요청간의 세션 유지 최대 시간을 초 단위로 구한다. |
setMaxInactiveInterval(t) | 두 요청간의 세션 유지 최대 시간을 초 단위로 설정한다 |
isNew() | 세션 ID를 생성해서 리턴한다 |
invalidate() | 세션을 버리고 속성에 저장된 객체를 모두 풀어 준다. |
application 기본객체
- 해당 application 전체(사이트)에서 사용할 수 있는 정보를 저장하는 객체
- 예) 카운트
- 서블릿 콘텍스트와 같은 개념이며 전체 사이트의 정보를 저장함
- javax.servlet.ServletContext 인터페이스의 인스턴스
application이 제공하는 메소드
메소드 | 설명 |
getServerInfo() | 서블릿 콘테이너의 이름과 버젼을 구한다. |
getMajorVersion() | 서블릿 콘테이너의 메이저 버젼을 구한다. |
getMinorVersion() | 서블릿 콘테이너의 마이너 버젼을 구한다. |
pageContext 기본객체
- 현재 jsp 페이지의 콘텍스트를 나타냄
- * 다른 기본 객체에 접근할 수 있는 메소드를 제공
<% |
- 제어를 이동하거나 포함할 수 있는 메소드를 제공
- forward(path);
- include(path);
exception 기본객체
- JSP에서 발생하는 예외를 나타냄
- 디렉티브의 isErrorPage 속성이 true인 페이지에서만 접근 가능
- <%@ page isErrorPage=”true” %>
- Java.lang.Throwable 클래스를 상속받은 클래스의 인스턴스
10강. JSP 액션 태그
빈 관련 태그
- <jsp:useBean>
- jsp 페이지에서 자바의 빈을 사용하고자 할 때 사용
- <jsp:setProperty>
- 빈의 정의된 property의 값을 설정할때 사용
- <jsp:getProperty>
- 빈의 정의된 property의 값을 가져올때 사용
<jsp:include> 액션 태그
- 형식
<jsp:include page=”로컬URL” flush=”true|false”/> - 다른 문서의 출력결과를 현재 페이지에 포함하고자 할 때 사용
- 디렉티브의 include와 차이점은 제어권
- include 디렉티브와는 달리 포함되는 페이지도 또 하나의 페이지로 해석되어 존재
- 포함하는 페이지와 포함되는 페이지는 서로 다른 pageContext 객체를 가짐
<jsp:forward> 액션 태그
- 형식
<jsp:forward page=”로컬URL”/> - 현재 페이지에서 다른 페이지로 제어권을 이동 할 때 사용
- 서로 다른 pageContext 객체를 사용
- 서로 다른 request 기본 객체를 할당 받지만 같은 값을 가짐
- <jsp:param> 태그를 사용하여 새로운 파라미터를 넘겨줄 수 있음
<jsp:plugin> 액션 태그
- 자바 플러그인을 사용하여 자바 애플릿을 실행 하고자 할 때 사용
- 필요한 속성
속성 | 값 | 설명 |
type | applet 또는 bean | 브라우저에서 읽어 들일 자바 컴포넌트 타입 |
code | 파일이름 | 자바 컴포넌트를 포함하고 있는 파일 |
codebase | 디렉토리 URL | code 속성에 명시한 파일을 포함하고 있는 디렉토리 |
height | 정수값 | 브라우저 원도우에 표시될 자바 컴포넌트의 높이 |
width | 정수값 | 브라우저 원도우에 표시될 자바 컴포넌트의 넓이 |
11강. 자바빈 컴포넌트 사용1
빈의 기초
- 빈의 정의
- 특정 기능을 수행하도록 미리 정의되어진 클래스
- 빈의 특징
- 모듈화 되어 있고 재사용 가능
- 내부의 테이터와 로직이 캡슐화 되어 있음.
- 사용법에 대한 인터페이스만 알면 누구나 사용가능
- 프로그램 개발시 표준화된 인터페이스를 통해 접근 가능하므로 현저한 시간 단축
Property
- 정의
- 빈이 가지고 있는 데이터의 값을 설정하거나 읽어 들이는 기능을 수행하는 자바빈의 속성
- 종류
- Setter: 빈의 속성값을 설정하기 위한 메소드
- Getter: 빈의 속성값을 읽어 들이기 위한 메소드
- 규약
- 시작은 소문자 단어가 바뀔 때마다 대문자
- 외부에서 접근 가능해야 하므로 접근속성은 public 이어야 함.
- get 또는 set 다음에 데이터 멤버의 이름이 와야 함.
- 특정 객체를 propety 인수로 전달 가능
빈 관련 JSP 태그
- <jsp:useBean> 태그
- 페이지 내에서 자바빈을 사용할 수 있도록 설정
- 사용 가능한 속성
속성 | 값 | 속성 기본값 |
id(*) | 자바 식별자 | 없음 |
scope(*) | page request session application | page |
class(*) | 자바 클래스 이름 | 없음 |
type | 자바 클래스 이름 | Class 속성에 지정된 값 |
beanName | 자바 클래스 또는 자바빈 | 없음 |
- <jsp:setProperty > 태그
- 형식 : <jsp:setProperty name=”$id” property=”$propertName” value=”$val” />
- 정의
- 해당 속성값에 대한 setProperty 메소드를 호출
- propertyValue 값을 해당 속성에 설정
- <jsp:getProperty > 태그
- 형식 : <jsp:getProperty name=”$id” property=”$propertName” />
- 정의
- 해당 속성값에 대한 getProperty 메소드를 호출
- 해당 속성값을 호출
12강. 자바빈 컴포넌트 사용2**
빈 컴포넌트의 영역
- page 영역
- 페이지의 요청과 동시에 생성되며 페이지의 소멸과 함께 빈 객체도 소멸
- scope 속성의 값을 생략할 경우 이 값으로 설정
- request 영역
- 브라우저의 한 번 요청이 완료될 때까지 존재
- 하나의 jsp 페이지로 구성된 경우 page 영역과 request 영역은 동일한 효과를 가짐
- 포함되는 페이지에서 빈 객체를 사용하기 위해서는 반드시 빈 객체가 먼저 생성되어야 함.
- session 영역
- 세션의 생성과 함께 빈 객체가 생성되며 session 객체가 소멸되면서 함께 소멸
- 사용자의 중요한 정보는 데이터 베이스 또는 다른 저장 장치를 이용하는 것이 일반적
- application 영역
- jsp 컨테이너를 종료하기 이전까지 서버에 존재
- 서버의 모든 사용자들에게 공통적으로 사용되므로 사용자 개인정보는 session 객체에 저장하는 것이 일반적
- Web 카운트 등 공통적으로 사용되는 빈 객체의 영역으로 사용
스크립트 와 빈 태그의 혼합
- 빈 태그만을 이용하는 경우
- <jsp:useBean id=”test” class=”pastday.bean.TestBean” />
- <jsp:getProperty name=”test” property=”testProperty” />
- 스크립트를 이용하는 경우
- <jsp:useBean id=”test” class=”pastday.bean.TestBean” />
- <%= myBean.getTestProperty() %>
13강. 테이터 베이스의 사용
Mysql의 설치
- MariaDB 10.x 설치 함.
- 추후 상세 공부 필요함. 차이점 공부 하기
Mysql(MariaDB)의 기본 사용법
- 명령어들
- show databases; : 테이터 베이스 목록 보기
- use <db명>; : 특정 테이터베이스 사용하기
- show tables; : 테이블 목록 보기
- desc <table명>; : 테이블 구조 보기
JSP에서 테이터베이스 사용하기
14강. JSP에서 Cookie 사용하기
쿠기의 설정
- 쿠키란
- 서버에 접속하는 사용자의 컴퓨터에 특정 정보를 저장할 수 있는 기술
- 사용자는 쿠키를 저장했던 사이트를 찾아갈 경우 자신의 컴퓨터에 저장된 정보를 가지고 가게됨
- 브라우저의 옵션에 따라서 쿠키를 지원하지 않는 경우도 있음.
- 서버에세는 이러한 정보를 가지고 방문하는 사용자에 대한 특정 작업을 진행할 수 있음
- 쿠키의 설정 방법
- Cookie cookie = new Cookie(cookieName,cookieValue); //쿠키 생성
- cookie.setPath(“/경로”); //쿠키 경로
- cookie.setMaxAge(1*60*60); //유효기간, 1시간 (초단위)
- Response.addCookie(cookie); //응답에 메시지 쿠키 추가
- 만약 쿠키 값에 이상한 문자열을 포함하는 경우 저장되지 않는 오류가 발생한다.
- 쿠키 클래스가 제공하는 메소드
메소드 | 설명 |
getName() | 이름 반환 |
getValue() | 저장된 값을 반환 |
setMaxAge() | 최대 유효기간 지정(단위 초) |
setPath() | 재전송할 경로 지정 |
setValue() | 새로운 값을 할당 |
쿠기의 변경과 삭제
- 쿠키의 변경
- 변경하고자 하는 쿠키 객체를 구함.
Cookie[] cookies = request.getCookies(); |
- 해당 쿠키 객체의 setValue() 메소드를 호출
- myCookie.setValue(“새로운값”);
- 응답 객체의 addCookie() 메소드를 호출하여 변경된 쿠키를 추가
- Response.addCookie(myCookie);
- 단 myCookie 의 value 이상한 문자열 들어 간 경우 에러가 발생될 수 있음.
- 쿠키의 삭제
- 삭제하고자 하는 쿠키의 이름으로 객체 생성
Cookie delCookie = new Cookie("myCookie","0"); |
- 유효기간을 0으로 설정한 후 응답객체에 추가
delCookie.setMaxAge(0); |
15강. JSP에서 Session 사용하기
세션이란
- 사이트에 접속하는 사용자마다 고유의 ID를 부여하여 생성하는 객체
- 같은 브라우저의 요청에 대해서는 같은 세션 객체를 제공
- 최초 접속한 브라우저에서 사이트의 어떠한 페이지를 방문하더라도 같은 세션 객체를 사용하므로 해당 사용자의 정보를 지속적으로 유지 할 수 있음.
- 웹서버는 쿠키를 통해서 사용자의 컴퓨터에 고유의 세션 ID를 저장하여 지속적인 상태를 유지
세션을 이용한 값의 저장
- 값의 저장방법
- session.setAttribute(“<변수명>”,<저장할값>);
- 값을 불러오는 방법
- session.getAttribute(“<변수명>”);
- 세션에는 자바에서 사용할 수 있는 모든 객체를 저장할 수 있다.
세션에 저장된 값의 삭제
- 세션에 저장된 값의 삭제 방법
- session.removeAttribute(“<변수명>”);
- 현재 세션의 아이디를 구하는 방법
- session.getId();
16-20강. 예제 프로젝트
- mysqladmin -u<유저명> -p create <생성할DB>
- DB 생성하기
- 테이블 생성 (sql 파일 이용해서)
- mysql -uroot -p < <파일명.sql>
- JDBC 드라이버 웹서버에 로딩하기
- TOMECAT_HOME\lib\_jdbc_lib.jar 를 위치 시킴
- 로그인 처리
- 현재 나의 application에 대해서 연구 해 보자(18강에 존재함)
- 페이지 처리에 대한 로직을 공부 및 새로이 작성하기
방명록
- Bean 객체를 이용하여 정보를 가져 옴.
- 사용자 정의 Bean 객체를 사용하여 전체 파라미터 한 꺼번에 설정 하기
<jsp:useBean id="data" class="javacan.guestbook.GuestBookData"> |
게시판의 처리
Google 문서: 온라인에서 문서를 만들고 수정해 보세요. Google LLC, 1600 Amphitheatre Parkway, Mountain View, CA 94043, USA 다른 사용자가 Google 문서의 문서를 나와 공유하여 발송된 이메일입니다. |
댓글 없음:
댓글 쓰기