19.04.29 JSP의 내장 객체

Back-End/JSP 2019. 4. 29. 13:36
728x90
반응형

-내부 객체란?-


내부 객체란 jsp 페이지를 작성할 때 특별한 기능을 제공하는 JSP 컨테이너가
제공하는 특별한 객체(변수)를 말합니다.
이러한 객체는 지금까지 배운 JSP 문법 요소들과 함께 동작해 사용자의 요청을
적절히 처리하여 동적으로 HTML을 생성하게 됩니다.
내부객체의 정확한 명칭은 JSP 규약에서는 implicit object 입니다.
내부 객체는 특정한 자바 클래스 또는 인터페이스의 형태를 가지고 있습니다.




-JSP 컨테이너가 제공하는 내부 객체-



  

  1.   jsp 페이지 입출력 관련 내부 객체


  2.   jsp 페이지 외부 환경 정보 제공 내부 객체


  3.   jsp 페이지 서블릿 관련 내부 객체


  4.   jsp 페이지 예외 관련 기본 객체





-jsp 페이지의 내부 객체-

내부 객체

 

Type


설명 

 request


javax.servlet.http.HttpServletRequest


 파라미터를 포함한 요청을 담고 있는 객체


response


javax.servlet.http.HttpServletResponse 

요청에 대한 응답을 담고 있는 객체 


out


javax.servlet.jsp.JspWriter 

페이지 내용을 담고 있는 출력 스트림 객체 

 

session


javax.servlet.http.HttpSession 

세션 정보를 담고 있는 객체

 

application


javax.servlet.ServletContext 

어플리케이션 Context의 모든 페이지가 공유할 데이터를 담고 있는 객체 

 

pageContext


javax.servlet.jsp.PageContext 

페이지 실행에 필요한 Context 정보를 담고 있는 객체 

  

page


javax.servlet.jsp.HttpJspPage 

jsp 페이지의 서블릿 객체 

 

contig


javax.servlet.ServletConfig 

jsp 페이지의 서블릿 설정 데이터 초기화 정보 객체 

 

exctption


javax.lang.Throwable 

jsp 페이지의 서블릿 실행 시 처리하지 못한 예외 객체 


  

  스크립트 요소에서 내부 객체와 동일한 변수 명으로 선언할 수가 없습니다.

  만약 9개의 내부 객체 변수명과 동일한 이름으로 스크립트 요소에서 선언을 하였다면

  String page = null;

  아래와 같은 에러가 발생이 됩니다.

  Variable 'page' is already defined in this method

  (이 메소드에는 이미 page 변수가 선언이 되었습니다.)

  선언문에서는 동일한 이름으로 선언할 수는 있지만 권장할 만한 방법은 아닙니다.





-내부 객체의 속성을 저장하고 읽어내는 공통 메소드-


메소드의 파라미터 값으로 value는 Object 타입이므로 객체의 모든 타입을 저장할 수 있으며 key는 String 타입의 객체 형태를 가지고 있습니다.


 

메소드


설명 


 setAttribute(key, value)


주어진 key(이름 등)에 속성값을 연결합니다.


getAttributeNames( )


모든 속성의 이름을 얻어냅니다.

 

getAttribute(key)


주어진 key에 연결된 속성값을 얻어냅니다.

 

removeAttribute(key)


주어진 key에 연결된 속성값을 제거합니다.




-request, response, out 내부 객체-


jsp 페이지 입출력과 관련한 내부 객체에 해당합니다.

클라이언트로부터 jsp 페이지의 호출에 의해서 전달되는 데이터의 요청과 응답 그리고 출력의 역할을 담당한다.




-request-


브라우저에서 jsp 페이지로 전달되는 데이터의 묶음으로 HTTP 헤더와 HTTP 바디로 구성되어 있습니다.

JSP 컨테이너는 요청된 HTTP 메시지를 통해 HttpServletRequest 객체 타입의 request 객체 명으로 사용합니다.


메소드


 설명

 

String getParameter(name)


 name에 할당된 값을 반환하며 지정된 파라미터 값이 없으면 null 값을 반환합니다.

 

String[] getParameterValues(name)


 name의 모든 값을 String 배열로 반환합니다.

 

Enumeration getParameterName( )

 

 요청에 사용된 모든 파라미터 이름을 java.util.Enumeration 타입으로 반환합니다.

 

void setCharaterEncoding(env)


 post 방식으로 요청된 문자열의 character encoding을 설정합니다.




-예제 및 출력 결과-


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR" />
</head>
<div style="text-align: center;">
    <!-- 가운데 정렬 시킨다. -->
    <h1>Request Example1</h1>
    <form method="post" action="request1.jsp">
        <!-- request1.jsp파일로 입력받은 자료를 보낸다(post)형식으로 -->
        성명 : <input name="name"><br /> 학번 : <input name="studentNum"><br />
        성별 : 남자<input type="radio" name="gender" value="man" checked>
        여자<input type="radio" name="gender" value="woman"><br /> 전공 :
        <select name="major">
            <option selected value="국문학과">국문학과</option>
            <option selected value="영문학과">영문학과</option>
            <option selected value="수학과">수학과</option>
            <option selected value="정치학과">정치학과</option>
            <option selected value="체육학과">체육학과</option>
        </select><br /> <input type="submit" value="보내기">
    </form>
</div>
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<%@ page language="java" contentType="text/html; charset=EUC-KR"%>
<div style="text-align: center;">
    <%
        request.setCharacterEncoding("EUC-KR"); //받아들이는 문자의 문자셋을 EUC-KR(한글안깨짐)으로 처리
        String name = request.getParameter("name");//파라미터로 값을 받아들인다.
        String studentNum = request.getParameter("studentNum");
        //int studentNum = Integer.parseInt(request.getParameter("studentNum"));
        String gender = request.getParameter("gender");
        String major = request.getParameter("major");
 
        if (gender.equals("man")) //equals()메소드를 사용해 받아들인 문자열과 비교해서 gender 값을 리턴한다.
        {
            gender = "남자";
        } else {
            gender = "여자";
        }
    %>
    <h1>Request Example1</h1>
    성명 :
    <%=name%><p />
    학번 :
    <%=studentNum%><p />
    성별 :
    <%=gender%><p />
    학과 :
    <%=major%><p />
</div>
cs




-URL과 URI의 차이점-


URL(Uniform Resource Locator)은 인터넷에서 접근 가능한 자원의 주소를 일관되게 표현할수 있는 형식을 말하고,

URI(Uniform Resource Identifier)은 존재하는 자원을 식별하기 위한 일반적인 식별자를 규정하는 것입니다.



메소드


 설명


String getMethod()


요청에 사용된 요청 방식 (GET, POST, PUT)을 반환합니다. 


String getRequestURI()


요청에 사용된 URL로부터 URI를 반환합니다. 


String getQueryString() 


요청에 사용된 Query 문장을 반환합니다. 


String getRemoteHost()


클라이언트 호스트 이름을 반환합니다. 


String getRemoteAddr() 


클라이언트의 주소를 반환합니다. 


String getProtocol() 


사용중인 프로토콜을 반환합니다. 


String getServerName() 


서버의 도메인 이름을 반환합니다. 


int getServerPort() 


서버의 주소를 반환합니다. 


String getHeader(name) 


HTTP 요청 헤더에 지정된 name의 값을 반환합니다. 




-response-


객체는 요청을 시도한 클라이언트로 전송할 응답을 나타내는 데이터의 묶음입니다.

JSP 컨테이너는 요청된 HTTP 메시지를 통해 HttpServletResponse 객체 타입으로 사용되고 response 객체명으로 사용합니다.


메소드


설명 


void setHeader(name, value) 


응답에 포함될 Header를 설정합니다.


void setContentType(type)


출력되는 페이지의 contentType을 설정합니다.


String getCharacterEncoding( )


요청에 사용된 Query 문장을 반환합니다.


void sendRedirect(url)


지정된 URL로 요청을 재전송 합니다.





  Pragma와 Cache-Control


  브라우저나 프록시 서버로 하여금 요청 시에 cache된 문서 처리를 위한 헤더입니다.

  HTTP 1.0에서는 Pragma이고,  HTTP 1.1에서는 Cache-Control 헤더에 value 값을 지정할 수 있습니다.






-예제 및 출력 결과-


1
2
3
4
<h1>Response Example1</h1>
<%
    response.sendRedirect("response1_1.jsp"); //response1_1.jsp로 요청을 재전송 한다.
%>
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ page language="java" contentType="text/html; charset=EUC-KR"%>
<%
    response.setHeader("Pragma""no-cache"); //응답에 포함될 머리말(이름,값)을 설정한다.
    if (request.getProtocol().equals("HTTP/1.1")) //사용중인 프로토콜과 HTTP/1.1의 값이 같으면
    {
        response.setHeader("Cache-Control""no-store");
    }
%>
<h1>Response Example</h1>
http://localhost/myapp/ch07/response1.jsp가
<p />
http://localhost/myapp/ch07/response1_1.jsp로 변경이 되었습니다.
 
cs




-out-


jsp 페이지의 결과를 클라잉이언트에 전송해 주는 출력력 스트림을 나타내며 jsp 페이지가 클라이언트에게 보내는 모든 정보는 out 객체를 

통해서 전달됩니다.  out 객체는 java.io.Writer 클래스를 상속 받은 javax.servlet.jsp.JspWriter 클래스 타입의 객체이며,

out 객체명으로 사용합니다.



  <% 

   String teamName = "KOREA";

    out.println(teamName);

    //브라우저에 출력을 위한 out 객체가 제공하는 println 메소드

  %>





메소드


 설명


 boolean isAutoFlush( )


 출력 버퍼가 다 채워져 자동으로 flush 했을 경우는 true 반환, 그렇지 않은 경우는 false를 반환합니다.


 int getBufferSize( )


출력 버퍼의 전체 크기를 바이트 단위로 반환합니다. 


 int getRemaining( )


출력 버퍼의 남은 양을 바이트 단위로 반환합니다. 

 

void clearBuffer( )


현재 출력 버퍼에 저장된 내용을 취소합니다. 


 String println(string)


string을 브라우저에 출력합니다. 

 

void flush( )


현재 출력 버퍼의 내용을 flush하여 클라이언트로 전송합니다. 

 

void close( )


출력 버퍼의 내용을 flush하고 스트림을 닫습니다. 



 

  <%=코드%> d와 out.println(코드)의 차이점?


  jsp 페이지가 서블릿으로 변환될 때 <%=코드%> 부분은 out.println(코드)로 변환이 되어 실행되므로 <%=코드%>와 out.println(코드)는

  둘 다 브라우저에 출력시키는 똑같은 역할을 하는 것입니다. 다만 jsp 페이지에서 개발자들에게 편의성을 제공하기 위해서 표현식이

  만들어진 것입니다.





 

  버퍼(buffer)란?


  동작 속도가 크게 다른 두 장치 간의 인터페이스가 서로의 속도차를 조정하기 위해 이용되는 일시적인 기억 영역을 말합니다.

  버퍼는 각 장치나 프로세스가 상대방에 의해 정체되지 않고 잘 동작할 수 있도록 해주며 효율적인 버퍼를 만들기 위해서는, 버퍼의 크기를 

  상황에 맞게 잘 설계하고, 데이터를 버퍼로 집어넣거나 빼내기 쉬쉽도록 개발하는 것이 중요합니다.





-session-


클라이언트 요청에 대한 context 정보의 세션과 관련된 정보(데이터)를 저장하고 관리하는 내부 객체입니다.

내부 객체는 jsp 페이지 내의 스크립트릿에서 묵시적으로 사용할 수가 있지만 session 객체는 page 지시자의 

session 속성이 true(기본값)으로 설정되어 있어야 사용할 수가 있습니다.

그러나 jsp 페이지중에 session 객체가 필요 없는 페이지라면 session속성을 false로 설정하는 것이 자원

활용에 조금이라도 도움이 됩니다.

다음 표는 세션 관리를 위해 제공되는 session 내부 객체의 메소드 입니다.



  세션 관리란?


  웹 브라우저에서 서버가 클라이언트의 정보를 저장하고, 요청을 시도한 특정 클라이언트를 다른 클라이언트와 구별하여,

  각각의 클라이언트에 대한 정보를 지속적으로 관리하는 상태



메소드


설명


String getld()


해당 세션의 세션 ID를 반환합니다.


long getCreationTime()


세션의 생성된 시간을 반환합니다.


long getLastAccessedTime()


클라이언트 요청이 마지막으로 시도된 시간을 반환합니다.


void setMaxlnactiveInterval(time)


세션을 유지할 시간을 초단위로 설정합니다. 


int getMaxlnactiveInterval()


string을 브라우저에 출력합니다.


boolean isNew()


클라이언트 세션 ID를 할당하지 않은 경우 true 값을 반환합니다. 


void invalidate()


해당 세션을 종료 시킵니다. 



-예제 및 출력결과-

1
2
3
4
5
6
7
8
9
10
11
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR" />
</head>
<h1>Session Example1</h1>
<form method="post" action="session1.jsp">
    아이디 : <input name="id">
    <p />
    비밀번호 : <input type="password" name="pwd">
    <p />
    <input type="submit" value="로그인">
</form>
cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    session="true"%>
 
<%
    request.setCharacterEncoding("EUC-KR");
 
    String id = request.getParameter("id");
    String pwd = request.getParameter("pwd");
    
    session.setAttribute("idKey",id); //입력을 받은 id값을 idkey로 session객체에 연결시도한다.
    session.setMaxInactiveInterval(60*5); //session 객체의 연결 시간을 5(60*5)분으로 설정하고 있다.
%>
<h1>Session Example1</h1>
<form method="post" action="session1_1.jsp">
    1. 가장 좋아하는 계절은?<br /> <input type="radio" name="season" value="봄">
    <input type="radio" name="season" value="여름">여름 <input
        type="radio" name="season" value="가을">가을 <input type="radio"
        name="season" value="겨울">겨울
    <p />
 
    2. 가장 좋아하는 과일은?<br /> <input type="radio" name="fruit"
        value="watermelon"> 수박 <input type="radio" name="fruit"
        value="melon"> 멜론 <input type="radio" name="fruit"
        value="apple"> 사과 <input type="radio" name="fruit"
        value="orange"> 오렌지
    <p />
    <input type="submit" value="결과보기">
</form>
 
 
 
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<%@ page language="java" contentType="text/html; charset=EUC-KR"%>
<%
    request.setCharacterEncoding("EUC-KR");
    String season = request.getParameter("season");
    String fruit = request.getParameter("fruit");
    String id = (String) session.getAttribute("idKey"); //session1.jsp 파일에 있는 객체들을 가져오고 있다.
 
    String sessionId = session.getId(); //세션의 Id를 얻어서 반환한다.
 
    int intervalTime = session.getMaxInactiveInterval(); //setMaxInactiveInterval(time)로 지정된 값을 반환합니다.
 
    if (id != null) {
%>
<h1>Session Example1</h1>
<b><%=id%></b>
님이 좋아하시는 계절과 과일은
<p />
<b><%=season%></b>
<b><%=fruit%></b>
입니다.
<p />
세션 ID :
<%=sessionId%><p />
세션 유지 시간 :
<%=intervalTime%>
<p />
<%
    session.invalidate();
    } else {
        out.println("세션의 시간이 경과를 하였거나 다른 이유로 연결을 할 수가 없습니다.");
        out.println("session의 시간 경과 또는 다른 이유로 session 객체의 연결이 종료 되었습니다.");
    }
%>
cs






-application-


application 객체는 서블릿 또는 어플리케이션 외부 환경 정보를 나타내는 내부 객체 입니다.

application 객체를 통해서 어플리케이션이 실행되는 서버의 정보와 서버 측 자원에 대한 정보를 얻어내거나

어플리케이션이 실행하고 있는 동안에 발생할 수 있는 이벤트 로그와 관련된 기능들을 제공합니다.

application 객체는 javax.servlet.ServletContext 객체 타입으로 제공을 합니다.



메소드


설명


String getServerInfo( )


서블릿 컨테이너의 이름과 버전을 반환합니다.


String getMimeType(fileName)


지정한 파일의 MIME 타입을 반환합니다.


String getRealPath(url)


URL를 로컬 파일 시스템으로 변경하여 반환합니다.


void log(message)


로그 파일에 message를 기록합니다.




-pageContext-


현재 jsp 페이지의 Context를 나타내며, pageContext 내부 객체를 통해서 다른 내부 객체에 접근할 수가 있습니다.

예를 들어 out 내부 객체를 구하고자 할 경우의 코드는 다음과 같습니다.


 

  JspWriter pageOut = pageContext.getOut();





-page 내부 객체-


jsp 페이지 그 자체를 나타내는 객체입니다. 그래서 jsp 페이지 내에서 page 객체는 this 키워드로 자기 자신을

참조할 수가 있습니다. 그리고 page 객체는 javax.servlet.jsp.HttpJspPage 클래스 타입으로 제공되는 JSP 내부 객체입니다.




-예제 및 출력 결과-


1
2
3
4
5
6
7
<%@ page info="JSPStudy.co.kr" contentType="text/html; charset=EUC-KR"%>
<%
    String pageInfo = this.getServletInfo(); //page 지시자의 info 속성을 반환한다.
%>
<h1>Page Example1</h1>
현재 페이지의 info값 :
<%=pageInfo%>
cs



-config-


config 객체는 javax.servlet.ServletConfig 클래스 타입의 내부 객체 입니다.

ServletConfig는 Servlet에게 Servlet를 초기화하는 동안 참조해야 할 정보를 전해 주는 역할을 합니다.

다시 설명하면 서블릿이 초기화 될 때 참조해야 할 다른 여러 정보를 가지고 있다가 전해 준다고 생각합니다.




-exception 내부 객체-


jsp 페이지에서 발생한 예외를 처리하는 페이지를 지정한 경우 에러 페이지에 전달되는 예외 객체입니다.

page 지시자의 isErrorPage 속성을 "true" 로 지정한 jsp 페이지에서만 사용 가능한 내부 객체 입니다.

그리고 exception 객체는 java.lang.Throwable 클래스 타입으로 제공되는 JSP 내부 객체 입니다.




메소드

 

설명


String getMessage( )


에러 메시지를 반환합니다.


String toString( )


에러 실체의 클래스명과 에러 메시지를를 반환합니다.



-예제 및 출력결과-


1
2
3
4
5
6
7
8
9
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    errorPage="exception2.jsp"%>
<%
    int one = 1;
    int zero = 0;
%>
<h1>Exception Example1</h1>
one / zero =
<%=one/zero%><p /> //0을 1로 나누었기 때문에 예외가 발생Colored by Color Scripter
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    isErrorPage="true"%>
 
<%
    String message = exception.getMessage();
    String objectMessage = exception.toString(); //예외가 발생한 페이지의 예외 메시지를 반환하였습니다.
                                                    //예외가 발생한 페이지의 에러 실체의 클래스명과 예외 메시지를 반환하였습니다.
%>
<h1>Exception Example1</h1>
에러 메시지 :
<b><%=message%></b>
<p />
에러 실체의 클래스명과 에러 메시지 :
<b><%=objectMessage%></b>
<p />
 
cs



728x90
반응형
: