JSP 요청 -> 해당 페이지의 서블릿이 잇냐? -n> 메모리에 로드됫냐? -n> 메모리로드 -> 응답생성
=======================
1.선언부 : 선언하고자 할때
<%!
// 변수 , 메소드 %>
2.표현부 : 어떤 값을 출력하고자 할때 쓰는것
<%=
// 변수표현,메소드표현,특정객체,수식 %>
예제
<%!
String s ="this is a test";
int i =1000;
Point2D.Double mypoint = new Point2D.Double(5.0,10.0); // x,y 좌표 점객체생성
%>
<%= s %> <%= i %> <%= myPoint %> // myPoint.toString의 효과임
===> 실행하면
"this is a test" "1000" "myPoint.tiString의 값이 출력"
2.스크립트릿 : 선언부와 표현식을 제외한 모든 자바코드
<%
//
%>
예제
<%
int i = 0;
for(i=9;i<5;i++)
{
%>
// 반복되는 내용
<%
}
%>
예제
<%@ page import="java.awt.geom.Point2D" %>
<%
Point2D.Double p1 = new Point2D.Double(100.0, 100.0);
Point2D.Double p2 = new Point2D.Double(150.0,100.0);
double distance = p1.distance(p2);
%>
<html>
<head></head>
<body>
<%= p1 %> 과 <%= p2 %> 사이의 거리 : <%= distance %>
</body>
</html>
================================================
주석
<!-- 내용주석 --> : JSP가 생성하는 문서(클라이언트에 출력하는 문서)에 표현하는 주석
소스보기를 통해 보임
<%-- JSP 주석 --> : 출력되는 문서에 표현 안함
소스보기해서 안보임 : 이걸해야겟네
<%
//스크립터 언어 주석 : 서블릿으로 변환된 *.java 내부에 보여지는 언어주석
/*
*/
%>
===========================================
디렉티브란
=>해당 JSP페이지와 관련된 정보를 나타낼때 쓰는 태그
<%@ 디렉티브 속성1="값1" 속성2="값2" ... %>
디렉티브 종류
page - 해당페이지의 전체적인 특성을 나타냄
include - 다른페이지를 포함하고자 할때 사용
taglib - 기능확장을 위해 사용할 커스텀 태그의 경로를 지정할때 사용. 사용자태그를 만들어 놓고 그걸 불러와서 사용하고자 할때 사용..
[page 디렉티브]
language : 스크립트의 언어이름 : 기본값 java
contextType : MIME타입,문자셋, : 기본값 "text/html"
info : 문자열 : 별의미없다.
import : 클래스, 패키지 이름
session : boolean값 : 기본값 true
*session이란 어떤 사이트에 로그인하면 그 사용자 정보가 서버에 보내져서 사용자 세션 객체가 생성된다. 그 이후 그 사이트의 어떤 페이지로 이동을 하든 사용자정보에 대한 세션이 계속 유지되는 상태이므로 접근이 가능하게 하는것..기본값은 true이다
buffer : 버퍼의 크기 또는 false : 기본값 8KB
autoflush : 버퍼가 꽉 차면 자동으로 flush해주냐 기본값 : ture
isThreadSafe : 해당 페이지가 쓰레드에 안전하냐 안하냐? 기본값 :true (안전하게 하겟다는 의미)
errorPage : 로컬 URL을 넣어줌 : 자신페이지에 에러가나면 어떤 페이지로 이동해서 에러를 보여주냐를 나타냄.
iserrorPage : errorPage에서 에러가 난 URL은 iserrorPage가 true가 됨
extends : 클래스 이름이 들어감 : 지금 작성하는 페이지가 어떤 클래스에서 상속을 받느냐..자동으로 JSP가 해줌.신경쓸필요없다.
pageEncoding: ISO-8859-1 기본값 euc-kr 한국어 ecu-jp 일본어
================================================
[include 디렉티브]
다른페이지의 내용을 포함하고자 할때
<%@ include file =" 포함할 페이지의 로컬 ㅕ끼" %>
*액션태크의 인클루드는 인클루드 쪽서블릿으로 제어권이 넘어가서 다시 페이지로..제어권이 넘어와서 사용
*디렉티브의 인클루드는 페이지 소스를 불러와서 서블릿으로 통채로 변환해서..사용
==============================================
[taglib 디렉티브]
jsp페이지에서 사용할 태크 라이브러러리를 지정할때 사용
사용자 정의 태그: xml...
=====================================================
[기본객체]
1.request.response,out 기본객체(컨테이너가 제공하는 객체:즉 바로 사용할수 있는개첵)
*종류
1.request : javax.servlet.SevletRequest 파라미터를 포함한 요청 데이터
즉, A페이지에서 B페이지로 제어권이 넘어갈때 같이 따라가는 객체
2.response : 요청ㅇ르 했으면 요청에 대한 응답을 생성해서 주는 객체
3.out : 출력 스트림에 내용을 출력하는 객체
4.page : 페이지 자기 자신에 대한 객체
5 config 객체 : jsp 페이지의 servletconfig 객체
6.session 객체: 사용자가 웹사이트에 접속했을때 그 사용자가 다른페이지로 이동해서 가지고 다니는 것이 세션객체
기본값 : true
7.application 객체: 전체 사이트에 관여된 객체. 서블릿 config객체로부터 구할수 있는 서블릿 컨텍스터(ex: 카운터 같은거)
8.pageContext 객채: 현재 jsp 페이지의 페이지 컨텍스터
9. exception 객체 : 에러페이지에서 사용되는 예외 객체
=======================================
[기본객체가 사용하는 메소드]
void setAttribute(key,value) 키값이 key인 객체 value를 저장한다.
Object getAttribute(key) 키값이 key인 객체를 읽어들인다.
void removeAttribute(key) 키값이 Key인 객체를 삭제한다.
Enumeration getAttributeNames() 관련된 모든 속성의 이름을 읽어들인다. (배열형태로 통채로 반환됨..이거를 enum으로 받아들인다는것)
============================================
[request 기본객체]
한번의 요청에 대해서 유효한 객체
자신의 페이지로의 요청에 대한 url,헤더,쿠키 요청과 관련된 파라미터의 정보에 접근할수 있는 메소드 제공
getParameterNames() 모든 파라미터의 이름을 구한다.
getParameter(String name) 지정한 이름을 가진 파라미터중 첫번째ㅔ 파라미터의 값을 구한다.
getParametetValues(String name) 지정한 파라미터의 모든값을 String[]으로 구한다.
=======================================================================
[요청헤더와 기타 유용한 정보를 얻을수 있는 메소드제공]
getMethod() 요청방식이 get인지 post인지 구한다
getRequestURI() 요청한 URI를 구한다.
getProtocol() 요청한 프로토콜ㅇ르 구한다.
getServletPath() 요청한 서블릿 경로를 구한다.
getQueryString() 쿼리 스트링을 구한다. (브라우저 주소줄 뒤에 ?하고 변수값 =..이런식으로붙는거)
getSErverName() 서버이름
GetServerPort 서버포트
getRemoteAddr 서버 주소
getAthType 인증스키마
getLocale 로커일
getHeader(name) 헤더중에 nameㅇ속성값ㅇ르 구한다.
================================================================
response 기본객체
jsp 페이지를 처리한 결과를 사용자에게 보낼때 사용되는 응답객체
헤더,쿠키,응답과 관련된 정보를 설정할수 있는 메소드를 제공
(쿠키가 사용자 컴터에 남아있으면 로그인안해도 서버에 그정보를 가지고 접속하면 찾아가므로..사용자에게 보여질수 있다.)
응답을 통해서 전송된느 내용의 형식을 지정하는 메소드를 제공
addCookie(Cookie) 사용자의 컴퓨터에 심을 쿠기정보를 저장하는 메소드
setHeader(name.value) 이름이 anme인 헤더를 value값으로 지정
addHeader(name.value) name 헤더를 value로 추가
setContentType(String) MIME 타입을 지정하며, 추가로 인코딩 타입 지정
getCharacterEncoding() 응답하는 내용의 캐릭터 인코딩을 구함
encodeRedirectURL(url) sendRedirect() 메소드에서 사용할 URL을 인코딩
encodeURL(name) 링크에서 사용할 URL을 인코딩
sendRedirect(url) 지정한 URLㅇ르 사용하여 리다이렉트 응답을 보냄ㄴ
===============================================================
out 기본객체
요청받은 jsp 페이지가 브라우저에 결과를 보낼때 출력을 담당하는 객체
javax.servlet.jsp.JspWriter 클래스의 인스턴스
newLine() 줄구분자를 출력
print(데이터 유형) 해당 데이터 유형의 문자열 형식을 출력
println(데이터 유형) 해당 데이터 유형의 문자열 출력,줄구분자 출력
==========================================================
page 기본객체
해당 jsp페이지가 변환된 서블릿 그 자체를 나타내는 객체
페이지의 정보를 나타내는 getServletInfo()메소드를 제공
=======================================================
config 기본객체
jsp페이지를 초기화 할때 사용되는 초기화 파라메털르 저장
서블릿ㅇ르 변환할때 저장하는 서블릿의 이름은 jsp임
=======================================================
session 기본객체
java.servlet.http.HttpSession 인터페이스의 인스턴스
getId() 클라이언트마다 주어지는 고유한 세션 ID, 서버측에서 고유한 세션ID를 클라이언트에게 부여.그걸 알고자할때 쓰는것 getId()
getCreatingTime() 세션 생성시간을 long형으로 구한다. 세션이 접속해서 세션이 생성된 시간.세션의 기간을 정해줄때 필요함.
getLastAccessedTime() 마지막 요청받은 시간을 초 단위로 구한다.
getMaxInactiveInterval() 두 요청간의 세션 유지 최대시간 초단위로 구한다.
setMaxInactiveInterval() 두 요청간의 세션유지 최대시간을 초단위로 설정한다.
isNew() 세션ID를 생성해서 리턴한다.
invalidate() 세션을 버리고 속성에 저장된 객체를 모두 풀어준다.
==================================================
application 기본객체
해당 application 전체에 사용할수 있는 정보를 저장하는 객체
해당 어플리케이션전체라는 의미는 하나의 사이트를 말함. ex: 카운터
서블릿 컨텍스트와 같은 개념이고 전체 사이트의 정보를 저장함.
서블릿 컨텍스트를 하나의 사이트를 나타내는 이름정도로 이해하면 된다.
javax.servlet.ServletContext의 인터페이스의 인스턴스
getServerInfo()
getMajorVersion()
getMinorVersion(()
거의 사용안함.
=============================================================
pageContext 기본객체
현재 jsp페이지의 콘텍스트를 나타냄(페이지를 대표하는 이름)
다른 기본객체에 접근할수 있는 메소드를 제공
<%
HttpSession httpSession = pageContext.getSession();
%>
제어를 이동하거나 포함할수있는 메소드를 제공한다.
forward(path) include(path)
=========================================================
exception 기본객체
jsp 에서 발생하는 예외를 나타냄
디렉티브의 isErrorPage 속성이 true인 페이지에서 접근가능
<#@ page isErrorPage="true" %>
java.lang.Throwable 클래스를 상송받은 클래스의 인스턴스
=========================================================
@@ JSP 액션태크
<jsp:useBean> <jsp:setProperty> <jsp:getProperty>
<jsp:include> <jsp:forward> <jsp:plugin>
1.빈관련 태그
jsp에서 빈을 사용할수있도록 jsp는 tag를 제공함.이걸 이용해라
<jsp:useBean> jsp 페이지에서 자바의 빈ㅇ르 사용하고자 할때 사용
<jsp:setProperty> 사용할려는 빈의 변수값 메소드값(프로퍼티) 설정할때 사용
<jsp:getProperty> 빈에 정의된 프라퍼티의 값을 불러올때 사용
<jsp:include> 다른 문서의 출력결과를 현재 페이지에 포함하고자 할때 사용(디렉티브와 차이: 제어권이 넘어감)
ex: <jsp:include page ="로컬 url" flush="true|false" />
include 디렉티브와는 달리 포함되는 페이지도 또하나의 페이지로 해석되어 존재
포함하는 페이지와 포함되는 페이지는 서로다른 pageContext객체를 가짐, 따로따로 서블릿이 생성이 되니까..당연한 소리지..
두페이지는 서로다른 request객체를 가지지만 서로 같은값을 가짐
<jsp:forward>
ex <jsp:forward page="로컬url' />
현재 페이지에서 다른 페이지로 제어권을 이동하고자 할때 사용
서로 다른 pageContext 객체를 사용
서로 다른 request를 기본객체를 할당받지만 같은 값을 가짐
<jsp:param> 태그를 사용하여 새로운 파라미터를 넘겨줄수 있음
제어권이 이동할때 이동되는 페이지로 넘겨줄수 있음.
<jsp:plugin> 자바플러그인을 사용하여 자바 애플릿을 실행하고자 할때 사용
필요한 속성은
type
code
codebase
height
width
===========================
자바빈
jsp에서 class의 메소드를 사용하고 싶을때
이 class를 <jsp:useBean id=" " 의 id로 등록하고
jsp문서내에서 이 id."클래스의 메소드" 로 사용한다.
이때 메소드도 일일이 다 등록해야하는데.jsp문서내에서 이때 사용하는게
<jsp:setProperty
가져오는게 <jsp:getProperty 이다.
==============================
@빈의 정의
특정 기능을 수행하도록 미리 정의되어진 클래스
@빈의 특징
모듈화되어 있고 재사용 가능
내부의 데이터와 로직이 캡슐화 되어있음
사용법에 대한 인터페이스만 알면 누구나 사용가능
프로그램 개발시 표준화된 인터페이스를 통해 접근하므로 현저한 시간 단축
@프라퍼티
정의-빈이 가지고 있는 데이터의 값을 설정하거나 읽어 들이는 기능을 수행한느 자바빈의 속성
종류-Setter: 빈의 속성값ㅇ르 설정하기 위한 메소드
Getter : 빈의 속성값을 읽어들이기위 한 메소드
@규약: 시작은 소문자, 단어가 바뀔때마다 대문자
외부에서 접근가능해야하느모 접근속성은 public
get또는 set다음에 데이터 멤버의 일므이 와야함(클래스가 가지고있는 변수)
특정 객체를 프로퍼티의인수로전달가능
====================================
빈관련 jsp태그
<jsp:useBean> 페이지내에서 자바비ㅏㄴ을 사용할수있도록 설정
사용가능한 속성 : id 자바식별자(객체명)
scope : 만들어진 객체를 어디에서 사용할꺼냐..page / request. seesion / application
=================================
<jsp:setProperty> 태그
<jsp:setProperty name="beanName" property="propertyName" value="propertyValue" />
ex:setX 메소드라면 여기서 X라는 이름을 위의 property에 적어주면 되는거다.
해당 속성값에 대한setProperty메소드를 호출한다.
propertyValue값을 해당 속성에 설정한다.
==================================
<jsp:getProperty>
<jsp:getProperty name="beanName" property="propertyName" />
해당 속성값에 대한 getProperyt메소드를 호출한다.
해당 속성값을 호출한다. 즉 변수의 값을 리턴하는 return문이 들어있겟다.
=============================
자바에서는 엔터프라이즈빈이라는걸 제공해주니 이걸 사용법만 알면 가져다 쓸수있다..함 찾아봐보장..
===========================================
[빈 컴포넌트 사용하기]
빈 컴포넌트의 영역
스크립트와 빈태그의 혼합
====================
빈 컴포넌트의 영역
-page 영역: 페이지의 요청과 동시에 생성.소멸과 동시에 빈 객체도 소멸
scope영역을 생략할경우에도 이값으로 설정
-request 영역
브라우저의 한번 요청이 완료될때가지 존재
하나의 jsp페이지로 구성된 경우 page영역과 request영역은 동일한 효과를 지님
포함되는 페이지에서 빈 객체를 사용하기 위해서는 반드시 빈객체가 먼저 생성되어 있어야 함
-sesssion영역
세션이 살아있는한 빈 컴포넌트도 살아있다는 소리
사용자의 중요한 정보는 DB또는 다른 저장장치를 이용해서 하는것이 일반적. DB에 사용자정보가 있다가 빈객체에 이 정보넣고. 세션이 살아있는동안 사용하다가..세션이 죽으면 빈객체도 없어지므로 사용자 정보도 DB에만남게 되는것임
-application영역(하나의 사이트를 말함)
jsp 컴테이너를 종료하기 전까지는 서버에 존재함(톰캣.레진..)
서버의 모든 사용자에게 공통적으로 사용되므로 사용자 개인 정보는 sessioh영역에 저장하는것이 일반적
application영역에는 conter 같은것을 넣어라
=====================================
스크립트와 빈태그의 혼합
1.빈캐그만을 이용한 경우
<jsp:useBean id="test" class="passday.bean.TestBean" />
<jsp:getProperty name="test" property="testPrpperty" />
2.스크립트를 이용한 경우
<jsp:useBean id="test" class="passday.bean.TestBean" />
<%= test.gettestProperty() %>