Chap 03. JSP 로 시작하는 웹 프로그래밍
* JSP 페이지 구성 요소
디렉티브 ( Directive )
스크립트 : 스크립트릿( Scriptlet ), 표현식( Expression ), 선언부( Declaration )
표현 언어( Expression Language )
기본 객체 ( Implicit Object )
정적인 데이터
표준 액션 태그( Action Tag )
커스텀 태그( Custom Tag ) 와 표준 태그 라이브러리 ( JSTL )
-
디렉티브
page
JSP 페이지 정보 지정
문서 타입, 출력 버퍼 크기, 에러 페이지 등 입력
taglib
태그 라이브러리 지정
include
특정 영역에 다른 문서를 포함
-
스크립트 요소
표현식( Expression ) : 값 출력
스크립트릿( Scriptlet ) : 자바 코드 실행
선언부 ( Declaration ) : 자바 메서드(함수)를 만든다.
-
기본 객체( Implicit Object )
request
response
session
application
page
...
-
표현 언어( Expression Language; EL )
JSP 페이지 내부에서 사용되는 간단한 스크립트 언어
-
표준 액션 태그와 태그 라이브러리
액션 태그는 <jsp:include> 와 같은 형태를 취한다.
커스텀 태그는 태그 형태로 JSP 기능을 확장시킨다.
커스텀 태그 중에서 자주 사용되는 것들을 별도로 표준화한 태그 라이브러리가 JSTL ( JSP Standard Tag Library ) 이다.
* page 디렉티브
contentType : JSP 가 생성할 문서의 타입 지정 ( 기본 : text/html )
import : JSP 페이지에서 사용할 자바 클래스 지정
session : 세션 사용 여부 지정, true, false 값 ( 기본 : true )
buffer : 출력 버퍼 크기를 지정한다. none 의 경우 사용하지 않고, 8kb 와 같은 특정 값을 지정할 수 있다.
autoFlush : 출력 버퍼가 다 찼을 경우 자동으로 버퍼에 있는 데이터를 출력 스트림에 보내고 비울지 여부를 나타낸다. true, false 값을 갖는다. ( 기본 : true )
info : JSP 페이지에 대한 설명을 입력한다.
errorPage : 에러가 발생할 때 보여줄 페이지를 지정한다.
isErrorPage : 에러 페이지인지 여부를 지정한다. true, false 값을 갖는다. ( 기본값 false )
pageEncoding : 캐릭터 인코딩 지정
isELIgnored : 표현언어 지원여부를 지정한다. true, false 값을 갖는다. ( 기본값 : false )
deferredSyntaxAllowedAsLiteral : #{} 을 통해 문자가 문자열 값으로 사용되는 것 허용여부를 지정한다. true, false 값을 갖는다. ( 기본값 : false )
trimDirectiveWhitespaces : 출력 결과에서 템플릿 텍스트의 공백 문자 제거여부를 지정한다. true, false 값을 갖는다. ( 기본값 : false )
-
contentType 속성과 캐릭터 셋
<%@ page contentType="text/html; charset=euc-kr" %>
contentType 은 text/html, text/xml, text/plain, text/json 등이 온다.
charset 은 ISO-8859-1 이 기본값으로, 대소문자 구분 없이 euc-kr 등을 입력하여 사용 가능하다.
-
import 속성
<%@ page import="java.util.Calendar, java.util.Date" %>
or
<%@ page import="java.util.Calendar" %>
<%@ page import="java.util.Date" %>
-
trimDirectiveWhitespaces 속성을 이용한 공백처리
<%@ page trimDirectiveWhitespaces="true" %>
-
JSP 페이지의 인코딩과 pageEncoding 속성
웹 컨테이너가 JSP 페이지를 읽어올 때 사용할 캐릭터 셋 결정 과정
1. 기본 인코딩을 이용해서 파일을 처음부터 읽으며, page 디렉티브의 pageEncoding 속성을 검색한다.
2. pageEncoding 속성이 값을 갖고 있다면, 속성의 값을 파일을 읽어올 때 사용할 캐릭터 셋으로 사용한다.
3. pageEncoding 속성이 없다면, contentType 속성을 검색한다. contentType 속성이 존재하고 charset 을 이용해서 캐릭터 셋을 지정했다면, 파일을 읽어올 때 사용할 캐릭터 셋으로 charset 에 지정한 값을 사용한다.
4. 모두 해당되지 않을 경우 ISO-8859-1 을 캐릭터 셋으로 사용한다.
즉, 우선순위가 pageEncoding > contentType charset > 기본값 ISO-8859-1
JSP 페이지를 읽을 때와 response encoding 값을 다르게 하고 싶다면, 아래와 같이 하면 된다.
<%@ page contentType="text/html; charset=utf-8" %>
<%@ page pageEncoding="euc-kr" %>
page loading 은 euc-kr 로 진행되고, response 값은 utf-8 로 encoding 된다.
* 스크립트 요소
-
스크립트릿 ( Scriptlet )
JSP 페이지에서 자바 코드를 실행할 때 사용되는 코드 블록이다.
<% 자바코드 %> 과 같이 사용한다.
-
표현식 ( Expression )
JSP 안에 어떤 값을 출력결과에 포함시키고자 할 때 사용한다.
<%= 변수 혹은 값 %> 과 같이 사용한다.
-
선언부 ( Declaration )
스크립트릿이나 표현식에서 사용할 수 있는 함수를 작성할 때 사용한다.
<%! 함수정의 %> 와 같이 사용한다.
일반적인 웹 어플리케이션에서는 선언부는 거의 사용하지 않는다. Class 로 정의해서 사용한다.
* reuqest 기본 객체
request 객체가 제공하는 기능은 다음과 같다.
- 클라이언트( 웹브라우저 ) 와 관련된 정보.
- 서버와 관련된 정보.
- 클라이언트가 전송한 요청 파라미터.
- 클라이언트가 전송항 헤더.
- 클라이언트가 전송한 쿠키.
- 속성 처리
-
클라이언트 정보 및 서버 정보 읽기.
String getRemoteAddr() : 클라이언트 IP 주소
long getContentLength()
String getCharacterEncoding()
String getContentType()
String getProtocol()
String getMethod()
String getRequestURI()
String getContexttPath() : JSP 페이지가 속한 웹 어플리케이션 경로
String getServerName()
int getServerPort()
ex)
http://localhost:8080/test/requestTest.jsp
getServerName() -> localhost
getServerPort() -> 8080
getContentPath() -> test
getRequestURI() -> test/requestTest.jsp
-
HTML 폼과 요청 파라미터의 처리
String getParameter( String name )
String[] getParamterValues( String name )
Enumeration getParameterNames()
Map getParameterMap()
cf) input type="checkbox", input type="radio" 의 경우 값이 없으면 파라미터 자체가 전송되지 않는다.
input type="text" 의 경우는 입력하지 않아도 빈 문자열( "" ) 이 전송된다.
-
POST 방식 파라미터의 decoding.
요청 파라미터와 같은 encoding 으로 decoding 을 해야하는데 이는 다음 코드를 통해 가능하며 POST 방식에만 유효하다.
GET 의 경우는 무조건 기본 charset 인 ISO-8859-1 로 decoding 한다.
request.setCharacterEncoding( "euc-kr" );
이 함수 호출은 request.getParameter 등과 같은 query method 호출 이전에 미리 실행되어야 한다.
그렇지 않으면 기본 charset 인 ISO-8859-1 로 decoding 시킨다.
a 태그 링크, form 을 통한 전송 등은 page encoding 을 따른다.
하지만 브라우저 주소창에 직접 URL 을 입력하는 경우는 브라우저마다 encoding 방법이 다르다.
-
GET 방식 파라미터의 decoding.
1. server.xml 파일에서 <Connector> 의 useBodyEncodingForURI 속성 값을 true 로 지정
2. server.xml 파일에서 <Connector> 의 URIEncoding 속성 값으로 원하는 캐릭터 셋을 지정
<Connnector port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
useBodyEncodingForURI="true"
URIEncoding="utf-8"
/>
1. 의 방법으로 useBodyEncodingForURI 속성을 true 로 주면, reqeust.setCharsetEncoding 으로 지정한 캐릭터 셋이 GET 으로 요청한 경우에도 적용된다.
2. 의 방법으로 URIEncoding 값을 줄 경우 request.setCharsetEncoding 값은 무시되며 여기서 적용한 값이 적용된다.
두 값을 동시에 사용한 경우는 request.setCharacterEncoding() 을 사용해서 캐릭터 셋을 지정해주어야 제대로 작동한다.
-
요청 헤더 정보의 처리
String getHeader( String name )
Enumeration getHeaders( String name )
Enumeration getHeaderNames()
int getIntHeader( String name )
long getDateHeader( String name )
* response 기본 객체
다음 기능을 제공한다.
- 헤더 정보 입력
- 리다이렉트하기
- 잘 사용되지 않는 나머지 기능들
-
웹 브라우저에 헤더 정보 전송하기.
addDateHeader( String name, long date)
addHeader( String name, String value )
addIntHeader( String name, int value )
setDateHeader( String name, long date)
setHeader( String name, String value )
setIntHeader( String name, int value )
boolean containsHeader( String name )
-
웹 브라우저 캐시 제어를 위한 응답 헤더 입력
새로운 내용이 DB 에 추가되었는데도 불구하고 웹 브라우저에 출력되는 내용이 바뀌지 않는 경우가 있다.
웹 브라우저가 캐시 데이터를 출력하기 떄문이다.
웹 브라우저가 캐시를 사용하지 않게 하기 위해서는 아래와 같이 cache 관련된 header 정보를 추가해야 한다.
response.setHeader( "Pragma", "No-cache" ); // 1.0 버전을 위해서
response.setHeader( "Cache-Control", "no-cache" );
response.addHeader( "Cache-Control", "no-store" );
response.setDateHeader( "Expires", 1L );
* 리다이렉트를 이용해서 페이지 이동하기.
response.sendRedirect( String location )
리다이렉트는 최초 요청받은 페이지가 알아서 sendRedirect 로 지정한 위치의 페이지를 보여주는 것이 아니고, 브라우저한테 redirect 하는 위치로 다시 요청해서 값을 가져가라고 명령하는 형태이다.
'프로그래밍 놀이터 > Web' 카테고리의 다른 글
Chap 06. 기본 객체와 영역 (0) | 2015.01.06 |
---|---|
Chap 05. 필수 이해 요소 (0) | 2015.01.04 |
Chap 02. 웹 프로그램 시작하기. (2) | 2015.01.01 |
[sql] How can I return rows with a specific value first? (0) | 2014.05.02 |
css3 box-sizing property. (0) | 2014.04.09 |
댓글