JSP 정리
최범균의 JSP2.3 웹 프로그래밍 기초부터 중급까지 정리
JDBC를 이용한 프로그램의 작성
JDBC 드라이버 로드 -> Class.forName()
데이터베이스 연결 - > DriverManger.getConnection(URL,USER,PW)
-> java.sql.Connection
Statement 생성 -> java.sql.Statement
-> java.sql.PreparedStatement
SQL 전송 -> java.sql.Statement -> executeQuery()
-> executeUpdate()
결과 -> java.sql.ResultSet ->
연결 종료 -> java.sql.Connection -> close()
JDBC
-
Java Database Connectivity
-
API이다
-
api는 안에 정의된 클래스가 있다.
-
이걸 갖다 쓰는거.
JSP
-
JavaServer Pages
-
동적 페이지를 작성하는 데 사용되는 자바의 표준 기술
-
HTML 응답을 생성하는 데 필요한 기능을 제공한다.
웹 페이지
-
웹 브라우저에 출력된 내용
-
웹 사이트는 이러한 웹 페이지의 묶음
URI
-
통합 자원 식별자
-
Uniform resource identifier
-
인터넷의 우편물 주소 같은 것으로 정보 리소스를 고유하게 식별하고 위치를 지정할 수 있다,
-
URI의 두 가지 형태가 있는 데, 이것이 URI , URN이다
URL
-
Uniform Resource Locator의 약자
-
웹 브라우저의 주소줄에 표시되는 것
-
구성 - 프로토콜 + 서버 이름 + 경로 + 쿼리 문자열
-
프로토콜
-
웹 브라우저가 서버와 내용을 주고받을 때 사용할 규칙 이름. 웹 페이지의 주소를 표현할 때는 http를 사용한ㄷ
-
서버 이름
-
페이지를 요청할 서버의 이름을 지정한다. 버 이름은 “javacan.tistory.com”과 같은 도메인 이름이나 180.70.134.237과 같은 IP 주소를 입력할 수 있다.
-
경로
-
웹 페이지의 상세 주소에 해당한다. 즉, 웹 페이지마다 다른 경로를 갖는다.
-
쿼리 문자열
-
추가로 서버에 보내는 데이터에 해당한다. 같은 경로라 하더라도 입력한 값에 따라 다른 결과를 보여줘야 할 때 쿼리 문자열을 사용한다. 예를 들어, 검색 결과를 보여주는 페이지를 생각해보자. 이 페이지는 입력한 검색어에 따라 다른 내용이 표시되는 데, 보통 쿼리 문자열을 이용해서 검색어를 전달한다.
-
://
-
프로토콜 이름과 서버 이름 사이에 위치
-
프로토콜과 나머지 부분을 구분하기 위해 사용된다.
URN
-
uniform resource name
-
통합 자원 이름
-
urn:scheme을 사용하는 URI를 위한 역사적인 이름이다.
-
영속적이고, 위치에 독립적인 자원을 위한 지시자로 사용하게 위해 1997년도 RFC 2141문서에서 정의되었다.
웹 브라우저와 웹 서버의 통신 과정
요청(request)
-
웹 브라우저가 웹 서버에 웹 페이지를 달라고 하는 것
응답(response)
-
요청한 웹 페이지를 웹 브라우저에 제공하는 것
IP주소
-
웹 브라우저가 웹 서버에 연결하려면, 웹 서버가 실행중인 컴퓨터의 주소를 알아야하는 데, 이 주소를 IP주소라고 부른다.
-
웹 브라우저와 웹 서버는 다른 컴퓨터에 위치해서 실행되고 있기 때문이다.
도메인
-
IP주소를 사람들이 기억하기 쉽게 만들어놓은 이름 주소
DNS
-
웹 브라우저와 웹 서버는 IP주소를 이용해서 연결하기 때문에 도메인 이름을 IP주소로 변환할 필요가 있는데, 이 때 사용하는 것이 DNS이다
-
Domain Name Server
클라이언트 (Client)
-
네트워크 프로그램에서 요청하는 쪽
-
웹 브라우저는 HTML 문서나 이미지 등을 요청하므로 클라이언트에 해당.
-
ip주소와 함께 포트 번호를 사용해서 원하는 서버 프로그램에 연결
서버(Server)
-
요청을 받아 알맞은 기능이나 데이터를 제공하는 쪽
-
웹 서버는 서버에 해당된다.
-
서버 프로그램이 실행되는 컴퓨터를 서버라고도 부른다.
포트(port)
-
각 서버 프로그램은 클라이언트가 연결할 때 다른 서버 프로그램과 구분할 수 있도록 사용하는 번호.
-
IP주소는 연결할 컴퓨터를 구분하는 데 사용되기 때문에, ip 주소만으로는 컴퓨터의 어떤 서버 프로그램을 실행할지 알 수 없다.
-
숫자로된 번호로서 서버 프로그램마다 구분되는 포트 번호를 사용.
-
웹 서버가 사용하는 기본 포트 번호는 80이다.
-
URL에서 프로토콜이 http인 경우 별도로 포트를 지정하지 않으면 80 포트로 연결한다는 것
-
http://localhost/라는 URL을 사용하면 웹 브라우저는 80포트를 이용해서 서버에 연결한다.
-
톰캣은 기본적으로 8080 포트를 사용하도록 설정되어 있다.
-
conf/server.xml파일을 보면 포트 번호를 지정하는 설정 부분이 있다.
렌더링(rendering)
-
HTML 표준에 따라 HTML 문서로부터 알맞은 화면을 생성하는 과정
HTTP
-
HyperText Transfer Protocol의 약자
-
웹 브라우저와 웹 서버가 HTML을 비롯해 이미지, 동영상, XML 문서 등 다양한 데이터를 주고 받을 때 사용하는 일종의 규칙
-
요청 규칙
-
웹 브라우저가 웹 서버에 HTML과 같은 것을 요청할 때 사용할 데이터 구성 규칙
-
응답 규칙
-
웹 서버가 웹 브라우저에 HTML과 같은 것은 전송할 때 사용할 데이터 구성 규칙
HTTP의 요청/응답 데이터의 구성요소
요청 데이터
-
요청/응답 줄
-
GET이나 POST와 같은 HTTP 요청 방식(method)과 요청하는 자원의 경로를 지정한다.
-
헤더
-
서버가 응답을 생성하는 데 참조할 수 있는 정보를 전송한다. 예를 들어, 브라우저의 종류나 언어 등의 정보를 보낸다.
-
몸체
-
정보를 전송해야 할 때 사용한다. 예를 들어, 파일 업로드와 같은 기능을 사용하면 몸체 영역에 파일을 담아 웹 서버에 전송한다.
응답 데이터
-
요청/응답 줄
-
요청에 대해 200이나 404같은 응답 코드를 전송한다. 참고로 200은 요청을 정상적으로 처리했음을 의미한다.
-
헤더
-
응답에 대한 정보를 전송한다. 응답의 몸체가 어떤 데이터인지, 길이는 어떻게 되는지 등에 대한 정보를 담는다.
-
몸체
-
웹 브라우저가 요청한 자원의 내용을 담는다. HTML 문서나 이미지 파일 데이터 등이 몸체 영역을 이용해서 전달한다.
웹 프로그래밍
-
웹 서버가 웹 브라우저에 응답으로 전송할 데이터를 생성해주는 프로그램을 작성하는 것
WAS
-
Web Application Server
-
서버는 웹을 위한 연결, 프로그래밍 언어, 데이터 베이스 연동과 같이 어플리케이션을 구현하는 데 필요한 기능을 제공하고 있다. 이런 이유로 이들 서버 프로그램을 웹 어플리케이션 서버라고도 부른다.
JSP 기본 코드 구조
-
JSP 페이지에 대한 설정 정보(설정 부분) + HTML 코드 및 JSP 스크립트 (생성부분)
-
설정부분
-
JSP페이지가 생성하는 문서의 타입(종류)
-
JSP페이지에서 사용할 커스텀 태그
-
JSP페이지에서 사용할 자바 클래스 지정
-
<%@ page …%>
-
JSP 페이지에 대한 정보를 설정할 때 page 디렉티브를 사용한다.
-
생성 부분
-
<%...%>
-
스크립트 코드는 HTML문서를 생성하는 데 필요한 데이터를 생성하고 출력하는 데 사용
JSP 페이지의 구성 요소
-
디렉티브 + 스크립트 요소 + 기본 객체 + 표현언어 + 표준 액션 태그와 태그 라이브러리
-
디렉티브
-
Directive
-
<%@ 디렉티브이름 속성1=”값”, 속성2=”값2” %>
-
JSP가 제공하고 있는 디렉티브
-
page
-
jsp 페이지에 대한 정보를 지정한다. jsp가 생성하는 문서의 타입, 출력 버퍼의 크기, 에러 페이지 등 jsp 페이지에서 필요로 하는 정보를 설정한다.
-
taglib
-
jsp 페이지에서 사용할 태그 라이브러리를 지정한다.
-
include
-
jsp 페이지의 특정 영역에 다른 문서를 포함시킨다.
-
스크립트 요소
-
jsp에서 문서의 내용을 동적으로 생성하기 위해 사용되는 것.
-
표현식, 스크립트릿, 선언부
-
표현식(Expression) - 값을 출력한다
-
스크립트릿(Scriptlet) - 자바 코드를 실행한다.
-
선언부(Declaration) - 자바 메서드(함수)를 만든다.
-
기본 객체
-
request, response, session, application, page …
-
표현 언어
-
JSP의 스크립트 요소(스크립트릿,표현식,선언부)는 자바 문법을 그대로 사용할 수 있다.
-
a * b = ${xxx}
-
표준 액션 태그와 태그 라이브러리
-
액션 태그
-
JSP 페이지에서 특별한 기능을 제공하는 태그
-
<jsp: 액션태그이름>
-
ex ) <jsp:include>
-
커스텀 태그
-
JSP를 확장시켜주는 기능
-
개발자가 직접 개발해주어야 한다
-
JSTL
-
JavaServer Pages Standard Tag Library
-
자주 사용하는 것들을 별도로 표준화한 태그 라이브러리
page 디렉티브
-
JSP 페이지에 대한 정보를 입력하기 위해 사용
속성 |
설명 |
기본값 |
contentType |
Jsp가 생성할 문서의 MIME타입과 캐릭터 인코딩을 지정한다. 응답 결과 인코딩 설정 |
text/html |
import |
JSP 페이지에서 사용할 자바 클래스를 지정한다. |
|
session |
JSP 페이지가 세션을 사용할지의 여부를 지정한다. “true”일 경우 세션을 사용하고 “false”일 경우 세션을 사용하지 않는다. |
true |
buffer |
JSP 페이지의 출력 버퍼 크기를 지정한다. “none”일 경우 출력 버퍼를 사용하지 않으며, “8kb”라고 입력한 경우 8킬로바이트 크기의 출력 버퍼를 사용한다. |
최소 8kb |
autoFlush |
출력 버퍼가 다 찼을 경우 자동으로 버퍼에 있는 데이터를 출력 스트림에 보내고 비울지 여부를 나타낸다. “true”인 경우 버퍼의 내용을 웹 브라우저에 보낸 후 버퍼를 비우며, “false”인 경우 에러를 발생시킨다. |
true |
info |
JSP 페이지에 대한 설명을 입력한다. |
|
errorPage |
JSP페이지를 실행하는 도중에 에러가 발생할 때 보여줄 페이지를 지정한다. |
|
isErrorPage |
현재 페이지가 에러가 발생될 때 보여주는 페이지인지의 여부를 지정한다.”true”일 경우 에러 페이지이며, “false”일 경우 에러 페이지가 아니다. |
false |
pageEncoding |
JSP 페이지 소스 코드의 캐릭터 인코딩을 지정한다. JSP 작성 인코딩 설정 |
|
isELIgnored |
“true”일 경우 표현 언어를 해석하지 않고 문자열로 처리하며, “false”일 경우 표현 언어를 지원한다. |
false |
deferredSyntaxAllowedAsLiteral |
#{문자가 문자열 값으로 사용되는 것을 허용할지의 여부를 지정한다. |
false |
trimDirectiveWhitespaces |
출력 결과에서 템플릿 텍스트의 공백 문자를 제거할지의 여부를 지정한다. |
false |
-
MIME
-
Multipurpose Internet Mail Extensions
-
이메일의 내용을 설명하기 위해 정의되었다.
-
HTTP 등의 프로토콜에서도 응답 데이터의 내용을 설명하기 위해 사용
-
<%@ page contentType=”text/xml; charset=utf-8” %>
-
<%@ page contentType=”text/html; charset=utf-8” %>
-
<%@ page contentType=”application/jsonl; charset=utf-8” %>
import 속성
-
<%@ page import = “java.util.*” %>
JSP 스크립트 요소
-
스크립트릿(Scriptlet), 표현식(Expression), 선언부(Declaration)
-
스크립트릿
-
JSP 페이지에서 자바 코드를 실행할 때 사용하는 코드 블록
-
<% 자바코드…. %>
표현식
-
<%= 값 %>
선언부
-
<html> 윗 부분
-
호출(call)
-
선언부에서 정의한 메서드인 multiply를 사용하여 두 숫자를 곱한 결과값을 출력하였는데, 이렇게 메서드를 사용하는 것을 메서드 호출(call)이라고 한다.
-
<%! 메서드 %>
request 기본 객체
설명
-
웹 브라우저의 요청과 관련
-
웹 브라우저에 웹 사이트의 주소를 입력하면, 웹 브라우저는 해당 웹 서버에 연결한 후 요청 정보를 전송하는 데, 이 요청 정보를 제공하는 것이 바로 request 기본 객체이다.
-
request 기본 객체가 제공하는 기능
-
클라이언트(웹 브라우저)와 관련된 정보 읽기 기능
-
서버와 관련된 정보 읽기 기능
-
클라이언트가 전송한 요청 파라미터 읽기 기능
-
클라이언트가 전송한 요청 헤더 읽기 기능
-
클라이언트가 전송한 쿠키 읽기 기능
-
속성 처리 기능
클라이언트 정보 및 서버 정보 읽기
-
웹 브라우저, 즉 클라이언트가 전송한 정보와 서버 정보를 구할 수 있는 메서드를 제공하고 있다.
-
request 기본 객체의 클라이언트 및 서버 정보 관련 메서드
메서드 |
리턴 타입 |
설명 |
getRemoteAddr() |
String |
웹 서버에 연결한 클라이언트의 IP주소를 구한다. 게시판이나 방명록 등에서 글 작성자의 IP주소가 자동으로 입력되기도 하는 데 , 이 때 IP주소가 바로 이 메서드를 사용하여 구한 것이다. |
getContentLength() |
long |
클라이언트가 전송한 요청 정보의 길이를 구한다. 전송된 데이터의 길이를 알 수 없는 경우 -1을 리턴한다. |
getCharacterEncoding() |
String |
클라이언트가 요청 정보를 전송할 때 사용한 캐릭터의 인코딩을 구한다. |
getContentType() |
String |
클라이언트가 요청 정보를 전송할 때 사용한 컨텐츠의 타입을 구한다. |
getProtocol() |
String |
클라이언트가 요청한 프로토콜을 구한다. |
getMethod() |
String |
웹 브라우저가 정보를 전송할 때 사용한 방식을 구한다. |
getRequestURI() |
String |
웹 브라우저가 요청한 URL에서 경로를 구한다. |
getConextPath() |
String |
JSP페이지가 속한 웹 어플리케이션의 컨텍스트 경로를 구한다. |
getServerName() |
String |
연결할 때 사용한 서버 이름을 구한다. |
getServerPort() |
int |
서버가 실행중인 포트 번호를 구한다. |
request 기본 객체의 파라미터 읽기 메서드
메서드 |
리턴타입 |
설명 |
getParameter(STring name) |
String |
이름이 name인 파라미터의 값을 구한다. 존재하지 않을 경우 nul을 리턴한다. |
getParameterValues(String name) |
String[] |
이름이 name인 모든 파라미터의 값을 배열로 구한다. 존재하지 않을 경우 null을 리턴한다. |
getParameterNames() |
java.util.Enumeration |
웹 브라우저가 전송한 파라미터의 이름 목록을 구한다. |
getParameterMap() |
java.util.Map |
웹 브라우저가 전송한 파라미터의 맵을 구한다. |
-
체크박스 <input type=”checkbox”...>와 라디오버튼<input type=”radio”...>은 선택하지 않으면 파라미터 자체가 전송되지 않는다. 하지만, 텍스트<input type=”text”...>를 위한 입력 요소들은 값을 입력하지 않더라도 빈 문자열(“”)이 파라미터 값으로 전달된다.
GET 방식 전송과 POST방식 전송
-
GET
-
요청 URL에 파라미터를 붙여서 전송한다.
-
URL경로 뒤에 이름1=값1&이름2=값2 같은 형태로 작성
-
RFC 2396 규약에 정의된 규칙에 따라 인코딩해서 전송
-
파라미터 값의 길이에 제한이 있을 수 있다.
-
POST
-
데이터 영역을 이용해서 파라미터를 전송한다.
-
웹 브라우저나 웹 서버 등에 상관없이 전송할 수 있는 파라미터의 길이에 제한이 없다.
요청 파라미터 인코딩
-
웹 브라우저 (인코딩) -> 웹 서버 (디코딩)
-
어떤 캐릭터 셋을 사용할지의 여부는 GET,POST방식에 따라 달라진다.
-
POST 방식에서는 입력 폼을 보여주는 응답 화면이 사용하는 캐릭터 셋을 사용한다.
-
request 기본 객체의 setCharacterEncoding()를 사용해서 파라미터 값을 디코딩할 때 사용할 캐릭터 셋을 지정할 수 있다.
-
ex) request.setCharacterEncoding(“utf-8”);
-
request.getParameter(),request.getParameterValues() 메서드는 요청 파라미터 값을 읽어올때 이 메서드를 지정해서 디코딩해야한다.
-
캐릭터 셋을 지정하지 않을 경우 ISO-8859-1 캐릭터 셋을 기본으로 사용.
-
파라미터 값을 사용하기 전에 실행해주어야한다.
-
Get 방식으로 전송된 파라미터에 대해서는 이 메서드가 적용되지 않는다.
-
GET 방식으로 파라미터 전송 시 인코딩 결정 규칙
GET 방식 이용 시 파라미터 전송 방법 |
인코딩 결정 |
<a> 태그의 링크 태그에 쿼리 문자열 추가 |
웹 페이지 인코딩 사용 |
HTML 폼(FORM)의 method 속성값을 “GET”으로 지정해서 폼을 전송 |
웹 페이지 인코딩 사용 |
웹 브라우저에 주소에 직접 쿼리 문자열을 포함하는 URL 입력 |
웹 브라우저마다 다름 |
response 기본 객체
-
웹 브라우저에 보내는 응답 정보를 담는다.
-
헤더 정보 입력
-
리다이렉트 하기
웹 브라우저에 헤더 정보 전송하기
-
response 기본 객체는 응답 정보에 헤더를 추가하는 기능을 제공한다.
-
헤더 관련 메서드의 리턴 타입은 모두 void이다.
웹 브라우저 캐시 제어를 위한 응답 헤더 입력
-
웹 브라우저가 변경된 내역을 출력하지 않는 이유 중 하나는 웹 브라우저가 서버가 생성한 결과를 출력하지 않고 캐시에 저장된 데이터를 출력하기 때문에 캐시 제어를 위한 응답 헤더를 입력해줘야한다.
-
캐시(Cache)란?
-
웹 브라우저는 첫 번째 요청 시 응답 결과를 로컬 PC의 임시 보관소인 캐시에 저장한다. 이후, 동일한 URL에 대한 요청이 있으면 WAS에 접근하지 않고 로컬 PC에 저장된 응답 결과를 사용한다. 캐시에 보관된 데이터를 사용하는 경우, WAS에 접근하지 않기 때문에 훨씬 빠르게 응답 결과를 웹 브라우저에 출력할 수 있게 된다. 따라서 변경이 발생하지 않는 JSP의 응답 결과나 이미지, 정적인 HTML등은 캐시에 보관함으로써 웹 브라우저의 응답 속도를 향상시킬 수 있다.
리다이렉트를 이용해서 페이지 이동하기
-
리다이렉트
-
웹 서버가 웹 브라우저에게 다른 페이지로 이동하라고 응답하는 기능.
-
웹 서버 측에서 웹 브라우저에게 어떤 페이지로 이동하라고 지정하는 것
-
웹 브라우저는 실질적으로 요청을 두 번 하게 된다.
-
response.sendRedirect(String location)
-
웹 서버에 전송할 파라미터 값은 알맞게 인코딩해야 한다
-
String encodedValue = URLEncoder.encode(value, “utf-8”);
JSP 주석
-
// or <%-- 설명 --%>
JSP 처리 과정
-
JSP페이지를 요청할 때에는 JSP를 직접 실행하는 것이 아니라, JSP를 자바 소스 코드로 변환한 뒤 컴파일해서 생성한 서블릿을 실행하는 것이다.
JSP는 출력 내용을 버퍼에 저장한 후 , 나중에 전송
-
장점
-
데이터 전송 성능 향상
-
JSP 실행 도중에 버퍼를 비우고 새로운 내용 전송 가능
-
버퍼가 다 차기 전까지 헤더 변경 가능
page 디렉티브에서 버퍼 설정하기 :buffer속성과 autoFlush 속성
플러쉬(flush)
-
버퍼가 다 찼을 때, 버퍼에 쌓인 데이터를 실제로 전송되어야 할 곳(또는 저장되어야 할 곳)에 전송하고(또는 저장하고) 버퍼를 비우는 것을 플러시라고 한다.
웹 어플리케이션 폴더 구성과 URL 매핑
-
WEB-INF : 웹 어플리케이션 설정 정보를 담고 있는 web.xml파일이 위치.
-
context path: /웹 어플리케이션 경로 (/chap04)
-
ROOT는 “”
-
request.getConextPath()
웹 어플리케이션 배포
-
파일 직접 복사
-
war 파일로 묶어서 배포
-
war : Web Application Archive
chap05 기본 객체와 영역
JSP가 제공하는 기본객체
out 기본객체
-
웹 브라우저에 데이터를 전송하는 출력 스트림으로 JSP 페이지가 생성한 데이터를 출력한다.
-
out.println();
-
JSP페이지의 스크립트릿에서 직접 사용
-
print(), println(), newLInt()
pageContext 기본 객체
-
JSP 페이지와 일대일로 연결된 객체, 다음 기능 제공
-
기본 객체 구하기
-
속성 처리하기
-
페이지 흐름 제어하기
-
에러 데이터 구하기
-
getRequest(), getResponse()가 실제로 리턴하는 객체의 타입은 HttpServletRequest, HttpServletResponse이다
-
JSP는 웹 환경에서 사용되기 때문, JSP가 HTTP 요청을 처리하므로…
application 기본 객체
웹 어플리케이션 초기화 파라미터 읽어오기
-
web.xml <context-param>태그를 사용하여 추가
-
web.xml파일은 WEB-INF파일안에 작성
-
서블릿 2.5/JSP2.1 버전까지는 web.xml파일이 필수, 서블릿 3.0/JSP 2.2버전부터 필요할때 만 작성
-
서블릿 3.0 버전부터 자바 코드를 이용해서 설정할 수 있다.
-
web.xml 파일에 초기화 파라미터를 추가하면, JSP는 application 기본 객체가 제공하는 메서드를 사용해서 초기화 파라미터를 사용할 수 있다.
-
초기화 파라미터는 언제 사용할까?
-
웹 어플리케이션을 초기화하는 데 필요한 설정 정보를 지정하기 위해 사용.
-
데이터베이스 연결과 관련된 설정 파일의 경로나, 로깅 설정파일, 웹 어플리케이션의 주요 속성 정보를 담고 있는 파일의 경로등을 지정할 때 사용
서버 정보 읽어오기
로그 메시지 기록하기
웹 어플리케이션의 자원 구하기
application 기본 객체가 제공하는 자원 접근 메서드
메서드 |
리턴 타입 |
설명 |
getRealPath(String path) |
String |
웹 어플리케이션 내에서 지정한 경로에 해당하는 자원의 시스템상에서의 경로를 리턴한다. |
getResource(String path) |
java.net.URL |
웹 어플리케이션 내에서 지정한 경로에 해당하는 자원에 접근할 수 있는 URL 객체를 리턴한다. |
getResourceAsStream(String path) |
java.io.inputStream |
웹 어플리케이션 내에서 지정한 경로에 해당하는 자원으로부터 데이터를 읽어올 수 있는 InputStream을 리턴한다. |
JSP에서 경로는 \\ 두개로 입력.
웹 어플리케이션 폴더는 프로젝트 파일
JSP기본 객체와 영역
-
PAGE 영역 : 하나의 JSP 페이지를 처리할 때 사용되는 영역
-
pageContext 기본 객체
-
REQUEST 영역 : 하나의 HTTP 요청을 처리할 때 사용되는 영역
-
SESSION 영역 : 하나의 웹 브라우저와 관련된 영역
-
APPLICATION 영역 : 하나의 웹 어플리케이션과 관련된 영역
네 가지 영역과 기본 객체의 관계
JSP 기본 객체의 속성(Attribute) 사용하기
속성 처리 메서드
메서드 |
리턴 타입 |
설명 |
setAttribute(String name,Object value) |
void |
이름이 name인 속성의 값을 value로 지정한다. |
getAttribute(String name) |
Object |
이름이 name인 속성의 값을 구한다. 지정한 이름의 속성이 존재하지 않으면 null을 리턴한다. |
removeAttribute(String name) |
void |
이름이 name인 속성을 삭제한다. |
getAttributeNames() |
Enumeration<String> |
속성의 이름 목록을 구한다.(pageContext 기본 객체는 이 메서드를 제공하지 않는다.) |
웹 어플리케이션 내에 있는 모든 JSP가 한 개의 application 기본 객체를 공유한다.
속성의 활용
속성의 쓰임새
기본 객체 |
영역 |
쓰임새 |
pageContext |
PAGE |
(한 번의 요청을 처리하는)하나의 JSP페이지 내에서 공유할 값을 저장한다. 주로 커스텀 태그에서 새로운 변수를 추가할 때 사용한다. |
request |
REQUEST |
한 번의 요청을 처리하는 데 사용되는 모든 JSP 페이지에서 공유할 값을 저장한다. 주로 하나의 요청을 처리하는 데 사용하는 JSP페이지 사이에서 정보를 전달하기 위해 사용된다. |
session |
SESSION |
한 사용자와 관련된 정보를 JSP 사이에 공유하기 위해 사용한다. 사용자의 로그인 정보와 같은 것들을 저장한다. |
application |
APPLICATION |
모든 사용자를 위해 공유할 정보를 저장한다. 임시 폴더 경로와 같이 웹 어플리케이션의 설정 정보를 주로 저장한다. |
에러 처리
try-catch
에러 페이지 지정하기
-
<%@ page errorPage ~~%>
에러 페이지 작성하기
-
<%@ page isErrorPage = “true” ~~%>
응답 상태 코드별로 에러 페이지 지정하기
-
web.xml파일에 지정
-
<error-page>
주로 응답 상태 코드
-
200: 요청을 정상적으로 처리함
-
307: 임시로 페이지를 리다이렉트함
-
response.sendRedirect()를 이용할 경우
-
400: 클라이언트의 요청이 잘못된 구문으로 구성됨
-
401: 접근을 허용하지 않음
-
404: 요청한 URL을 처리하기 위한 자원이 존재하지 않음
-
405: 요청한 메서드(GET, POST, HEAD 등의 전송 방식)를 허용하지 않음
-
500: 서버 내부 에러가 발생함(예를 들어, JSP 에서 익셉션이 발생함)
-
503: 서버가 일시적으로 서비스를 제공할 수 없음(급격하게 부하가 몰리거나 서버가 임시 보수 중인 경우가 해당)
익셉션 타입별로 에러 페이지 지정하기
에러 페이지의 우선순위와 에러 페이지 지정 형태
버퍼와 에러 페이지의 관계
chap07 페이지 모듈화와 요청 흐름 제어
01<jsp:include> 액션 태그를 이용한 공통 영역 작성
<jsp:include>액션태그의 동작 방식
액션 태그 처리 순서
-
main.jsp가 웹 브라우저의 요청을 받는다.
-
출력내용 A를 출력 버퍼에 저장한다
-
jsp:include가 실행되면 요청흐름을 sub.jsp로 이동한다.
-
출력내용 b를 출력 버퍼에 저장한다.
-
sub.jsp의 실행이 끝나면 요청 흐름이 다시 main.jsp <jsp:include>로 돌아온다.
-
jsp:include 이후 부분인 출력내용 C를 출력 버퍼에 저장한다.
-
출력 버퍼의 내용을 응답 데이터로 전송한다.
1.3 <jsp:param>으로 포함할 페이지에 파라미터 추가하기
-
include 태그 안에 자식 태그로 추가
02 include 디렉티브를 이용한 중복된 코드 삽입
2.1 include 디렉티브의 처리 방식과 사용법
-
<%@ include file=”포함할 파일 %>
-
모든 JSP 페이지에서 사용하는 변수 지정
-
저작권 표시와 같이 모든 페이지에서 중복되는 간단한 문장
2.3 코드 조각 자동 포함 기능
-
<jsp-config>
-
<jsp-property-group> : JSP의 프로퍼티를 포함한다.
-
<url-pattern> :프로퍼티를 적용할 JSP파일의 URL 패턴을 지정한다.
-
<include-prelude> : url-pattern태그에 지정한 패턴에 해당하는 JSP파일의 앞에 삽입할 파일을 지정한다.
-
<include-coda> : url-pattern 태그에 지정한 패턴에 해당하는 JSP 파일의 뒤에 삽입할 파일을 지정한다.
2.4 <jsp:include> 액션 태그와 include 디렉티브의 비교
표: <jsp:include> 액션 태그와 include 디렉티브의 차이
비교 항목 |
<jsp:include> |
include 디렉티브 |
처리 시간 |
요청 시간에 처리 |
JSP 파일을 자바 소스로 변환할 때 처리 |
기능 |
별도의 파일로 요청 처리 흐름을 이동 |
현재 파일에 삽입시킴 |
데이터 전달 방법 |
request 기본 객체나 <jsp:param>을 이용한 파라미터 전달 |
페이지 내의 변수를 선언한 후, 변수에 값 저장 |
용도 |
화면의 레이아웃의 일부분을 모듈화할 때 주로 사용한다. |
다수의 JSP 페이지에서 공통으로 사용되는 변수를 지정하는 코드나 저작권과 같은 문장을 포함한다. |
03 <jsp:forward> 액션 태그를 이용한 JSP 페이지 이동
3.1. 사용 법
-
웹 브라우저의 주소는 from.jsp 그대로이다. 즉, 리다이렉트처럼 to.jsp로 변경되지 않는다.
3.2. <jsp:forward> 액션 태그와 출력 버퍼와의 관계
-
jsp:forward를 실행하기 전에 출력 버퍼를 다 비운다. 저장했던 내용은 웹 브라우저에 전송되지 않는다.
3.4 <jsp:param> 액션 태그를 이용해서 이동할 페이지에 파라미터 추가하기
04. <jsp:include> 와 <jsp:forward> 액션 태그의 page 속성 경로
-
‘/’ 로 시작하면 절대 경로가 된다
-
맨 앞에 ‘/’ 가 절대 경로의 기준점인 웹 어플리케이션 폴더를 의미한다.
-
상대 경로는 현재 JSP 페이지를 기준으로 경로를 결정.
05. 기본 객체의 속성을 이용해서 값 전달하기
-
request.setAttribute(“이름지정”, 값);
-
request.getAttribute(“지정한 이름”);
chap08 자바빈과 <jsp:useBean> 액션 태그
01 자바빈<JavaBeans)
-
자바빈은 속성(데이터), 변경 이벤트, 객체 직렬화를 위한 표준이다. 이 중에서 JSP에서는 속성을 표현하기 위한 용도로 사용된다.
1.1 자바빈 프로퍼티
-
프로퍼티
-
자바빈에 저장되는 값
-
메서드 이름을 이용해서 프로퍼티의 이름을 결정하게 된다.
-
setMaxAge(int value);
-
getMaxAge();
-
프로퍼티 타입이 boolean일 경우 get대신에 is를 붙일 수 있다.
03 <jsp:useBean> 태그를 이용한 자바 객체 사용
3.1 <jsp:useBean> 액션 태그를 사용하여 객체 생성하기
-
기본 구문
-
<jsp:useBean id=”[빈이름]” class=”[자바빈클래스이름]” scope=”[범위]” />
-
id : JSP 페이지에서 자바빈 객체에 접근할 때 사용할 이름을 지정한다.
-
class : 패키지 이름을 포함한 자바빈 클래스의 완전한 이름을 입력한다.
-
scope : 자바빈 객체를 저장할 영역을 지정한다. page, request, session, application 중 하나를 값으로 갖는다. 기본값은 page이다.
-
이 액션 태그에서 중요한 점은 객체를 생성할 뿐만 아니라 지정한 영역에 저장한다는 점 그리고 이미 영역에 객체가 존재하면 그 객체를 사용한다는 점이다.
-
class 대신에 type속성을 사용하면 지정한 영역에 이미 객체가 존재한다고 가정한다. 존재하지 않으면 에러를 발생시킨다.
3.2 <jsp:setProperty> 액션 태그와 <jsp:getProperty> 액션 태그
-
<jsp:setProperty name=”[자바빈]” property=”이름” value=”[값]” />
-
name : 프로퍼티의 값을 변경할 자바빈 객체의 이름을 지정한다. <jsp:useBean> 액션 태그의 id속성에서 지정한 값을 사용한다.
-
property : 값을 지정할 프로퍼티의 이름을 지정한다.
-
value : 프로퍼티의 값을 지정한다. 표현식(<%= 값 %>) 이나 EL(${값})을 사용할 수 있다.
-
value 속성 대신에 param속성을 사용할 수 도 있다.
-
param속성은 파라미터 값을 프로퍼티 값으로 지정할 때 사용.
-
param속성과 value 속성은 함께 사용할 수 없다.
3.3 자바빈 프로퍼티 타입에 따른 값 매핑
chap09 클라이언트와의 대화 1 : 쿠키
01 쿠키 사용하기
-
쿠키(cookie) : 웹 브라우저가 보관하는 데이터
-
쿠키는 웹 서버와 웹 브라우저 양쪽에서 생성할 수 있는 데, JSP에서 생성하는 쿠키는 웹 서버에서 생성하는 쿠키이다.
-
쿠키 동작 방식 <그림>
1.1 쿠키의 구성
1.2 쿠키 생성하기
-
<%
Cookie cookie = new Cookie(“cookieName”,”cookieValue”);
response.addCookie(cookie);
%>
-
Cookie 클래스가 제공하는 메서드
메서드 |
리턴 타입 |
설명 |
getName() |
String |
쿠키 이름을 구한다. |
getValue() |
String |
쿠키 값을 구한다. |
setValue(String value) |
void |
쿠키 값을 지정한다. |
setDomain(String pattern) |
void |
이 쿠키가 전송될 서버의 도메인을 지정한다. |
getDomain() |
String |
쿠키의 도메인을 구한다. |
setPath(String uri) |
void |
쿠키를 전송할 경로를 지정한다. |
getPath() |
String |
쿠키의 전송 경로를 구한다. |
setMaxAge(int expiry) |
void |
쿠키의 유효시간을 초 단위로 지정한다. 음수를 입력할 경우 웹 브라우저를 닫을 때 쿠키가 함께 삭제된다. |
getMaxAge() |
int |
쿠키의 유효시간을 구한다. |
1.3 쿠키 값 읽어오기
-
Cookie[] cookies = request.getCookies();
1.4 쿠키 값 변경 및 쿠키 삭제하기
-
변경하려면 같은 이름의 쿠키를 새로 생성해서 응답 데이터로 보내면 된다.
-
Cookie cookie = new Cookie(“name”, URLEncoder.encode(“새로운값”, “euc-kr”));
response.addCookie(cookie);
-
쿠키를 삭제하려면 setMaxAge(0) 을 주면 된다.
-
Cookie cookie = new Cookie(name, value);
cookie.setMaxAge(0);
response.addCookie(cookie);
1.5 쿠키의 도메인
-
기본적으로 쿠키는 그 쿠키를 생성한 서버에만 전송된다.
-
하지만, 같은 도메인을 모든 서버에 쿠키를 보내야 할 때가 있다.
-
이럴 때 setDomain() 메서드를 사용한다.
-
주의할 점은 현재 서버의 도메인 및 상위 도메인만 전달할 수 있다.
-
cookie.setDomain(“.somehost.com”);
-
.으로 시작하는 경우 관련 도메인에 모두 쿠키를 전송한다.
1.6 쿠키의 경로
1.7 쿠키의 유효시간
-
아이디 기억하기, 자동로그인 기능 구현
1.8 쿠키와 헤더
02 쿠키 처리를 위한 유틸리티 클래스
03 쿠키를 사용한 로그인 상태 유지
chap10 클라이언트와의 대화2 : 세션
-
서버 세션을 사용하면 클라이언트의 상태를 저장할 수 있다.
-
서버에 값을 저장한다.
-
로그인한 사용자 정보를 유지하기 위한 목적으로 세션 사용
01 세션 사용하기 : session 기본 객체
-
웹 컨테이너에 정보를 보관할 때 사용
-
세션은 웹 브라우저와 연관된 서버 영역 저장 공간이다.
-
같은 jsp페이지라도 웹 브라우저에 따라 서로 다른 세션을 사용한다.
1.1 세션 사용하기
-
<%@ page session = “true” %>
-
기본값이 true
-
session.setAttribute(“이름”, 값);
-
세션을 사용하는 서버 프로그램에 웹 브라우저가 처음 접속할 때 세션을 생성하고, 이후로는 이미 생성된 세션을 사용한다.
1.2 session 기본 객체
-
session 기본 객체가 제공하는 세션 정보 관련 메서드
-
getId()
-
getCreationTime()
-
getLastAccessedTime()
-
웹 서버와 웹 브라우저는 세션 ID를 공유할 수 있는 방법이 필요하다.
-
세션 ID를 공유하기 위해 사용하는 것이 쿠키이다.
-
JSESSIONID 쿠키가 세션 ID를 공유할 때 사용하는 쿠키
1.3 기본 객체의 속성 사용
-
session 기본 객체는 웹 브라우저의 여러 요청을 처리하는 JSP 페이지 사이에서 공유된다.
-
로그인한 회원 정보 등 웹 브라우저와 일대일로 관련된 값을 저장할 때는 쿠키 대신 세션을 사용할 수 있다.
-
setAttribute(“이름”, “값”);
-
getAttribute(“이름”);
1.4 세션 종료
-
session.invalidate()
1.5 세션 유효 시간
-
WEB-INF\web.xml 파일에 <session-config> 태그안에
-
<session-timeout> 분단위 </session-timeout>
-
0 이나 음수로 설정하면 유효 시간을 갖지 않고 계속 유지.
-
session.invalidate() 호출하기 전까지
-
웹 컨테이너의 메모리 부족 현상이 발생
-
setMaxInactiveInterval(60 * 60); (60분) (초단위)
1.6 request.getSession()을 이용한 세션 생성
-
<%@ page session = “false” %>
<% HttpSession httpSession = request.getSession();
02 세션을 사용한 로그인 상태 유지
-
로그인에 성공하면 session 기본 객체의 특정 속성에 데이터를 기록한다.
-
이후로 session 기본 객체의 특정 속성이 존재하면 로그인한 것으로 간주한다.
-
로그아웃할 경우 session.invalidate() 호출하여 세션을 종료한다.
2.1 인증된 사용자 정보 session 기본 객체에 저장하기
-
session.setAttribute(“이름”, 아이디 값);
2.2 인증 여부 판단
session.getAttribute(“이름”);
2.3 로그아웃 처리
-
session.invalidate();
-
session.removeAttribute(“이름”);
03 연관된 정보 저장을 위한 클래스 작성
04 서블릿 컨텍스트와 세션
-
컨텍스트 경로마다 세션이 다르다.
-
같은 웹 브라우저라 하더라도 서로 다른 어플리케이션을 사용하는 session 기본 객체는 다르다.
chap11 표현언어(Expression Language)
01 표현 언어란?
-
값을 표현하는 데 사용하는 스크립트 언어.
-
JSP의 네 가지 기본 객체가 제공하는 영역의 속성 사용
-
수치 연산, 관계 연산, 논리 연산자 제공
-
자바 클래스 메서드 호출 기능 제공
-
쿠키, 기본 객체의 속성 등 JSP를 위한 표현 언어의 기본 객체 제공
-
람다식을 이용한 함수 정의와 실행(EL 3.0)
-
스트림 API를 통한 컬렉션 처리 (EL 3.0)
-
정적 메서드 실행 (EL 3.0)
1.1 EL의 구성
-
${값}
-
JSP 스크립트 요소(스크립트릿, 표현식, 선언부)를 제외한 나머지 부분에서 사용.
-
#{expr} , ${expr}
-
#{expr}
-
JSF(JavaServer Faces)에서 사용한 EL구문으로 JSP 2.1 버전에 추가
-
차이 : 실제로 EL의 값을 언제 생성하느냐
-
${expr} : 값이 생성될 때 계산을 수행
-
#{expr} : 값이 실제로 필요해서 사용될 때 계산을 수행
-
Deferred Expression
-
JSP 템플릿 텍스트에는 사용 불가
02 EL 기초
-
EL 변수 생성
-
<% request.setAttribute(“varl”, 10L); %>
-
<c:set var=”varl” value=”${10}” />
2.1 EL 데이터 타입과 리터럴
-
정수 타입 : Long 타입
-
실수 타입 : Double 타입
-
문자열 타입 : 작은 따옴표는 \’로 표시 \는 \\로 표시
2.2 EL의 기본 객체
2.3 객체 접근
-
<표현1>.<표현2>
-
<표현1>[<표현2>]
2.4 객체 탐색
-
영역을 나타내는 EL 기본 객체를 사용하지 않고 이름만 지정하는 경우 EL은 네 개의 영역을 차례대로 검색해서 속성이 존재하는지 확인한다.
2.5 수치 연산자
2.6 비교 연산자
2.7 논리 연산자
2.8 empty 연산자
-
검사할 객체가 텅 빈 객체인지를 검사하기 위해 사용
-
empty <값>
-
값이 null이면 true를 리턴한다.
-
값이 빈 문자열(“”)이면 true를 리턴한다
-
<값>이 길이가 0인 배열이면 true를 리턴한다.
-
값이 빈 Map이면 true를 리턴한다
-
값이 빈 Collection이면 true를 리턴한다
-
이외의 경우에는 false를 리턴한다.
2.9 비교 선택 연산자
2.10 문자열 연결
-
+=
2.11 컬렉션
-
List 타입
-
<c:set var=”vals” values=”${[1, 2, 5, 10]}”/>
${myfunc:sum([1, 2, 5, 10])}
-
Map 타입
-
<c:set var=”mem” value=”${ {‘name’ : ‘홍길동’, ‘age’ : 20} }” />
${mem.name}, ${mem.age}
-
Set 타입
-
<c:set var=”hangul” value=”${ {‘가’, ’나’, ‘다’ }” } />
${hangul}
2.12 세미콜론 연산자
-
${1+1 ; 10+10}
-
결과 20 : 뒤에 값만 출력한다.
2.13 할당 연산자
-
${varl=10}
2.14 연산자 우선순위
2.15 특수 문자 처리하기
-
\
03 EL에서 객체의 메서드 호출
04 EL에서 정적 메서드 호출하기1
4.2 함수를 정의한 TLD 파일 작성
-
TLD : Tag Library Descriptor의 약자, 태그 라이브러리에 대한 설정 정보를 담고 있다.
4.3 web.xml 파일에 TLD 내용 추가하기
4.4 EL에서 함수 사용하기
-
<%@ taglib prefix=”pre” uri=”...” %>
${pre : functionName(arg1, arg2, …)}
05 EL에서 정적 메서드 호출하기 2
-
<%@ page import=”util.FormatUtil” %>
${FormatUtil.number(price, ‘#,##O’)}
06 람다식 사용하기
-
(파라미터1, 파라미터2) -> EL식
-
${greaterThan = (a,b) -> a>b? true : false ; ‘’}
07 스트림 API 사용하기
-
간단한 코드로 합을 구할 수 있다.
-
<c:set var=”lst” value=”<%= java.util.Arrays.asList(1,2,3,4,5) %>“/>
<c:set var=”sum” value=”${lst.stream().sum()}” />
-
${lst = [1,2,3,4,5]; sum =lst.stream().sum(); ‘’}
7.1 스트림 API 기본
-
스트림 API 기본형태
-
collection.stream() / 콜렉션에서 스트림 생성
.map(x -> x*x) / 중간 연산(스트림 변환)
.toList() / 최종 연산(결과 생성)
7.2 stream()을 이용한 스트림 생성
7.3 filter()를 이용한 걸러내기
7.4 map()을 이용한 변환
7.5 sorted를 이용한 정렬
7.6 limit()을 이용한 개수 제한
7.7 toList()와 toArrary()를 이용한 결과 생성
7.8 count()를 이용한 개수 확인
7.9 Optional 타입
7.10 sum()과 average()를 이용한 수치 연산 결과 생성
7.11 min()과 max()를 이용한 최소/최대 구하기
7.12 anyMatch(), allMatch(), noneMatch()를 이용한 존재 여부 확인
08 표현 언어 비활성화 방법
-
web.xml 파일에 비활성화 옵션 지정하기
-
JSP 페이지에 비활성화 옵션 지정하기
-
web.xml 파일을 서블릿 2.3 또는 2.4 버전에 맞게 작성하기
chap12 표준 태그 라이브러리(JSTL)
01JSTL이란
-
JSP Standard Tag Library
-
커스텀 태그를 표준으로 만들어서 정의한 것
1.1 JSTL이 제공하는 태그의 종류
1.2 JSTL 라이브러리 받기
02 코어 태그
기능 분류 |
태그 |
설명 |
변수 지원 |
set |
JSP에서 사용할 변수를 설정한다. |
remove |
설정한 변수를 제거한다. |
|
흐름 제어 |
if |
조건에 따라 내부 코드를 수행한다. |
choose |
다중 조건을 처리할 때 사용된다. |
|
forEach |
컬렉션이나 Map의 각 항목을 처리할 때 사용된다. |
|
forTokens |
구분자로 분리된 각각의 토큰을 처리할 때 사용된다. |
|
URL처리 |
import |
URL을 사용하여 다른 자원의 결과를 삽입한다. |
redirect |
지정한 경로로 리다이렉트 한다. |
|
url |
URL을 재작성 한다. |
|
기타 태그 |
catch |
익셉션을 처리할 때 사용한다. |
out |
JspWriter에 내용을 출력한다. |
-
taglib 디렉티브 추가
-
<%@ taglib prefix = “c” uri=”http://java.sun.com/jsp/jstl/core” %>
2.1 변수 지원 태그
2.1.1 <c:set> 태그
-
EL 변수의 값이나 EL 변수의 프로퍼티 값을 지정할 때 사용
-
EL 변수를 생성
-
<c:set var=”변수명” value=”값” [scope=”영역”] />
<c:set var=”변수명” [scope=”영역”]>값</c:set>
-
객체의 프로퍼티 값을 설정
-
<c:set target = “대상” property=”프로퍼티이름” value=”값” />
<c:set target = “대상” property=”프로퍼티이름”>값</c:set>
-
태그의 속성 설명 요약
속성 |
표현식/EL |
타입 |
설명 |
var |
사용 불가 |
String |
EL 변수 이름 |
value |
사용 가능 |
Object |
변수에 할당할 값 |
scope |
사용 불가 |
String |
변수를 생성할 영역, 기본값은 page |
target |
사용 가능 |
Object |
프로퍼티 값을 설정할 객체 지정 |
property |
사용 가능 |
String |
프로퍼티 이름 |
2.1.2 <c:remove> 태그
-
set 태그로 지정한 변수를 삭제할 때 사용.
-
<c:remove var=”varName” [scope=”영역”] />
-
주의할 점
-
scope를 지정하지 않으면 동일한 이름으로 저장된 모든 영역의 변수를 삭제한다.
-
태그 속성 설명
속성 |
표현식/EL |
타입 |
설명 |
var |
사용 불가 |
String |
삭제할 EL 변수 이름 |
scope |
사용 불가 |
String |
삭제할 변수가 포함된 영역 |
2.2 흐름 제어 태그
-
if, choose, forEach, forTokens
2.2.1 <c:if> 태그
-
<c:if test=”조건”> … </c:if>
-
태그 속성
속성 |
표현식/EL |
타입 |
설명 |
test |
사용 가능 |
boolean |
검사 조건 |
var |
사용 불가 |
String |
검사 조건의 계산 결과값을 저장할 EL변수 |
scope |
사용 불가 |
String |
if 결과를 저장할 EL 변수의 영역 |
2.2.2 <c:choose>, <c:when>, <c:otherwise> 태그
-
<c:choose>
-
switch 구문와 if-else 블록을 혼합한 형태
-
<c:choose>
<c:when test= true>
…
</c:when>
<c:otherwise> //필수는 아니다.
</c:otherwise>
2.2.3 <c:forEach> 태그
-
배열, Collection 또는 Map에 저장되어있는 값들을 순차적으로 처리할 때 사용
-
<c:forEach var=”변수” items=”아이템”>
${변수사용}
</c:forEach>
-
items 속성에는 Map, 배열, Collection이 올 수 있다.
-
varStatus 속성을 이용해서 인덱스 값 사용 가능
-
루프 정보를 담는 객체를 저장할 변수명을 값으로 갖는다.
-
index : 루프 실행에서 현재 인덱스
-
count : 루프 실행 횟수
-
begin : begin 속성값
-
end : end 속성값
-
step : step 속성값
-
first : 현재 실행이 첫 번째 실행인 경우 true
-
last : 현재 실행이 루프의 마지막 실행인 경우 true
-
current : 컬렉션 중 현재 루프에서 사용할 객체
-
태그 속성 설명
속성 |
표현식/EL |
타입 |
설명 |
var |
사용 불가 |
String |
몸체에서 사용할 EL 변수 이름 |
items |
사용 가능 |
Collection,Iterator,Enumeration,Map,배열 |
반복 처리할 데이터 |
varStatus |
사용 불가 |
String |
루프 상태를 저장할 EL 변수 이름 |
begin |
사용 가능 |
int |
시작 인덱스 값 |
end |
사용 가능 |
int |
끝 인덱스 값 |
step |
사용 가능 |
int |
인덱스 증분 값 |
2.2.4 <c:forTokens> 태그
-
<c:forTokens var=”token” item=”문자열” delim=”구분자”>
${token}의 사용
2.3 URL 처리 태그
-
URL 생성 : <c:url> 태그
-
리다이렉트 처리 : <c:redirect> 태그
2.3.1 <c:url> 태그
-
<c:url value=”URL” [var=”varName”] [scope=”영역”]>
<c:param name=”이름” value=”값” />
2.3.2 <c:redirect> 태그
-
<c:redirect url=”URL” [context=”컨텍스트경로”]>
<c:param name=”이름” value=”값” />
2.4 기타 코어 태그
2.4.1 <c:out> 태그
-
JspWriter에 데이터를 출력할 때 사용되는 태그.
-
<c:out value=”value” [escapeXml=”(true|false)”][default=”기본값”] />
-
<c:out value=”value” [escapeXml=”(true|false)”]> 기본값 </c:out>
2.4.2 <c:catch> 태그
-
발생된 익셉션을 EL 변수에 저장할 때 사용되는 태그
-
<c:catch var =”exName”>
익셉션이 발생할 수 있는 코드
</c:catch>
${exName}사용
03 국제화 태그
-
<fmt:~~
-
특정 지역에 따라 알맞은 메시지를 출력해야 할 때 사용.
-
국제화 태그 라이브러리
기능분류 |
태그 |
설명 |
로케일 지정 |
setLocale |
Locale을 지정한다. |
requestEncoding |
요청 파라미터의 캐릭터 인코딩을 지정한다. |
|
메시지 처리 |
bundle |
사용할 번들을 지정한다. |
message |
지역에 알맞은 메시지를 출력한다. |
|
setBundle |
리소스 번들을 읽어와 특정 변수에 저장한다. |
|
숫자 및 날짜 포맷팅 |
formatNumber |
숫자를 포맷팅한다. |
formatDate |
Date 객체를 포맷팅한다. |
|
parseDate |
문자열로 표시된 날짜를 분석해서 Date 객체로 변환한다. |
|
parseNumber |
문자열로 표시된 날짜를 분석해서 숫자로 변환한다. |
|
setTimeZone |
시간대 정보를 특정 변수에 저장한다. |
|
timeZone |
시간대를 지정한다. |
3.4 숫자 및 날짜 포맷팅 처리 태그
3.4.1 <fmt:formatNumber> 태그
-
숫자를 양식에 맞춰 출력한다.
-
<fim:formatNumber value=”숫자값” [type=”값타입”] [pattern=”패턴”]
[currentCode=”통화코드”] [currencySymbol=”통화심볼”]
[groupingUsed=”(true|false)”] [var=”변수명”] [scope=”영역”] />
3.4.3 <fmt:formatDate> 태그
-
날짜 정보를 담고 있는 객체를 포맷팅하여 출력할 때 사용
-
<fmt:formatDate value=”날짜값”
[type=”타입] [dateStyle = “날짜 스타일”] [timeStyle=”시간 스타일”]
[pattern=”패턴”] [timeZone=”타임존”]
[var = “변수명”] [scope=”영역”] />
-
z a h:mm
-
zone a(오후,오전)
-
시가 대문자면 24시로 계산, 소문자면 12시간 기준으로 계산
JSTL이 생기고 값을 전달하기 위해 EL이 생겼다
chap13 이클립스를 이용한 웹 개발
chap14 데이터베이스 프로그래밍 기초
01 데이터베이스 기초
-
Database- 데이터를 저장했다가 필요할 때 사용하는 것, 데이터를 저장할 공간
-
DBMS(Database Management System) - 데이터베이스를 관리하는 시스템
-
오라클, MySQL, MSSQL
-
데이터의 추가/조회/변경/삭제
-
데이터의 무결성 유지
-
트랜잭션 관리
-
데이터의 백업 및 복원
-
데이터 보안
-
Relational DBMS - 관계형 데이터베이스, 웹 어플리케이션을 구축할 때 주로 사용하는 데이터베이스
-
오라클, MySQL, MSSQL
-
DBMS 클라이언트 - 데이터베이스를 사용하는 어플리케이션, MySQL 워크벤치 같은 거, 오라클 SQLPlus
1.2 테이블과 레코드
-
테이블 : 데이터를 저장하는 장소
-
스키마(Schema) : 테이블의 구조와 관련된 정보
02 데이터베이스 생성
-
root 계정으로 DB에 연결
-
데이터베이스 생성
-
create database chap14 default character set utf8;
-
사용자 추가
-
create user 'jspexam2'@'localhost' identified by 'jsppw';
-
권한 부여
-
grant all privileges on chap14.*to 'jspexam2'@'localhost';
-
all privileges : 모든 권한 부여
-
연결 추가 test Connection
03 SQL 기초
-
Structured Query Language의 약자
3.2 테이블 생성 쿼리
-
InnoDB : 엔진
-
사용하는 이유는 트랜잭션 때문, InnoDB엔진을 사용하지 않으면 트랜잭션이 올바르게 처리되지 않는다.
3.3 데이터 삽입 처리
-
값에 작은따옴표가 필요할 때는 ‘’두번 써라
5.4
JDBC 드라이버
5.4 DBMS와의 통신을 위한 JDBC 드라이버
-
JDBC 드라이버 클래스
-
MySQL : com.mysql.jdbc.Driver
-
오라클 : oracle.jdbc.driver.OracleDriver
-
MS SQL 서버 : com.microsoft.sqlserver.jdbc.SQLServerDriver
5.5 데이터베이스 식별을 위한 JDBC URL
-
jdbc:[DBMS] : [데이터베이스식별자]
-
mysql
-
jdbc:mysql://localhost:3306/chap14(데이터베이스 기본 스키마)
-
oracle
-
jdbc:oracle:thin:@localhost:1521:xe(orcl)
-
Thin / OCI 드라이버
-
Thin 드라이버
-
자바 언어로만 구현된 JDBC 드라이버 JDK만 설치되어 있으면 어디서든 사용가능
-
OCI 드라이버
-
네이티브(Native) 모듈을 사용하는 JDBC 드라이버로서 해당 모듈을 설치해주어야만 사용가능
5.7 Statement를 사용한 쿼리 실행
-
입력 form에서 input 태그의 name의 값이 파라미터 값이다.
5.9 ResultSet에서 LONG VARCHAR 타입 값 읽어오기
-
concat()
-
MY SQL에서 문자열을 연결할 때 사용.
-
URL 파라미터는 대소문자 구분
5.13 PreparedStatement 쿼리를 사용하는 이유
-
값 변환을 자동으로 하기 위해
-
간결한 코드를 위해
06 웹 어플리케이션 구동 시 JDBC 드라이버 구동하기
-
init()
-
서블릿이 초기화할 때 호출되는 메서드
-
서블릿 작성 후 web.xml에 <servlet>등록
-
<load-on-startup> 초기화 우선순위.
-
모든 서플릿이 1이면 먼저 작성한 순서대로
07 JDBC에서 트랜잭션 처리
-
트랜잭션은 시작과 종료를 갖고 있다.
-
트랜잭션이 시작되면 이후로 실행되는 쿼리 결과는 임시로 보관한다.
-
트랜잭션(TRANSACTION)을 커밋하면 임시 보관한 모든 쿼리 결과를 실제 데이터에 반영한다.
-
에러가 발생하면 롤백
-
트랜잭션을 구현하는 방법
-
JDBC의 오토 커밋 모드를 false로 지정하는 방법
-
Connection.setAutoCommit(false);
conn.commit();
conn.rollback(); //에러 발생시 catch 구문
-
JTA(Java Transaction API)를 이용하는 방법
-
두 개 이상의 데이터베이스를 트랜잭션으로 처리하려면 JTA를 이용해야 한다.
08 커넥션 풀
8.1 커넥션 풀이란
-
데이터베이스와 연결된 커넥션을 미리 만들어서 풀(pool) 속에 저장해 두고 있다가 필요할 때 커넥션을 풀에서 가져다 쓰고 다시 풀에 반환하는 기법.
-
풀 속에 미리 커넥션이 생성되어 있기 때문에 커넥션을 생성하는 데 드는 연결 시간을 줄 일 수 있다.
-
커넥션을 계속해서 재사용하기 때문에 생성되는 커넥션 수가 일정하게 유지된다.
-
여기서는 다양한 라이브러리 중에 오픈 소스 프로젝트인 DBCP API 이용
-
자카르타 프로젝트 DBCP2 API
8.2 DBCP를 이용해서 커넥션 풀 사용하기
-
자카르타 프로젝트 DBCP2 API
-
Commons DBCP API 관련 jar파일
-
Commons DBCP API가 사용하는 Commons Pool API의 jar파일
-
로그 기록에 사용하는 Commons Logging API 관련 jar파일
-
과정
-
실제 커넥션을 생성할 ConnectionFactory를 생성
-
커넥션 풀로 사용할 PoolableConnection을 생성하는 PoolableConnectionFactory를 생성한다.
-
커넥션 풀의 설정 정보를 생성한다.
-
커넥션 풀을 사용할 JDBC 드라이버를 등록한다.
-
서블릿 파일을 web.xml파일에 설정.
-
<servlet>
8.2.3 커넥션 풀 초기화 서블릿 설정
8.2.4 커넥션 풀로부터 커넥션 사용하기
-
JDBC URL
-
jdbc:apache:commons:dbcp:풀이름
chap15 웹 어플리케이션의 일반적인 구성 및 방명록 구현
01 웹 어플리케이션의 전형적인 구성 요소
1.1 웹 어플리케이션의 주요 구성 요소
-
Service 클래스
-
사용자의 요청을 처리하는 기능을 제공. 기능을 제공하기 위한 로직을 구현하며 DAO클래스를 이용해서 DB 연동을 처리한다. 가입 신청 처리, 글 목록 제공 등의 기능을 구현한다.
-
DAO 클래스
-
DB와 관련된 쿼리를 실행한다. Service 클래스들은 데이터를 DB에서 읽어 오거나 DB에 데이터를 저장할 때 DAO클래스를 사용한다.
-
Data Access Object 구현
-
일반적으로 한 개의 DB테이블마다 한 개의 DAO 클래스를 작성.
-
JSP(뷰)
-
Service 클래스가 실행한 결과를 화면에 출력하거나 Service가 기능을 수행하는 데 필요한 데이터를 전달한다.
-
MVC 프레임워크
-
사용자의 요청을 Service에 전달하고 Service의 실행 결과를 JSP와 같은 뷰에 전달한다. 스프링 MVC와 같은 프레임워크가 MVC 프레임워크에 해당한다.
1.2.1 DAO에서 Connection에 접근하는 방식
-
DAO 클래스의 메서드에서 직접 Connection을 생성
-
메서드를 실행할 때마다 매번 Connection을 생성한다.
-
두 메서드를 하나의 트랜잭션으로 처리할 수 없다.
-
트랜잭션은 한 개의 Connection객체에서만 유효하기 때문
-
DAO 객체를 생성할 때 생성자로 Connection을 전달받기
-
매번 새로운 DAO객체를 생성한다.
-
DAO 클래스의 메서드 파라미터로 Connection을 전달받기
-
메서드를 실행할 때마다 Connection 객체를 파라미터로 전달해야하므로 호출 코드가 다소 길어진다.
-
또한, 실수로 한 트랜잭션으로 실행해야할 메서드에 다른 Connection을 전달할 수도 있다.
1.3 서비스 클래스의 구현
-
게시글 목록 제공
-
게시글 쓰기
-
회원 등록
-
회원 정보 수정
1.3.1 서비스 클래스와 트랜잭션 처리
1.3.2 서비스 클래스의 익셉션 처리
1.4 싱글톤(Singeton) 패턴을 이용한 구성 요소 구현
-
싱글톤 패턴
-
특정 클래스의 객체가 단 한 개만 존재하도록 제약하는 구현 패턴
-
방식 과정
-
유일한 객체를 정적 필드에 저장
-
유일한 객체에 접근할 수 있는 정적 메서드 정의
-
getInstance();
-
생성자를 private으로 설정해서 외부에서 접근하지 못하게 한다.
02 방명록 구현
-
MY SQL limit 구문
-
지정한 행부터 지정한 개수만큼 행을 가져오는 기능
-
limit [시작행번호], [읽어올 행 개수]
-
[시작행번호]는 0부터 시작한다.
chap17 서블릿의 기초
01 서블릿의 기초
-
자바로 웹 어플리케이션을 개발할 수 있게 만들어진 것
-
개발과정
-
서블릿 규약에 따라 자바 코드를 작성한다
-
자바 코드를 컴파일해서 클래스 파일을 생성한다.
-
/WEB-INF/classes 폴더에 클래스 파일을 패키지에 알맞게 위치시킨다.
-
web.xml 파일에 클래슬 설정한다
-
톰캣 등의 컨테이너를 실행한다
-
웹 브라우저에서 확인한다
02 예제 프로젝트 생성
2.1 서블릿 구현
-
HttpServlet 클래스 상속
-
HTTP 방식(doGet,doPost)에 따라 메서드 재정의(오버라이딩)
-
응답 컨텐츠 타입 지정
-
response.setContentType(“text/html; charset=utf-8”);
-
jsp에서 page 디렉티브의 contentType 속성값과 동일
-
응답 결과 웹 브라우저에 전송
-
PrintWriter out = response.getWriter();
2.2 web.xml로 매핑하기
-
서블릿 등록하려면 두 가지를 설정
-
서블릿으로 사용할 클래스
-
<servlet-name>
<servlet-class>
-
서블릿과 URL 간의 매핑
-
<servlet-mapping>
<servlet-name>
<url-pattern>/now
2.3 어노테이션으로 매핑하기
-
@WebServlet(urlPatterns = “/hello”)
2.4 HTTP 각 방식별 구현 메서드
-
GET, POST, HEAD, PUT, DELETE
2.5 서블릿 로딩과 초기화
-
서블릿 컨테이너는 처음 서블릿을 실행할 때 서블릿 객체를 생성한다. 서블릿을 최초 요청할 때 서블릿 객체를 생성하고, 이후 요청이 오면 앞서 생성한 서블릿 객체를 그대로 사용한다.
-
서블릿 로딩 과정
-
웹 컨테이너가 서블릿 객체를 생성하고 init() 메서드를 호출하는 과정
-
초기화 작업은 상대적으로 시간이 오래 걸리기 때문에, 웹 컨테이너를 처음 구동하는 시점에 초기화를 진행하는 것이 좋다.,
-
<load-on-startup> 1 //작을 수록 먼저 로딩한다
-
웹 어플리케이션을 시작할 때 서블릿을 로딩한다.
-
@WebServlet 태그에서는
-
(loadOnStartup=1) 속성 이용
2.6 초기화 파라미터
-
서블릿에서 코드를 직접 변경하지 않고 사용할 값을 변경할 수 있는 방법을 제공하는 데, 그 방법은 초기화 파라미터를 사용하는 것.
-
web.xml의 <init-param> 태그 사용
-
<param-name> : 이름 지정
-
<param-value> : 초기화 파라미터의 값을 지정
-
getInitParameter(“이름”) 사용
-
@WebServlet 사용하는 경우
-
@WebServlet( initParams ={ @WebInitParam(name=”title”,value=”제목”)})
-
초기화 파라미터를 사용하는 사용하는 이유 중의 하나는 클래스의 수정 없이 초기화 과정에서 필요한 값을 수정할 수 있기 때문이다. 하지만, 소스 코드에 @WebInitParam 어노테이션을 이용해서 초기화 파라미터를 설정하면, 초기화 설정을 변경해야 할 때마다 자바 코드를 수정해야 하기 때문에 @WebInitParam 어노테이션은 변경의 유연함을 떨어뜨린다.
03 URL 패턴 매핑 규칙
-
서블릿 규약
-
‘/’로 시작하고 ‘/*’로 끝나는 url-pattern은 경로 매핑을 우해서 사용한다.
-
‘*.’로 시작하는 url-pattern은 확장자에 대한 매핑을 할 때 사용한다.
-
오직 ‘/’만 포함하는 경우 어플리케이션의 기본 서블릿으로 매핑한다.
-
이 규칙 외, 나머지 다른 문자열은 정확한 매핑을 위해서 사용한다.
chap18 MVC 패턴 구현
01 모델 2 구조와 MVC 패턴
1.1 모델 1 구조
-
웹 브라우저의 요청을 JSP가 직접 처리한다. 웹 브라우저의 요청을 받은 JSP는 자바빈이나 서비스 클래스를 사용해서 웹 브라우저가 요청한 작업을 처리하고 그 결과를 클라이언트에 출력한다.
1.2 모델 2 구조
-
웹 브라우저의 요청을 하나의 서블릿이 받는다. 서블릿은 웹 브라우저의 요청을 알맞게 처리한 후 그 결과를 보여줄 JSP페이지로 포워딩한다. 포워딩을 통해 요청 흐름을 받은 JSP 페이지는 결과 화면을 클라이언트에 전송한다. 이 과정에서 서블릿이 로직을 처리한다.
-
웹 브라우저의 모든 요청을 단일 진입점, 즉 하나의 서블릿에서 처리한다.
1.3 MVC 패턴
-
Model - View - Controller : 모델 - 뷰 - 컨트롤러
-
모델 : 비즈니스 영역의 로직을 처리한다.
-
뷰 : 비즈니스 영역에 대한 프리젠테이션 뷰(즉, 사용자가 보게 될 결과 화면)를 담당한다.
-
컨트롤러 : 사용자의 입력 처리와 흐름 제어를 담당한다.
-
MVC 패턴의 구조
-
MVC 패턴의 핵심
-
비즈니스 로직을 처리하는 모델과 결과 화면을 보여주는 뷰를 분리한다.
-
어플리케이션의 흐름 제어나 사용자의 처리 요청은 컨트롤러에 집중된다.
1.4 MVC 패턴과 모델2 구조의 매핑
-
컨트롤러 = 서블릿
-
요청받기
-
분석
-
처리요청 → 응답
-
view 지정 → view로 응답 처리
-
모델 = 로직 처리 클래스, 자바빈
-
뷰 = JSP
-
사용자 = 웹 브라우저 내지 휴대폰과 같은 다양한 기기
1.5 MVC의 컨트롤러 : 서블릿
-
과정1: 웹 브라우저가 전송한 HTTP 요청을 받는다. 서블릿의 doGet() 메서드나 doPost() 메서드가 호출된다.
-
과정2 : 웹 브라우저가 어떤 기능을 요청했는지 분석한다. 예를 들어, 게시판 목록을 요청 했는지, 글쓰기를 요청했는지 알아낸다.
-
과정3 : 모델을 사용하여 요청한 기능을 수행한다.
-
과정4 : 모델로부터 전달받은 결과물을 알맞게 가공한 후, request나 session의 setAttribute()를 사용하여 결과값을 속성에 저장한다. 이렇게 저장한 결과값은 뷰인 JSP에서 사용한다.
-
과정5: 웹 브라우저에 결과를 전송할 JSP를 선택한 후, 해당 JSP로 포워딩한다. 경우에 따라 리다이렉트를 하기도 한다.
1.6 MVC의 뷰 : JSP
-
뷰 역할을 하는 JSP는 웹 브라우저가 지속적으로 컨트롤러에 요청을 보낼 수 있는 링크나 폼을 제공해서 웹 브라우저가 업무 흐름에 따라 컨트롤러에 알맞은 요청을 보낼 수 있도록 한다.
1.7 MVC의 모델
-
비즈니스 로직을 처리
-
모델이 제공해야 하는 기능은 웹 브라우저의 요청을 처리하는 데 필요한 기능이다.
-
컨트롤러부터 요청을 받음
-
비즈니스 로직 수행
-
수행 결과 컨트롤러에 리턴
-
처리한 결과값을 저장하는 객체로 보통 자바빈을 사용
-
서비스 클래스나 DAO 클래스를 이용해서 비즈니스 로직을 수행
02 모델2 구조를 이용한 MVC패턴 구현
2.1 모델 2 구조의 구현 방법 : 기본 MVC 패턴 구현 기법
-
서블릿 클래스를 실행하려면 web.xml 파일에 요청 URL과 서블릿 간의 매핑을 입력해주어야한다.
-
<servlet>
<servlet-name>
<servlet-class>
-
<servlet-mapping>
<servlet-name>
<url-pattern>
2.2 커맨드 패턴 기반의 코드
-
웹 브라우저를 통해서 명령어를 전달하는 방법은 2가지
-
특정 이름의 파라미터에 명령어 정보를 전달한다
-
요청 URI 자체를 명령어로 사용한다.
2.2.1 커맨드 패턴을 이요한 명령어처리기의 분리
-
커맨드 패턴(Command)
-
각 명령어에 해당하는 로직 처리 코드를 별도 클래스로 작성하는 것.
-
하나의 명령어를 하나의 클래스에서 처리하도록 구현하는 패턴.
-
명령어와 관련된 비즈니스 로직 처리
-
뷰 페이지에서 사용할 정보 저장
-
뷰 페이지의 URI 리턴
2.4 요청 URI를 명령어로 사용하기
-
request.getRequestURI();
-
특정 확장자를 가진 요청을 컨트롤러 서블릿이 처리하도록 하려면 web.xml 파일에 <servlet-mapping> 정보를 추가해주어야 한다.
03 모델 1 구조와 모델2 구조의 선택
-
모델2 장점
-
로직 코드와 뷰 코드를 분리해서 유지보수가 쉬워진다.
-
컨트롤러 서블릿에서 권한 검사나 인증과 같은 공통 기능 처리가 가능하다
-
확장이 용이하다
-
모델2 단점
-
자바 언어에 친숙하지 않으면 접근하기가 쉽지 않다.
-
작업량이 많다.(커맨드 클래스 + 뷰 + JSP
chap 19 필터
01 필터란 무엇인가?
-
HTTP 요청과 응답을 변경할 수 있는 재사용 가능한 클래스
-
객체의 형태로 존재며 클라이언트에서 오는 요청과 최종 자원(JSP, 서블릿, 기타 자원) 사이에 위치하여 클라이언트의 요청 정보를 알맞게 변경할 수 있다.
-
최종 자원과 클라이언트로 가는 응답 사이에 위치하여 최종 자원의 요청 결과를 알맞게 변경할 수도 있다.
-
클라이언트와 자원 사이에 위치
-
정보 변경뿐만 아니라 흐름도 변경할 수 있다.
-
다른 자원의 결과를 클아이언트에 전송할 수도 있다.
-
사용자 인증이나 권한 검사와 같은 기능을 구현할 때 용이하게 사용
02 필터의 구현
-
3개의 타입
-
javax.servlet.Filter 인터페이스
-
클라이언트와 최종 자원 사이에 위치하는 필터를 나타내는 객체가 구현해야 하는 인터페이스
-
javax.servlet.ServletRequestWrapper 클래스
-
필터가 요청을 변경한 결과를 저장하는 래퍼
-
javax.servlet.ServletResponseWrapper 클래스
-
필터가 응답을 변경하기 위해 사용하는 래퍼
2.1 Filter 인터페이스
-
public void init(FilterConfig filterConfig) throws ServletException
-
필터를 초기화할 때 호출된다.
-
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws java.io.IOException, ServletException
-
필터 기능을 수행한다. chain을 이용해서 체인의 다음 필터로 처리를 전달할 수 있다.
-
request 파라미터를 이용하여 클라이언트의 요청을 필터링한다. 1단계에서는 RequsetWrapper 클래스를 사용하여 클라이언트의 요청을 필터링한다.
-
chain.doFilter() 메서드 호출한다. 2단계에서는 요청의 필터링 결과를 다음 필터에 전달한다.
-
response 파라미터를 사용하여 클라이언트로 가는 응답을 필터링한다. 3단계에서는 체인을 통해서 전달된 응답 데이터를 변경하여 그 결과를 클라이언트에 전송한다.
-
public void destroy()
-
필터가 웹 컨테이너에서 삭제될 때 호출된다.
-
filterConfig가 제공하는 메서드
메서드 |
리턴 타입 |
설명 |
getFilterName() |
String |
설정파일에서 <filter-name>에 지정한 필터의 이름을 리턴한다. |
getInitParameter(String name) |
String |
설정 파일의 <init-param>에서 지정한 초기화 파라미터의 값을 읽어온다. 존재하지 않는 경우 null을 리턴한다. |
getInitParameterNames() |
Enumeration<String> |
초기화 파라미터의 이름 목록을 구한다. |
getServletContext() |
ServletContext |
서블릿 컨텍스트 객체를 구한다. |
2.2 필터 설정하기 : web.xml 이용
-
<filter>
-
<filter-mapping>
-
<dispatcher>
-
필터가 적용되는 시점을 설정
-
REQUEST: 클라이언트의 요청인 경우 필터를 적용(기본값)
-
FORWARD : forward()를 통해서 제어 흐름을 이동하는 경우에 필터를 적용
-
INCLUDE : include()를 통해서 포함되는 경우에 필터를 적용
-
여러 개의 필터 매핑이 적용되는 경우 web.xml 파일에 표시한 순서대로 필터 적용
2.3 필터 설정하기 : @WebFilter 어노테이션 이용
-
@WebFilter(filterName = “xsltFilter”, urlPatterns = {“/xml/*”})
-
urlPatterns : 필터를 적용하라 URL 패턴 목록 지정
-
servletNames : 필터를 적용할 서블릿 이름 목록을 지정
-
filterName : 필터의 이름을 지정
-
initParams : 초기화 파라미터 목록을 지정
-
dispatcherTypes : 필터를 적용할 범위를 지정. 열거 타입인 DispatcherType에 정의된 값을 사용한다. 기본값은 DispatchType.REQUEST이다.
2.4 요청 및 응답 래퍼 클래스
-
필터가 필터로서의 제 기능을 하려면 클라이언트의 요청을 변경하고 클라이언트로 가는 응답을 변경할 수 있어야한다.
-
(Http)ServletRequestWrapper / (Http)ServletResponseWrapper
-
요청 정보를 변경하여 최종 자원인 서블릿/JSP/HTML/기타 지원에 전달한다.
-
최종 자원으로부터의 응답을 변경하여 새로운 응답 정보를 클라이언트에 보낸다.
-
이 구현한 래퍼 클래스의 객체를 FilterChain의 doFilter()메서드에 넘겨주면 된다.
03 필터의 응용
-
사용자 인증
-
캐싱 필터
-
자원 접근에 대한 로깅
-
응답 데이터 변환(HTML 변환, 응답 헤더 변환, 데이터 암호화 등)
-
공통 기능 실행
3.1 로그인 검사 필터
3.2 XSL/T 필터
-
XSL : XML의 표현 방식을 지정할 때 사용하는 언어
-
XSLT : XML문서를 다른 XML 문서로 변환하는 데 사용하는 XML 기반 언어.
3.3 캐릭터 인코딩 필터
-
setCharacterEncoding() 이용해서 요청 캐릭터 인코딩을 설정.
-
encoding 초기화 파라미터를 이용해서 사용할 인코딩을 지정하고, 필터 매핑을 통해서 어떤 URL 패턴에 필터를 적용할지 지정.
-
<filter>
<filter-name>
<filter-class>
<init-param>
<param-name>
<param-value>
-
<filter-mapping>
<filter-name>
<url-pattern>
chap 20 ServletContextListener 구현
01 ServletContextListener를 이용한 이벤트 처리
-
javax.servlet.ServletContextListener 인터페이스를 구현한 클래스를 작성
-
web.xml 파일에 1번에서 작성한 클래스를 등록
-
<listener>
<listener-class>