내장객체 : JSP 페이지 내부에서 별도의 객체 생성 없이 사용 가능한 객체. JSP 페이지가 서블릿으로 컴파일 되면서 자동으로 생겨나는 객체를 말함.
config 내장객체
jsp 페이지가 컴파일되는 서블릿의 구성데이터를 저장한다.
jsp 페이지는 GenericServlet 클래스를 상속해야하는데, GenericServlet 클래스는 ServletConfig 인터페이스를 구현하였기 때문에 jsp 페이지에서 사용할 수 있는 config 객체는 ServletConfig 인터페이스의 실제 구현을 사용할 수 있다.
- config 객체에서 사용가능한 메소드
public java.lang.String getServletName()
public ServletContext getServletContext()
public java.lang.String getInitParameter(java.lang.String name)
public java.util.Enumeration getInitParameterNames()
- getServletName() : 서블릿 컨테이너에 정의된 현재 서블릿의 이름을 반환한다. 이때 얻은 이름은 DD(Deployment Descriptor) 파일에서 이름을 정의하게 되는데 WAR 형태의 파일을 작성할 때 지정할 수 있다
- getServletContext() : 현재 요청된 JSP 페이지의 번역된 서블릿의 문맥 정보(현재 서블릿과 컨테이너의 환경정보)를 담고 있다.
- getInitParameter(String name) : 주어진 이름에 해당하는 초기화 파라미터의 이름에 해당하는 값을 반환한다.
- getInitParameterNames() : 서블릿의 초기화 파라미터의 모든 이름을 반환한다.
request 내장객체
Web 환경은 클라이언트의 요청을 서버측에서 받고, 서버 측에서는 클라이언트에게 응답을 리턴해줘야 한다.
이때 클라이언트의 요청을 서버 측에서 받아야 할 때 사용하는 객체가 request 내장객체이다.
request 내장객체는 서블릿 클래스의 javax.servlet.http.HttpServletRequest 인터페이스를 구현한 객체이고, 이 객체는 javax.servlet.ServletRequest 인터페이스를 상속한 객체이다.
가장 간단하게, 사용자의 입력값을 넘겨주기 위해서 Form을 통한 데이터 전송이 많이 쓰인다.
이렇게 전송되는 방식에는 POST 방식과 GET 방식이 많이 쓰인다.
POST 방식은 사용자의 요청을 숨겨서 서버측으로 전송해주는 방법(소스보기를 하면 다 보임..) 이고,
GET 방식은 브라우저의 주소창을 이용한 방법이다.
GET 방식은 주소창으로 클라이언트의 요청이 전송되기 때문에 대용량의 데이터는 전송받을 수 없고,
사용자의 중요한 정보를 넘기는 것도 주소창에 그대로 노출되게 된다.
- 사용자의 요청 파라미터를 받아내는 메소드
request.getParameter("Parameter Name") : 주어진 파라미터 이름에 해당하는 값을 던진다.
request.getParameterNames() : 요청으로 넘어온 파라미터의 모든 이름을 Enumeration 형태로 반환한다.
request.getParameterValues("parameter Name") : 주어진 파라미터 이름에 해당하는 값을 스트링 배열로 던지고, 해당 파라미터가 없다면 null 을 반환한다.
request.getParameterMap() : 요청으로 넘어온 파라미터의 이름과 값이 mapping된 Map 객체를 반환한다. 파라미터의 이름은 Key가 되고 값은 Value가 된다.
- Header 정보를 추출하는 메소드
public int getContentLength() : 요청의 크기를 알아낸다. 길이를 알 수 없으면 -1을 반환한다.
public String getcontentType() : 요청의 MIME 타입을 리턴하며, 알 수 없으면 null을 리턴한다.
public String getProtocol() : 요청에 사용된 프로토콜의 이름, 버전을 리턴한다.
* 헤더
: HTTP 헤터는 클라이언트와 서버가 요청 또는 응답으로 부가적인 정보를 전송할 수 있게 한다. 요청과 응답을 위한 부가 정보.
저장되거나 전송되는 데이터 블록의 맨 앞에 위치한 데이터를 가리킨다. General header, Request header(클라이언트 자체에 대한 자세한 정보를 포함), Response header(위치 또는 서버 자체에 대한 정보(이름, 버전 등)와 같이 응답에 대한 부가적 정보를 가짐), Entity header 네 가지로 구성된다.
* MIME 타입 (Multipurpose Internet Mail Extensions)
: 클라이언트에게 전송된 문서의 다양성을 알려주기 위한 메커니즘. 웹에서 파일의 확장자는 별 의미가 없으므로 각 문서와 함께 올바른 MIME 타입을 전송하도록 서버가 정확히 설정해야 한다. 브라우저는 리소스를 내려받았을 때 해야할 기본 동작이 무엇인지 결정하기 위해 MIME 타입을 사용한다.
바이너리 파일에서 텍스트파일로 변환하는 인코딩 방식. 바이너리 파일은 음악, 무비, 워드 파일 등 다양한 종류의 문서를 포함하고, 이를 전달하기 위해서는 텍스트 파일로 변환이 필요하다.
MIME으로 인코딩한 파일은 Content-type 정보를 파일 앞부분에 담는다.
보통 소문자로 쓰여지고 ' type/subtype ' 의 구조로 사용한다.
- 요청을 forward 시킬 수 있는 메소드
request 객체에는 해당 request 객체에 사용자가 정의한 이름으로 객체를 저장할 수 있으며
다른 jsp 페이지나 서블릿 등으로 요청을 forward 시킬 수 있는 메소드를 제공한다.
이 속성들은 사용자의 요청 파라메터와 비슷해 보이지만 그렇지 않다.
public void setAttribute(String name, Object o) : 요청 정보에 이름으로 저장된 Object를 저장한다.
public Object getAttribute(String name) : 요청 정보에 이름으로 저장된 Object를 반환한다. 정보를 알 수 없으면 null을 반환한다.
public Enumeration getAttributeNames() : 요청 정보에 포함된 속성의 이름을 Enumeration으로 반환한다. 값을 알 수 없으면 빈 Enumeration을 반환한다.
* parameter(파라미터)와 attribute(속성)의 차이
Parameter : 브라우저(사용자)에서 넘어온 값. String만 사용 가능. request에만 저장할 수 있음. html의 form 데이터 전송시 key/value 쌍으로 사용된다.
Attribute : 개발자가 코딩으로 설정하는 값. String 외에 Object, Array 등 다양한 데이터 입력이 가능. request 외에도 session, context 등에도 저장이 가능.
* Enumeration (열거형)
: 한정된 값만을 갖는 데이터 타입. 계절(봄, 여름, 가을, 겨울), 요일(월,화,수,목,금,토,일) 등.
이런 것들을 열거해서 한꺼번에 묶어놓은 형태를 열거형이라 한다.
열거 타입 선언(public enum 키워드 사용, 열거타입 이름은 소스파일명과 일치해야함), 열거 상수 선언(열거상수는 열거 타입의 값으로 사용. 대문자로 표기해야 함. 단어 사이는 언더바_ 사용해야 함.)
- 요청 헤더를 읽기 위한 메소드
public Enumeration getHeaderNames() : 요청에 대한 모든 헤더의 이름을 Enumeration으로 반환한다.
public String getHeader(String name) : 주어진 이름에 해당하는 헤더의 값을 반환한다.
public Enumeration getHeaders(String name) : 주어진 이름에 해당하는 헤더의 값을 Enumeration으로 반환한다.
public Cookie[] getCookies() : 요청에 포함된 모든 쿠키를 배열로 반환한다.
public String getRequestURI() : 요청에 포함된 유효한 URI를 반환한다. 반환값에서 URL 정보는 제외된다.
public StringBuffer getRequestURL() : 요청에 대한 유효한 URL을 반환한다.
public RequestDispatcher getRequestDispatcher(String path) : Path로 지정된 local URL에 대한 요청전달자를 생성한다.
public String getQueryString() : 요청 URL의 질의문자열을 반환. 없으면 null
public String getRemoteHost() : 요청을 보낸 호스트의 이름을 반환한다.
public String getRemoteAddr() : 요청을 보낸 호스트의 IP 주소를 반환한다.
public HttpSession getSession(boolean flag) : 들어온 요청의 세션데이터를 얻어낸다.
*URI URL
URI : 특정 리소스를 식별하는 통합자원식별자(Uniform Resource Identifier)를 의미. 웹기술에서 사용하는 논리적 또는 물리적 리소스를 식별하는 고유한 문자열 시퀀스.
URL : 흔히 웹주소 라고 함. 컴퓨터 네트워크 상에서 리소스가 어디 있는지 알려주기 위한 규약. URI의 서브셋이다.
URI는 식별하고 URL은 위치를 가리킨다.
'SEA'는 내 이름이며 식별자(Identifier)이다. 이는 URI와 비슷하지만 내 위치, 연락처 등의 정보가 없으므로 URL은 될 수 없다
'경기도 김포시 ~~' 는 주소다. 주소는 특정 위치를 가리킨다. URL 및 URI와 비슷하며, 간접적으로 내가 있는 장소로 식별한다.
response 내장객체
response 내장 객체는 jsp 페이지, 즉 서블릿의 응답을 클라이언트에게 전송해 줄 때 사용되는 메소드이다.
MIME 타입, 출력 스트림, 헤더 정보, 쿠키, 세션, 상태정보 등을 클라이언트에 전송해주는 메소드들이 있다.
setcontentType("text/html; charset=euc-kr") : 응답의 MIME 타입이 설정됨
setContentLength() : 응답의 길이를 가지고 있는 헤더 정보를 설정해준다
getOutputStream() : 출력 스트림을 열어줌
addCookie() : 클라이언트에게 쿠키 정보를 설정한다
sendRedirect() : 클라이언트의 요청을 다른 페이지로 이동시킬 수 있다. forward나 include와는 사용용도가 완전히 다르다. sendRedirect()를 이용해 다른 페이지로 이동시 서버에서 세션을 유지하기 위해 URL rewriting을 사용해야 하며 이때 사용되는 메소드는 encodeRedirectURL() 로 인코딩해야 세션정보를 URL에 추가된다.
* 스트림(Stream)
: 일반적으로 데이터, 패킷, 비트 등 일련의 연속성을 갖는 흐름을 의미. 음성, 영상, 데이터 등의 작은 조각들이 하나의 줄기를 이루며 전송되는 데이터 열. 호스트 상호간 또는 동일 호스트 내 프로세스 상호간 통신에서 큐에 의한 메세지 전달방식을 이용한 가상 연결 통로를 의미하기도 함.
입출력 장치에 데이터를 입력하거나 출력하는 처리를 위해 스트림이 존재하며, 사용자의 입장에선 입력스트림과 출력스트림으로 나눌 수 있다. 스트림의 입출력 처리의 중간자 역할을 한다.
out 내장객체
response는 클라이언트의 요청에 응답하는 코드를 대부분 헤더 정보에 넣어서 클라이언트에 전송하지만, 클라이언트의 요청에 응답하는 몸체를 보내기 위해서는 클라이언트 측으로 데이터를 전송해줄 스트림이 필요하게 된다. 이때 사용하는 것이 out 내장객체이다. out 객체는 스크립트릿 사이에 out.print("문자열") 과 같은 식으로 사용하면 된다.
flush() : 출력 버퍼를 flush 시킨 후 출력 스트림도 flush 시킨다. 버퍼에 있는 데이터를 모두 클라이언트로 전송하고 버퍼를 비운다는 뜻. buffer가 다 차기 전에 종료하면 buffer에 들어있는 내용은 파일에 쓰여지지 않는다. 그때 flush()를 호출하면 buffer의 내용이 파일에 쓰여진다. 즉, (사용자가 원할 때) 버퍼를 비워준다=IO에서는 출력하는것=네트워크에서는 버퍼의 내용을 클라이언트나 서버로 보내는 것.
isAutoFlush() : 출력버퍼가 꽉 찼을 경우 자동으로 flush 시키는지의 여부를 boolean으로 반환하는 메소드
clearBuffer() : 현재 출력 버퍼에 담겨있는 내용을 삭제
clear() : 현재 출력 버퍼를 비우며, 만약 버퍼가 비어있다면 Exception을 던진다.
getBufferSize() : 현재 설정된 버퍼의 크기를 반환한다.
getRemaining() : 현재 출력버퍼에서 사용되지 않은 부분의 크기를 반환.
page 내장객체
JSP 파일은 JSP 엔진에 의해 Servlet으로 변환된다. Page 객체는 이렇게 변경된 servlet 클래스에 관련된 내용에 접근할 수 있도록 해준다.
Session 내장객체
Http에서 클라이언트/서버 간 통신은 비연결지향적 이다. 그래서 클라이언트와 서버의 관계를 유지하지 못하게 된다. 이때 클라이언트의 상태정보를 클라이언트가 접근할 때마다 서버측에 보내게 되면 서버는 어떠한 사용자인지 구별할 수 있는데, 이것이 Session이다. 같은 사용자가 웹서버와 지속적으로 요청/응답을 주고받는 동안은 세션은 없어지지 않고 유지된다. 다만 요청이 일정시간 없게 되면 세션은 파괴된다.
- 세션에 들어간 값의 삭제와 관련된 메소드
removeAttribute(java.lang.String name) : 주어진 이름에 해당하는 속성을 삭제한다.
Invalidate() : 세션에 등록된 모든 속성을 삭제한다.
- 세션 유지시간 설정 메소드
setMaxInactiveInterval(int interval) : 주어진 interval을 통해 세션의 유지시간을 설정한다.
getMaxInactiveInterval() : 설정된 세션 유지시간을 반납한다.
application 내장객체
application 객체는 jsp 페이지로 만들어지고 있는 어플리케이션 자체를 나타낸다.
특정 application에서 공통적으로 사용하는 변수들이 있다면 application 객체에 등록해두고 필요에 따라 호출하면 편리하다.
- 객체의 속성을 읽기/쓰기/삭제 할 수 있는 메소드
setAttribute(String name, Object value) : 주어진 이름으로 Object value를 저장한다.
getAttribute(String name) : 주어진 이름에 해당하는 value를 Object로 반납한다.
getAttributeNames() : 현재 등록된 모든 name을 반납한다.
removeAttribute(String name) : 주어진 name에 해당하는 속성을 삭제한다.
- JSP 페이지가 실행되고 있는 환경에 대한 정보를 얻을 수 있는 메소드
getServerInfo() : 서블릿 컨테이너의 이름과 버전을 반납
getMajorVersion() : 서블릿 컨테이너의 주 버전을 반납
getMinorVersion() : 서블릿 컨테이너의 부 버전을 반납
- 현재 application의 log를 기록하는 메소드
log(java.lang.String msg) : 주어진 msg를 로그파일에 기록
log(java.lang.String message, java.lang.Throwable throwable) : 주어진 Exception의 stackTrace도 같이 쓴다.
pageContext 내장객체
현재 JSP 페이지의 Context를 표현하며 다른 내부객체를 Access 할 수 있게 해준다.
특정 내장객체의 속성을 얻어낼 수 있으며 현재 페이지에서 다른 페이지로 요청을 넘길 수 있는 기능이 있어서 현재 페이지에 다른 페이지의 출력을 포함시킨다든지 현재의 페이지 요청을 다른 페이지로 넘길 수 있다.
Session 객체가 필요하다면 다음과 같이 요청할 수 있다.
HttpSession OBJSession = pageContext.getSession();
-JSP 내장객체를 읽어들일 수 있는 메소드
getPage() : 이 페이지의 서블릿 인스턴스, 즉 page 내장객체를 반환
getRequest() : 이 페이지의 처리를 시작하게 한 요청, 즉 request 내장객체를 반환
getResponse() : 이 페이지의 응답, 즉 response 내장객체를 반환
getOut() : 이 페이지의 출력 스트림, 즉 out 객체를 반환
getSession() : 이 페이지가 가담하고 있는 session 내부객체를 반납(있을때만)
getServletContext() : 이 페이지의 서블릿이 실행되는 외부환경(context)을 반납. ServletContext 객체를 반납해주며, 이는 application 객체를 말한다. 객체의 메소드를 이용해 현재 객체에 다른 객체를 포함시킬 수 있으며 현재 페이지 요청을 다른 페이지로 forwarding 시킬 수 있으며 log를 남길 수 있다.
- 페이지의 요청을 다른 곳으로 이동시키는 요청전달 메소드
forward(String relativeUrlPath) : 현재 페이지의 요청 처리를 지정된 URLPath로 전달
include(Stirng relativeUrlPath) : 현재 페이지에 다른 로컬 URL의 파일을 처리한 결과를 포함.
* forward
파일의 끝을 만나기 전에는 해당페이지의 번역된 내용을 출력버퍼에 보관함. 이때 pageContext.forward 메소드를 만나면 기존의 출력버퍼는 비워지고, 현재 페이지의 요청을 지정된 url로 넘겨준다. 서버측에서 페이지의 이동이 이루어지므로 브라우저 주소창은 forward된 페이지 주소가 아니라 처음 요청한 유소가 유지된다.
response.sendRedirect("URL") 메소드는 클라이언트의 요청을 주어진 페이지로 이동을 시키지만
forward는 클라이언트의 요청을 이동시키는 게 아니라 서버측에서 해당 페이지의 요청을 다른 페이지로 넘기기 때문에 주소창은 고정되어 보인다.
- 특정 스코프에 속성을 액세스 할 수 있는 메소드
setAttribute(String name, Object o, int scope) : 주어진 scope에서 name에 해당하는 Object를 담는다
getAttribute(String name, int scope) : 주어진 name의 Object를 해당 scope에서 찾는다
getAttributeNamesInScope(int scope) : 주어진 scope에 있는 모든 속성의 이름을 Enumeration으로 반납
getAttributeScope(java.lang.String name) : 주어진 이름에 해당하는 속성의 스코프를 int로 반납
findAttribute(String name) : 주어진 name에 해당하는 속성을 모든 scope에서 찾아서 반납
removeAttribute(String name, int scope) : 주어진 스코프에 있는 name에 해당하는 속성을 삭제
jsp에서 속성을 저장할 수 있는 객체는 page, request, session, application 객체 네 가지이다.
스코프는 이렇게 저장된 객체의 생명주기를 말한다.
만약 page 객체에 특정 속성을 저장해놓으면 저장된 속성은 page 객체의 수명한도 내에서 속성을 사용할 수 있다.
각 객체의 수명은 page<request<session<application 순이다.
page 속성은 주어진 페이지 내부에서만 사용할 수 있고
request 속성은 요청 속성에서만 속성을 사용할 수 있고
session 속성은 주어진 session 시간 동안 속성을 사용할 수 있고
application 속성은 jap 컨테이너가 실행되고 있는 동안 속성이 계속 유지된다.
- 스코프 설정 변수
PAGE_SCOPE : PageContext 속성에 대한 스코프 변수
REQUEST_SCOPE : request 속성에 대한 스코프 변수
SESSION_SCOPE : session 속성에 대한 스코프 변수
APPLICATION_SCOPE : application 속성에 대한 스코프 변수
exception 내장객체
예외를 처리해주는 jsp 내장객체. exception 내장 객체는 모든 jsp 페이지에서 사용하는 것이 아니라 사용자가 설정해줘야 한다. page 지시자의 isErrorPage 속성이 ture인 페이지에서만 사용 가능하다.
'JSP' 카테고리의 다른 글
[JSP] (6)쿠키와 세션 (0) | 2022.05.08 |
---|---|
[JSP] (5)JSP Action 태그 (0) | 2022.05.08 |
[JSP] (3)JSP의 이해 (0) | 2022.04.27 |
[JSP] (2)JSP 태그 (0) | 2022.04.26 |
[JSP] (1)Script 언어의 이해 (0) | 2022.04.26 |