**jsp태그 -> xml태그로 표현이 가능하다!**
1.jsp지시자(directive) 태그 (124p) <%@ xxx xxx="xxx" %> , <jsp:directive.page xxx="xxx"/>
(1)page 지시자란? <%@ page %>
info
laguage language="java"
contentType contentType= "text/xml" or "text/html; charset=ISO-8859-1"
pageEndcoding pageEncoding= "UTF-8"
extends jsp->컴파일->서블릿 클래스가 상속받을 슈퍼클래스 (디폴드로 사용할것. 컨테이너가 알아서 선택해줌)
import import="java.net.URL"
session session="true" (세션 관리에 참여할 페이지여야 추후 내부객체를 통해 세션 정보 다룰수 있음)
buffer buffer="12kb" (디폴트 8kb면 충분)
autoFulsh autoFlush="true" (버퍼 차면 알아서 flush, 주의할 것은 일단 쏘면.. 더이상 처리,수정,조작 불가능..
페이지가 생성하는 출력 양이 예측 어려우면 true로 하돼, 가급적 여러 작업들을 처리할 경우 false)
isThreadSafe isThreadSafe="true" (가급적 true로 할것, db등 리소스 접근시에 특별한 처리 db커넥션 풀의 활용이
필요함)
errorPage errorPage="/park/error.jsp"
isErroePage errorPage="true"
(2)include 지시자란? <%@ include %> , <jsp:directive.include xxx="xxx" />
주어진 파일(경로+파일명)을 페이지에 include 시킨다. (c,c++ 인클루드와 동일)
<%@ include file="includes/park01.jsp" %>
(3)taglib 지시자란? <%@ taglib uri = "tagLibraryURI" prefix="tagPrefix" %> <jsp:directive.taglib uri="xx" prefix="xx" />
다른 라이브러리 사용한다고 컴파일러에게 선언 (뒤에 prefix는 접두어-네임스페이스 역할)
url 이 아닌, 로컬의 uri인 이유는? = 보안 문제(세상에 믿을놈 없음..서버가 외부 데이터를 믿으면 안됌)
2.스크립트 태그(scripting elements)
(1)선언문 : 주어진 jsp페이지에서 사용할 변수와 메소드를 정의 <%! xxx %> , <jsp:declaration> xxx </jsp:declaration>
(메소드 정의시 중괄호 조심)
jsp초기화 메서드 jspInit() , 소멸 메소드 jspDestroy()란 이름으로 제공함으로 구현해서 사용~
(2)표현식: 값을 받아서 출력하는 용도 <%= 표현식 %> , <jsp:expression> 표현식 </jsp:expression>
(숫자,문자,불린,스트링,자바객체 타입 사용가능.. 단 모든 표현식은 출력전에 문자열로 변환됨 toString() )
(3)스클립틀릿: 자바 코드임 (변수,메서드,논리조건,반복조건,"예외처리")
<% 스클립틀릿 %> , <jsp:scriptlet> 스클립틀릿 </jsp:scriptlet>
{} 중괄호 블럭은 자바와 마찬가지로 지역 scope를 의미.
=> 스클립틀릿,표현식,정적컨텐츠,자바빈은 출력을 위해 사용된다. jsp->서블릿으로 컴파일 된후 서블릿의 _jspService()
메소드를 구축한다. 표현식은 컴파일 되는데 비해, 스클립틀릿,자바빈은 컴파일(파싱) 없이 바로 사용됨
아참 html은 브라우저에 바로 출력되기 위한 스크립트이고..
=> 스클립트 내에 정의하는 메서드에 throws 키워드를 선언후 콜러측이 try,catch 처리하게 하는등 .. 자바의 예외처리
프로세스 동일하게 사용가능.
=>단지 스클립틀릿을 jsp에 사용하면 코드의 유지및 웹디자이너와 업무 분담이 곤란해짐. 그럼으로 각종 태그를 사용
3..주석문 <!-- 컨텐츠주석으로 브라우저의 html보기를 통해 보여짐 --> <%-- jsp주석문 --%> <% /*편하다*/ %>
4-1 내부 표준 객체 액션 (jsp가 디폴트로 제공하는 내부객체를 통한 표준액션)
=>기능상 jsp페이지 서블릿에 관계된 객체, 페이지 입출력에 관계된 객체, jsp페이지가 처리되는 동안 외부 환경 정보를 제공
하는 객체, 에러 때문에 생긴 객체로 나뉜다.
그중 request, session, application, pageContext 객체는 속성(attribute=String key, Object value)를 읽고 쓸수 있다.
*********서블릿 관련 내부 객체************
(1)page:페이지의 서블릿 인스턴스 (javax.servlet.jsp.HttpJspPage)
<%@ page info="xxx" %>
Page info: <%= ((javax.servlet.jsp.HttpJspPage)page).getServletInfo() %>
(2)config:서블릿 구성데이터 (javax.servlet.ServletCofig)
<%! static private DbConnectionPool pool = null;
pulbic void jspInit()
{
if(pool == null)
{
String username = config.getInitParameter("username");
String password = config.getInitParameter("password");
pool = DbConnectionPool.getPool(this, username, password);
}
}
%>
********입/출력용 객체**********
(3)request:요청데이터 (java.servlet.http.HttpServletRequest)
=>현재의 페이지 처리를 시작하게한 요청 정보를 가지고 있는 객체로 요청url,헤더,쿠키,그외 매개변수를 얻을수 있다.
=>요청 매개변수를 액세스하기 위한 메서드, 요청 헤더,쿠키를 읽기위한 메서드,url등을 읽기위한 메서드가 있다.
(4)response:응답데이터 (java.servlet.http.HttpServletResponse)
=>회신용 컨텐츠의 타입(ContentType,Encoding)을 설정하는 메서드, 헤더를 세팅하기 위한 메서드, 응답 상태코드를
설정하기 위한 메서드, utl 다시 쓰기를 위한 메서드가 있다.
(5)out:페이지 컨텐츠 출력용 스트림 (javax.servlet.jsp.JspWriter)
=>스클립틀릿을 통해 출력을 담당하며 (isAutoFlush(), getBufferSize(), getRemaining(), clearBuffer(), newLine(),
clear(), flush(), close() 등의 java의 printwriter(내부적으로 버퍼 필터계열사용) 객체처럼 쓸수 있음)
<P>counting eggs
<% int count = 0;
while(cartoon.hasNext())
{
count++;
out.print("."); <-- 바로 웹브라우저에 표시가 된다.(정적컨텐츠,jsp표현식 필요없이도)
}
%>
<BR>
There are <%= count %> eggs.
</P>
*************컨텍스트 객체*************
(6)session:여러페이지에 대한 사용자 각각의 세션 정보(javax.servlet.http.HttpSession)
=>세션 유지및 관리를 위해 필요한 정보를 세팅할 수 있는 메서드 제공
(7)application:프로그램자체(jsp묶음)로 모든 페이지가 공유하는 데이터(javax.servlet.ServletContext)
=>application.setAttribute("xxx", xxx); 를 통해 jsp페이지들이 데이터를 공유가 가능 (ex: 디비연결pool 객체)
=> getSeverInfo() : 서블릿 컨테이너의 이름과 버전
...
getMimeType(filename) : 지정된 파일의 mime 타입 반환 (text/html등)
getResource(path): 매개변수 url패스의 컨텐트(네트워크,로컬)를 엑세스하느 객체 반환
getResourceAsStream(path): url패스의 컨텐트를 읽어 올수 있는 입력 스트림 객체 반환
getContext(path): url패스에 대한 애플리케이션의 외부 환경 정보를 반환
getRequestDispatch(path): url패스에 대한 요청 전달자(dispatcher) 반환
...
log(message) : 로그 기록용
log(message, exception): 로그 기록 + 스택 결과(printStackTrace())
(8)pageContext:jsp페이지가 실행되는 시점에서 외부 환경 데이터 (javax.servlet.jsp.PageContext)
=>모든 jsp 내부객체의 속성을 얻을수 있는 메소드 + 현재 페이지에서 다른 페이지로 흐름 제어를 넘길수 있음.
(jsp 커스텀 태그를 구현할때 사용됨)
=>getPage() : 현재 페이지에 대한 서블릿 인스턴스(page내부객체) 반환
getRequest() : 현재 페이지의 요청 객체 반환
getResponse() : 현재 페이지의 응답 객체 반환
getOut() : 현재 페이지의 출력 스트림 객체 반환
getSession() : 현재 페이지를 요청한 세션 객체 반환
getServletConfig() : 서블릿 구성 객체(config내부객체) 반환
getServletContext() : 현 페이지의 서블릿이 실행되는 외부 환경(context=매니저 객체) 즉 application 객체를 반환
getException() : 에러 페이지가 있을 때 이 페이지에 넘겨지는 예외(exception 내부객체) 반환
forward(path) : 요청 처리를 다른 로컬 url로 전달
include(path) : 다른 로컬 url을 처리한 결과를 이 페이지에 포함
setAttribute(key, value, scope) : 특정 스코프(page등) 정보 기록
...
getAttributeNamesInScope(scope) : 특정 스코프에 있는 모든 속성의 이름을 뽑아냄
getAttribute(key, scope) : 특정 스코프에 있는 key값에 해당하는 value 반환
...
PageContext.SESSION_SCOPE, PageContext.APPLICATION_SCOPE, PageContext.REQUEST_SCOPE, ...
=>어플리 케이션 스코프가 가장 수명이 길고, 그 담이 세션이다. 페이지,요청 스코프는 한번에 스레드 하나만 접근가능
하지만, 어플레 케이션&세션 스코프는 그렇지 않기에 멀티스레딩 처리를 해야한다.
***********예외처리객체*************
(9)exception:처리되지 않은 에러나 예외 (java.lang.Throwable)
=>page 지시자(directive)에서 예외를 사용하겠다고 설정해야 사용이 가능한 내부 객체
=> getMessage()
printStackTrace(output)
toString()
<%@ page isErrorPage="true" %>
<H1>경고 </H1>
오류 발견~:<BR>
<B><%= exception %></B><BR>
<% exception.printStackTrace(new java.io.PrintWriter(out)); %>
4.2 jsp액션
=>페이지 사이를 전환하기 위해, 자바 애플릿의 설정, 자바진즈 컴포넌트를 사용할때 사용된다.
모든 커스텀 태그는 jsp 액션의 형태를 뜨며, 액션의 경우 xml 문법만을 지원한다.
(1)forward 액션 태그 <jsp:forward page="localURL" /> (정적문서,cgi,서블릿,jsp로 제어권 넘김)
=>일반적으로 조건 분기 코드에서 자주 쓰인다.
<% if(!database.isAvailable()) { %>
<% 서버 유지 보수중이라 아웃 객체를 사용해 알리고 %>
<jsp:forward page="db유지보수중.html" /> <--제어권 넘기고
<% } %>
<%-- 데이터베이스가 제대로 작동중 ~~ --%>
=>제어권을 넘길때 기존 페이지의 출력 버퍼에 쌓인 내용들 모두 flush되고 close 된다.
a.그럼으로 <jsp:forward> 액션 사용전에 출력 버퍼가 비워지지 않게 한다.
b.버퍼 출력이 안되는 페이지의 경우 <jsp:forward> 액션을 컨텐트 출력 부분 앞에 둘것!
=>요청 시점 속성값 (request-time attriute value)을 지원한다.
<jsp:forward page= '<%= "message" + statusCode + " .html" %> ' />
=>status값이 404이면 message404.html 이란 로컬 url로 제어가 넘어감
=>제어가 넘어간 페이지는 pageContext가 새롭게 생성, request,session객체는 동일하게 유지, application도 옮긴 페이
지가 같은 어플리케이션 이라면 유지됨. (일반적으로 페이지 전환시 요청,세션 객체에 정보를 기록)
<jsp:forward page="로컬url">
<jsp:param name="매개변수명1" value="매개변수값1" />
<jsp:param name="매개변수명2" value="매개변수값2" />
<jsp:param name="매개변수명3" value="매개변수값3" />
...
</jsp:forward>
(2)include 액셔 태그: 제어권을 다른 페이지에 임시로 주는것.
=> 지시자 include에 비해 a.자동 재컴파일 b.작은 클래스 크기(여러 페이지에 코드 삽입x) c.매개변수 추가 기능
d.요청 시점 속성값을 통한 더욱 유연한 제어 가능
지시자 include의 경운 a.지역변수의 공유 b.조금 더 나은 실행시간 효율(제어권 이동x) c.출력 버퍼링에 제약x
=> 지시자(directive)를 통해 include 된 페이지: 원래의 페이지와 한몸
액션 태그를 통해 include 된 페이지: 원래의 페이지의 바깥에서 요청을 넘겨받아, 그 처리결과를 원래의 페이지에 리턴
(정적컨텐츠인 html, jsp 페이지, 서블릿, cgi 스크립트등 가른 형식의 파일까지 간접 인클루드 가능함)
<jsp:include page="로컬url" flush="true">
<jsp:param name="매개변수이름1" value="매개변수값1" />
<jsp:param name="매개변수이름2" value="매개변수값2" />
<jsp:param name="매개변수이름3" value="매개변수값3" />
</jsp:include>
(3)plug-in 액션 태그: <jsp:plugin> 액션은 자바 애플릿을 설정할수 있는 브라우저별 html 생성하는데 사용
(4)빈(bean) 관련 태그: 서버측 자바빈의 액션은 <jsp:useBean>, <jsp:setProperty>, <jsp:getProperty>가 존재하며
빈(컴포넌트)을 이용한 컴포넌트 중심의 설계는 프리젠테이션과 애플레케이션 로직을 나누어준다.
RECENT COMMENT