티스토리 뷰
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
- improt
- Java
- html base tag
- html atrribute
- BAEKJOON
- html a tag
- html layout
- 스크립태그
- html input type
- initialized
- input type 종류
- 입력양식
- scanner
- JavaScript
- selcetor
- html
- CascadingStyleSheet
- empty-cell
- 외부구성요소
- 변수
- html pre
- 기본선택자
- text formatting
- border-spacing
- css
- caption-side
- 미디어 태그
- typeof
- ScriptTag
- A%B
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |