Chapter.07 - JSP가 되어보자
JSP가 서블릿되기
JSP 요소들
내장 객체들
API _____ 내장객체
JspWriter _____ out
HttpServletRequest _____ request
HttpServletResponse _____ response
HttpSession _____ session
ServletContext _____ application
ServletConfig _____ config
JspException _____ exception
PageContext _____ pageContext
Object _____ page
** JspWriter와 PrinterWriter는 커스템 개발에서 기능상 차이가 있음.
설명들
MyJSP.jsp -> MyJSP_jsp.java -> MyJSP_jsp.class -> MyJSP_jsp Servlet
<% %> : 스크립틀릿 (scriptlet), 자바코드를 작성할 수 있다.
지시자 : 컨테이너가 페이지를 자바 코드로 변환할 때 특별한 지시를 내릴 수 있도록 고안됨.
tomcat 환경의 JSP에서 생성된 servlet 코드 위치
$jsp_src_loc : jsp source location path 위치 변수
$tomcat_home : 톰캣 설치 홈
$eclipse_dev_plugin_home : 이클립스 개발 플러그인 홈
$serv_name : 서버명 , $webapp_name : web 어플리케이션 명
$jsp_src_loc = work/Catalina/$serv_name/$webapp_name/org/apache/jsp
원래 환경 : $tomcat_home/$jsp_src_loc
eclipse 개발 환경 : $eclipse_dev_plugin_home/$jsp_src_loc
$eclipse_dev_plugin_home = $workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp1
page Directive(지시자) : 패키지를 import 할 때 사용됨.
예1) 패키지 하나만 import할 경우 <%@ page import=”java.util.*” %>
예2) 여러 패키지를 import를 할 경우 : <%@ page import=”java.util.*,java.io.*” %>
혹은 <%@ page import=”java.util.*” %>
<%@ page import=”java.io.*” %>
Directive (지시자들) : <%@ ~ 으로 시작함.
page : 페이지 환경을 정의 함. 하위 속성으로 13개 존재함.
예) 문자 인코딩, 응답 컨덴츠 타입 등
taglib : JSP에서 이용 가능한 태크 라이브러리를 지정함.
include : 변환 시점에 현재 페이지에 포함할 코드난 문서를 정의
표현식 (JSP Expression) : out.println()를 대처 하기 위해서 사용된다.
<%= %> , 세미 콜론은 사용되지 않는다. out.print 구문에 들어가기 때문에
<%= Counter.getCount() %> --> out.print(Counter.getCount()); 변환됨.
절대 표현식에 세미 콜론을 넣지 않는다.
void를 리턴하는 메소드는 사용할 수 없음.
JSP 선언문 : 서비스 메소드나 여타 메소드의 바깥 쪽에 위치하게 함.
주석 : <%-- JSP Comment --%> , 자바소스 코드 주석으로 변경됨.
생성된 서블릿의 API
변환과 컴파일은 단한번만 이루어짐.
** 미리 컴파일하는 방법도 있음 : ?jsp_precompile=true|false , 컨테이너 마다 틀림 ,JSP 2.0에서 제시됨.
JSP 초기화
초기화 파라미터 설정
<servlet>
<servlet-name>MyTestInit</servlet-name>
<jsp-file>/TestInit.jsp</jsp-file>
<init-param>
<param-name>email</param-name>
<param-value>cosmoslight.huni@gmail.com</param-value>
</init-param>
</servlet>
|
jspInit() 재정의하기
<%!
public void jspInit(){
ServletConfig sConfig = getServletConfig();
------------------------------------------
나중에 서블릿으로 변경될것을 미리 하고 getServletConfig()를 호출할 수 있음.
String email = sConfig.getInitParameter(“email”);
ServletContext ctx = getServletContext();
ctx.setAttribute(“mail”,email);
-------------------------------
application 생존 범위로 설정 한다.
}
%>
|
JSP내에 있는 속성들..
범위
|
Servlet에서
|
JSP에서 (내장객체를 사용)
|
Application
|
getServletContext().setAttribute(“foo”,barObj);
|
application.setAttribute(“foo”,barObj);
|
Request
|
request.setAttribute(“foo”,barObj);
|
request.setAttribute(“foo”,barObj);
|
Session
|
request.getSession().setAttribute(“foo”,barObj);
|
session.setAttribute(“foo”,barObj);
|
Page
|
제공하지 않음.
|
pageContext.setAttribute(“foo”,barObj);
|
PageContext클래스 로 할 수 있는 일들
속성 접근 (변경 및 설정)
내장 객체 얻기
속성 변경 예제
page 생존 범위 설정 : <% pageContext.setAttribute(“foo”,new Float(3.141592)); %>
page 생존 범위 읽기 : <%= pageContext.getAttribute(“foo”) %>
session 생존 범위 설정 :
<% pageContext.setAttribute(“foo”,fooObj,PageContext.SESSION_SCOPE); %>
session 생존 범위 읽기 :
<%= pageContext.getAttribute(“foo”,PageContext.SESSION_SCOPE) %>
<%= session.getAttribute(“foo”) %> 와 동일
application 생존 범위 읽기 :
<%= pageContext.getAttribute(“foo”,PageContext.APPLICATION_SCOPE) %>
<%= application.getAttribute(“foo”) %> 와 동일
어떤 생존 범위인지 모르는 속성 찾기 : <%= pageContext.findAttribute(“foo”)%>
찾는 순서는 page 부터 가장 작은 범위로 부터 큰 범위로 즉 page > request > session > application
page 지시자 속성
import : 생성된 서블릿 클래스에 추가될 자바 import문을 정의
기본값
javax.servlet
javax.servlet.http
javax.servlet.jsp
isThreadSafe : 생성된 서블릿 클래스가 SingleThreadModel을 구현 할지 결정함. 기존값 true
contentType : MIME 타입과 문자 인코딩을 설정. 기본값은 ?
isELIgnored : EL 표현식을 무시할 것인지 결정, 기본값은 false
isErrorPage : 현재 페이지가 JSP 오류 처리용 페이지인지를 정의 합니다. 기본값은 false
만약 true 이면 내장 예외사항 객체(Throwable)를 사용할 수 있음.
errorPage : 이 페이지에서 잡지 못한 예외사항을 보낼 오류 페이지 URL를 정의. URL로 정의된 페이지는 바로 위의 속성 true 이어야 함(isErrorPage)
language : scriplet,표현식, 선언문에 사용할 스크립팅 언어를 정의. 현재 java 유일
extends : JSP가 상속할 부모 클래스를 정의함.
session : 내장 session 객체를 가질지 여부를 결정. 기본값 true
buffer ; 내장 out 객체(JspWriter) 버퍼링을 어떻게 관리할지 결정
autoFlush : 자동적으로 버퍼링된 출력을 비울 것인지(flush)를 결정 합니다. 기본값 true
info : 변환될 페이지에 포함할 String 값을 기술 합니다. 이 값을 나중에 getServletInfo() 메소드로 접근할 수 있음.
pageEncoding : JSP 문자 인코딩을 합니다. 기본값으 “ISO-8859-1” (contentType이나 XML 문서문법에서 정의 하지 않은 경우에만 기본값이 적용됨.)
스크립틀릿은 협업 개발시 비프로그램머가 보기 아주 어렵다.
EL :
정의 : 표현식 언어(Expression Language) , JSP 2.0 이후 부터 공식적으로 지원
형식 : ${....}
JSP에서 스크립팅항목을 사용하지 못하게 하는 방법 : <scripting-invalid>
EL을 무시하도록 만들기 (EL은 기본적으로 가능 상태) : <el-ignored> 나 <%@ page isELIgnored 속성
페이지 지시자가 DD 보다 우선 순위를 가짐.
<web-app ...>
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<scripting-invalid>true</scripting-invalid>
<el-ignored>true</el-ignored>
</jsp-config>
</web-app>
** <%@ page isScriptingEnabled=”false” %> JSP 2.0 초안 존재하다가 최종 스펙에서 삭제됨.
|
EL 기능 설정 문제
DD의 설정
el-ignored
|
page 설정
isELIgnored
|
EL 기능함
|
EL 무시됨
|
명시되지 않음
|
명시되지 않음
|
V
|
|
false
|
명시되지 않음
|
V
|
|
true
|
명시되지 않음
|
|
V
|
false
|
명시되지 않음
|
V
|
|
false
|
true
|
|
V
|
true
|
false
|
V
|
|
스크립팅 가능 여부
DD설정
scripting-invalid
|
스크립팅
기능함
|
스크립팅
무시됨
|
명시되지 않음
|
V
|
|
true
|
|
V
|
false
|
V
|
|