티스토리 뷰

수업/└JSP

[CH05]내장객체

onlyun 2022. 2. 14. 11:52

 

 

⁠1. 내장 객체(implicit object)

미리 정의된 객체 / import 필요없이 바로 사용 가능 / 선언이나 객체 생성없이 직접 호출해 사용 가능.

-JSP컨테이너가 관리. JSP페이지에서 사용할 수 있도록 JSP컨테이너에 미리 정의된 객체

-JSP페이지가 서블릿프로그램으로 번역될 때, JSP컨테이너가 자동으로 내장 객체를 멤버 변수, 메소드 매개변수 등의 각종 참조 변수(객체)로 포함.

-JSP페이지에 별도의 import문 없이 자유롭게 사용 가능.

-스크립틀릿 태그<% ... %>나 표현문 태그<%= ... %>에 선언하거나 객체를 생성하지 않고도 직접 호출하여 사용 가능.

 

(1) 내장객체 종류

웹브라우저 HTTP 요청 정보 또는 JSP페이지 요청 정보를 저장하는 내장 객체들

request response out session application
웹브라우저
HTTP 요청 정보
웹브라우저
HTTP 요청 응답 정보
JSP페이지에
출력 내용 정보
웹브라우저 정보
유지를 위한 세션 정보
웹 애플리케이션의
컨텍스트 정보
pageContext page config exception  
JSP페이지 정보 JSP페이지 구현한
자바 클래스(JSP페이지)
JSP페이지
설정 정보
JSP페이지
예외발생 처리
 

 

(2) 속성 처리 메소드 종류

내장 객체가 존재하는 동안 JSP페이지 사이에서 정보 주고받거나 공유하는데 사용.

request, session, application, pageContext

getAttributeNames() getAttributes(String name)
해당 객체의 모든 속성 이름 가져오기
(pageContext는 이 메소드 사용 불가)
해당 내장 객체의 속성 이름이
name인 속성값을 가져옴
setAttribute(String name, Object value) removeAttribute(String name)
해당 내장 객체의 속성 이름이
name인 속성값을 value로 저장
해당 내장 객체의 속성 이름이
name인 속성값을 삭제

└괄호 안의 내용은 쌍따옴표" "를 사용해 입력


2. 내장객체 request

웹브라우저에서 서버의 JSP페이지로 전달하는 정보 저장. 요청 파라미터

폼 페이지로부터 입력된 데이터를 전달하는 요청 파라미터 값을 JSP페이지로 가져옴.

<name = value>형식으로 웹 브라우저에서 서버의 JSP페이지로 전송

<p>ID : <input type="text" name="id"></p>

(*요청 파라미터 이름(name) : <input> 태그의 name. 식별값)

(*요청 파라미터 값(value) : <input> 태그 name이 id인 입력폼에 입력된 값)

 

(1-1) 요청 파라미터 메소드 종류

getParameter(String name) getParameterValues(String name)
요청 파라미터 이름이 name인 값을 전달받음.
값이 없다면 null 반환.
모든 요청 파라미터 이름이 name인 값을
배열 형태로 전달받음.
값이 없다면 null 반환
getParameterNames() getParameterMap()
모든 요청 파라미터의 이름과 값을
Enumeration 객체 타입으로 전달받음.
모든 요청 파라미터 이름과 값을
Map 객체 타입으로 전달받음
(Map 객체 타입 : 요청 파라미터 이름, 값)

└괄호 안의 내용은 쌍따옴표" "를 사용해 입력

<form action="process.jsp" method="post">
	<p>NAME : <input type="text" name="name"> </p>
    <input type="button" value="전송">
</form>

<!--값 가져오기-->
<%
	String name = request.getParameter("name");
%>

└"name"인 값을 가져와 String name에 대입. <input  name="name">

 

(1-2) request 예제

_예제) 입력받은 한글이 깨지지 않게 하는 것 ↓

request.setCharacterEncoding("utf-8"); <!--한글값을 받아오기 위해서 필요한 구문-->
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="process.jsp" method="post">
		<p> 이 름 : <input type="text" name="name">
		<input type="button" value="전송">
	</form>
</body>
</html>

-내용을 전송할 때, <input>의 name이 식별자로 사용. name값을 request로 받아와 출력함.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Implicit Object</title>
</head>
<body>
    <%
        request.setCharacterEncoding("utf-8"); //한글값을 받아오기 위해서 필요한 구문
        String name = request.getParameter("name");
    %>
    <p> 이름 : <%= name %>
</body>
</html>

문자열 변수 name의 값은 input태그에서 받아온다. 그때 식별자로 쓰이는 게 name="..."인데 값 설정을 제대로 안 해주면 값을 제대로 가져오지 못함.

<input type="text" name="name"> → String name = request.getParameter("name");

(*<form>의 method가 get 경우, 식별자와 속성값 전부 나옴. 쿼리스트링이라고 하며 물음표(?) 이후의 내용들.)

 

(1-2) 요청 HTTP 헤더 관련 메소드) 값을 가져옴

getHeader(String name) getHeaders(String name) getHeaderNames()
설정한 name의 헤더값 설정한 name의 헤더 목록값 모든 헤더의 이름
getIntHeader(String name) getDateHeader(String name) getCookies()
설정한 name의 헤더값을
정수로 가져옴
설정한 name의 헤더값을
시간값으로 가져옴
모든 쿠키값

└괄호 안의 내용은 쌍따옴표" "를 사용해 입력

 

#예제) 내장객체 Request : 요청 HTTP 헤더 정보값 출력

-request.getHeader()

<body>
    <%
        String hostValue = request.getHeader("host");
        String alValue = request.getHeader("accept-language");
    
        out.print("host : " + hostValue+"<br>");
        out.print("설정된 언어 : " +alValue);
    %>
</body>

└출력결과

host : localhost:8080
설정된 언어 : ko

 

#예제) 내장객체 Request로 모든 HTTP 헤더 정보값 출력

-getheaderNames()

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    <%@ page import="java.util.Enumeration" %> <!--Enumeration를 사용하기 위한 준비-->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <%
        Enumeration en = request.getHeaderNames(); <!--모든 헤더 이름-->
        while(en.hasMoreElements()){
            String headerName = (String)en.nextElement();
            String headerValue = request.getHeader(headerName);	
    %>
    <%= headerName %> : <%= headerValue %></br>
    <%
        }
    %>
</body>
</html>

-출력결과

accept : image/gif, image/jpeg, image/pjpeg, application/x-ms-application, application/xaml+xml, application/x-ms-xbap, */*
accept-language : ko
cache-control : no-cache
ua-cpu : AMD64
accept-encoding : gzip, deflate
user-agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64; Trident/7.0; rv:11.0) like Gecko
host : localhost:8081
connection : Keep-Alive
cookie : JSESSIONID=1A8D2242F714F005EFA8E13D9761081B

└hasMoreElements()가 참일 동안 반복문 실행(다음에 값이 있는지 여부 체크 메소드)

└헤더의 모든 이름을 가져오고 이름이 있을 동안. 반복문 실행. 

Enumeration
객체들을 집합체 형태로 관리하게 해주는 인터페이스.
각각의 객체들을 한번에 하나씩 처리할 수 있게 해주는 메소드 제공.
논리적 커서가 존재해 커서를 이동하면서 데이터를 꺼내옴.
-boolean hasMoreElements() : 현재 커서 이후에 요소들이 있는지 여부 체크. 참/거짓 반환.
                                        맨처음 커서는 첫번째 요소 직전에 위치.
-E nextElement() : E 타입을 반환. 커서를 다음 요소로 이동시키고 가리키고 있는 요소 객체를 꺼내 반환.

 

(1-3) 웹 브라우저/서버 관련 메소드

웹 브라우저의 요청 및 서버 관련 정보 얻을 수 있음.

getRemoteAddr() getContentLength() getCharacterEncdoing() getContentType()
IP 주소 요청 파라미터 길이 문자 인코딩 콘텐츠 유형
getProtocol() getMethod() getRequestURI() getContextPath()
프로토콜 GET | POST URI 경로 JSP페이지의
콘텍스트 경로
getServerName() getServerPort() getQueryString()  
서버이름 서버 포트 번호 요청 파라미터 문자열 물음표(?) 이후 내용들

 

#예제) 웹브라우저 및 서버 정보 호출

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<p>클라이언트 ID : <%= request.getRemoteAddr() %></p> <!--웹브라우저 ip 주소-->
	<p>요청 정보 길이 : <%= request.getContentLength() %></p> <!--웹브 요청 파라미터 길이-->
	<p>요청 정보 인코딩 : <%= request.getCharacterEncoding() %></p> <!--웹브 문자 인코딩-->
	<p>요청 정보 콘텐츠 유형 : <%= request.getContentType()%></p> <!--웹브 콘텐츠 유형-->
	<p>요청 정보 프로토콜 : <%= request.getProtocol() %></p> <!--웹브 요청 프로토콜-->
	<p>요청 정보 전송방식 : <%= request.getMethod() %></p> <!--웹브 HTTP 요청 메소드-->
	<p>요청 URI : <%= request.getRequestURI() %></p> <!--웹브 요청한 URI 경로-->
	<p>콘텍스트 경로 : <%= request.getContextPath() %></p> <!--JSP페이지의 웹앱 콘텐스트 경로-->
	<p>서버 이름 : <%= request.getServerName() %></p> <!--서버 이름-->
	<p>서버 포트 : <%= request.getServerPort() %></p><!--서버 포트 번호-->
	<p>쿼리문 : <%= request.getQueryString() %></p> <!--웹브 전체 요청 파라미터 문자열-->
</body>
</html>

-출력 결과

클라이언트 ID : 0:0:0:0:0:0:0:1
요청 정보 길이 : -1
요청 정보 인코딩 : null
요청 정보 콘텐츠 유형 : null
요청 정보 프로토콜 : HTTP/1.1
요청 정보 전송방식 : GET
요청 URI : /test/05/request03.jsp
콘텍스트 경로 : /test
서버 이름 : localhost
서버 포트 : 8081
쿼리문 : null

쿼리스트링 : 웹브라우저의 전체 요청 파라미터 문자열(물음표(?) 다음 URL에 할당된 문자열을) 가져옴.

 

#예제) 입력폼을 이용해, 입력했을 때 각종 정보 호출

-입력 폼 페이지

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="process2.jsp" method="get">
		<p> 이 름 : <input type="text" name="name">
		<input type="button" value="전송">
	</form>
</body>
</html>

-입력받은 데이터를 처리하는 URL 페이지 설정 process2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Implicit Object</title>
</head>
<body>
    <%
        request.setCharacterEncoding("utf-8"); //한글값을 받아오기 위해서 필요한 구문
        String name = request.getParameter("name");
    %>
    <p> 이름 : <%= name %><br>
        요청 정보 길이 : <%= request.getContentLength() %><br>
        클라이언트 전송 방식 : <%= request.getMethod() %><br>
        요청 URI : <%=request.getRequestURI() %><br>
        서버 이름 : <%= request.getServerName() %><br>
        서버 포트 : <%= request.getServerPort() %><br>
</body>
</html>

-출력결과

이름 : sdf
요청 정보 길이 : -1
클라이언트 전송 방식 : GET
요청 URI : /test/05/process2.jsp
서버 이름 : localhost
서버 포트 : 8081

 


3. 내장객체 response 

사용자 요청을 처리한 결과를 서버 → 웹브라우저 전달. 전달 정보를 저장. 처리 결과 전달.

서버는 응답 헤더와 요청 처리 결과 데이터를 웹 브라우저로 보냄.

 

(1) sendRedirect() : 페이지 이동

response 내장 객체의 메소드. 사용자가 새로운 페이지를 요청할 때와 같이 페이지를 강제로 이동.

페이지 이동시 문자 인코딩을 알맞게 설정

<!--<body> 태그 내부 작성-->
<%
    response.sendRedirect("http://www.google.com");
%>

└실행하면 구글 사이트 열림.

*포워드(<jsp:forward >) 방식은 페이지 이동 여부를 알 수 없다.

 

#예제) 로그인 성공, 실패 작성

-로그인 폼 작성 페이지

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="resonse01_process.jsp" method="post">
		<p> ID : <input type="text" name="id"></p>
		<p> PW : <input type="text" name="pw"></p>
		<input type="submit" value="전송">
	</form>
</body>
</html>

-로그인 process

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <%
        //id와 비번이 맞는지 if문으로 처리
        request.setCharacterEncoding("utf-8");
        String userid = request.getParameter("id");
        String userpw = request.getParameter("pw");
		
        if(userid.equals("관리자") && userpw.equals("1234")){
            response.sendRedirect("./response01_success.jsp");
        }else{
            response.sendRedirect("./response01_failed.jsp");
        }
    %>
</body>
</html>

-로그인 성공 시 연동 페이지

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	로그인 성공
</body>
</html>

-로그인 실패 시 연동 페이지

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<p>로그인 실패</p>
	<p><a href="./response01.jsp">로그인</a></p>
</body>
</html>

 

(2) 응답 HTTP : 서버가 웹 브라우저에 응답하는 정보에 헤더를 추가하는 기능

(*헤더 정보 : 서버에 대한 정보 저장)

-관련 메소드

addHeader(name, value) addDateHeader(name, date) addIntHeader(name, int) addCookie(cookie)
name에 value값 추가 name에 날짜/시간 추가 name에 정수 추가 쿠키 추가
setHeader(name, value) setDateHeader(name, date) setIntHeader(name, int)  
name에 name값 설정 name에 날짜/시간 설정 name에 정수 설정  
containsHeader(name) getHeader(name)
HTTP 헤더에 설정한 name의 포함 여부 설정한 헤더 name값 가져오기

└괄호 안의 내용은 쌍따옴표" "를 사용해 입력

 

#예제) 5초마다 갱신되는 페이지 만들기

-setIntHeader()

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <p>이 페이지는 5초마다 '새로고침'됩니다.
    <%
        response.setIntHeader("Refresh", 5);
    %>
    <p><%= new java.util.Date() %></p> <!--현재 시각이 출력되면서 페이지 갱신시간 확인-->
</body>
</html>

 

(3) 응답 콘텐츠(Cntent)

웹브라우저에 응답하기 위한 MIME 유형(확장자)

getContentType() setContentType() getCharacterEncoding() setCharacterEncoding()
MIME 유형 가져옴 MIME 유형 설정 문자 인코딩 가져옴 문자 인코딩 설정
sendError(에러코드, 메세지) setStatus(응답코드_숫자)
응답할 오류코드와 오류 메세지 설정 응답할 HTTP 코드 설정
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <%
        response.sendError(404, "입력한 내용이 메시지로 출력됨.");
    %>
    <!-- 404 error는 페이지를 찾을 수 없을 때 발생 -->
</body>
</html>

 

 


4. 내장 객체 : out

웹 브라우저에 데이터를 전송하는 출력 스트림 객체

스크립틀릿 태그에 사용해 표현문 태그<%= %>와 같은 결과.

<%
    out.println("Hello JSP");
%>

<%= "Hello JSP" %>

(1) out 내장 객체 메소드

print(String str) println(String str) newLine()
str 출력 str 출력(줄바꿈 x) 줄바꿈 출력
getBufferSize() getRemaining() isAutoFlush()
출력 버퍼 크기 가져옴 남아 있는 출력 버퍼 크기 출력 버퍼 찼을 때 처리 방법
true - 자동 flush
flush() clear() clearBuffer()
출력 버퍼 내용을 전송 후
출력 버퍼 비우기
전송하지 않고 비우기
(flush 후 사용하면 예외 발생)
전송하지 않고 비우기
(flush 후 사용해도 예외 발생 x)

 

#예제) 오늘의 날짜 및 시간 출력

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <%
        out.println("오늘의 날짜 및 시간"+"<br>");
        out.println(java.util.Calendar.getInstance().getTime());
    %>
    <!-- getInstance() : 인스턴스 생성. -->
</body>
</html>

 

#예제) ID, PW 입력받고 출력

-입력  폼 페이지

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <%
        request.setCharacterEncoding("utf-8"); //한글 깨지지 말라고
        String userid = request.getParameter("id");
        String userpw = request.getParameter("pw");
    %>
	<p>ID : <% out.println("userid"); %></p>
	<p>PW : <% out.println("userpw"); %></p>
</body>
</html>

-프로세스

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="out02_process.jsp" method="post">
		<p> ID : <input type="text" name="id"></p>
		<p> PW : <input type="text" name="pw"></p>
		<p> <input type="submit" value="submit"></p>
	</form>
</body>
</html>

 

 

[연습문제]

1. 입력받은 ID, PW의 쿼리스트링 출력

2. 5초마다 갱신되는 페이지 설정. 그걸 확인할 수 있는 방법(Calendar)

3. 구글로 이동하도록 연결 - sendRedirect()

https://exploreryun.tistory.com/251?category=1002181

 

'수업 > └JSP' 카테고리의 다른 글

[CH07]파일업로드  (0) 2022.02.15
[CH06]폼 태그  (0) 2022.02.14
[00]주석  (0) 2022.02.13
[04]액션태그  (0) 2022.02.11
[CH03]디렉티브 태그  (0) 2022.02.11
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
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
글 보관함