위로
아래
내장 객체
내장 객체 (implicit Object)
- 선언하거나 생성하지 않아도 사용 가능.
- JSP가 실행되어 자바(서블릿) 파일로 컴파일될 때, 컨테이너가 자동으로 내장 객체를 생성.
- 컨테이너가 미리 선언해놓은 참조 변수를 이용
- 표현문과 스크립틀릿에서 사용
- 선언문에서는 매개변수로 전달 받아서는 사용 가능
내장 객체 목록
request // 클라이언트 요청 정보 저장 //javax.servlet.http.HttpServletRequest
response // 클라이언트 요청에 대한 응답 정보 저장 //javax.servlet.http.HttpServletResponse
out // JSP 페이지에 출력할 내용을 담는 출력 스트림 //javax.servlet.jsp.JspWriter
session // 웹 브라우저 정보를 유지하기 위한 세션 정보 저장 //javax.servlet.http.HttpSession
application // 웹 애플리케이션 관련 컨텍스트 정보 저장 //javax.servlet.ServletContext
pageContext // JSP 페이지에 대한 정보 저장 //javax.servlet.jsp.PageContext
page // JSP 페이지를 구현한 자바 클래스의 인스턴스 //java.lang.Object
config // JSP 페이지에 대한 설정 정보 저장 //java.servlet.ServletConfig
exception // 예외가 발생한 경우 사용 //java.lang.Throwable
request 객체
request
- 클라이언트가 전송한 요청 정보를 담고 있는 객체
- 클라이언트가 웹 브라우저를 통해 서버에 요청
- 요청 시 명시 가능한 것들 (Get or Post 타입 종류, 요청 URL, 포트 번호, 쿼리스트링)
- 하는 일
- 클라이언트와 서버에 대한 정보 읽기
- 클라이언트가 전송한 요청 매개변수에 대한 정보 읽기
- 요청 헤더 및 쿠키 정보 읽기
Get 방식
<a href="./RequestWebInfo.jsp?eng=Hello&han=안녕">Get 방식 전송</a>
- 전송할 데이터를 URL 뒤에 문자열 형태(쿼리스트링)으로 붙여서 전송하는 방식
- 쿼리스트링(query string) : URL 뒤에 "?키 = 값&키 = 값" 형태로 붙는 정보
- 주소와 데이터가 모두 노출
- 다양한 방식으로 보낼 수 있다 (<a>, <form>, 직접 링크 걸기 등)
- 데이터 조회용 (SQL : SELECT)
Post 방식
<form action="RequestWebInfo.jsp" method = "post">
<input type="text" name = "eng" value = "Bye"><br>
<input type="text" nema = "han" value = "잘 가"><br>
<input type="submit" value = "Post 방식 전송">
</form>
- 주소만 노출, 데이터는 숨김
- type 속성에 따라 매개변수를 읽어오는 방식이 조금씩 다르다
- <form>을 이용해 submit 하는 것이 일반적이다 (자바스크립트를 이용하면 <a>로도 post 방식을 쓸 수 있다)
- 데이터 수정용 (SQL : INSERT, UPDATE, DELETE)
정보 읽기
데이터 전송 방식
<%=request.getMethod()%>
URL
<%=request.getRequestURL()%>
URI
<%=request.getRequestURI()%>
프로토콜
<%=request.getProtocol()%>
서버명
<%=request.getServerName()%>
서버 포트
<%=request.getServerPort()%>
클라이언트 IP 주소
<%=request.getRemoteAddr()%>
쿼리스트링
<%=request.getQueryString()%>
전송된 값1
<%=request.getParameter("eng")%>
예시
더보기
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>내장 객체 - request</title>
</head>
<body>
<h2>1. 클라이언트와 서버의 환경정보 읽기</h2>
<a href="./RequestWebInfo.jsp?eng=Hello&han=안녕">Get 방식 전송</a>
<form action="RequestWebInfo.jsp" method = "post">
<input type="text" name = "eng" value = "Bye"><br>
<input type="text" nema = "han" value = "잘 가"><br>
<input type="submit" value = "Post 방식 전송">
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>내장 객체 - request</title>
</head>
<body>
<h2>1. 클라이언트와 서버의 환경정보 읽기</h2>
<ul>
<li>데이터 전송 방식<%=request.getMethod()%></li>
<li>URL <%=request.getRequestURL()%></li>
<li>URI <%=request.getRequestURI()%></li>
<li>프로토콜 <%=request.getProtocol()%></li>
<li>서버명 <%=request.getServerName()%></li>
<li>서버 포트 <%=request.getServerPort()%></li>
<li>클라이언트 IP 주소 <%=request.getRemoteAddr()%></li>
<li>쿼리스트링 <%=request.getQueryString()%></li>
<li>전송된 값1 <%=request.getParameter("eng")%></li>
<li>전송된 값2 <%=request.getParameter("han")%></li>
</ul>
</body>
</html>
request : input 매개변수 읽기
목록
<%
// 한글 안 깨지도록 인코딩
request.setCharacterEncoding("UTF-8");
// 매개변수가 하나일 때 사용 (text, radiom password 등)
String id = request.getParameter("id");
// 매개변수가 여러개 일 때 사용, 배열로 받기 (checkbox 등)
String[] favo = request.getParameterValues("favo");
// textarea로 줄 글 받아들일 때 사용
String info = request.getParameter("intro").replace("\r\n","<br/>");
%>
예시
더보기
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>내장 객체 - request</title>
</head>
<body>
<h2>클라이언트의 요청 매개변수 읽기</h2>
<form action="RequestParameter.jsp" method="post">
아이디 : <input type="text" name = "id" value = ""><br>
성별 : <input type="radio" name = "sex" value = "man">남자
<input type="radio" name = "sex" value = "woman" checked>여자
<br><br>
관심사항 : <input type="checkbox" name = "favo" value="eco">경제
<input type="checkbox" name = "favo" value="pol">정치
<input type="checkbox" name = "favo" value="ent">연예
<br><br>
<textarea name="intro" rows="4" cols="30"></textarea>
<br>
<input type="submit" value="전송하기">
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>내장 객체 - request</title>
</head>
<body>
<%
request.setCharacterEncoding("UTF-8");
String id = request.getParameter("id");
String sex = request.getParameter("sex");
String[] favo = request.getParameterValues("favo");
String favoStr = "";
if(favo != null){
for (int i=0;i<favo.length;i++){
favoStr += favo[i]+" ";
}
}
String info = request.getParameter("intro").replace("\r\n","<br/>");
%>
<ul>
<li>아이디 : <%=id%></li>
<li>성별 : <%=sex%></li>
<li>관심사항 : <%=favoStr%></li>
<li>자기소개 : <%=info%></li>
</ul>
</body>
</html>
request : header 정보 읽기
목록
// 선언문으로 Enumeration를 import 해주기
<%@ page import = "java.util.Enumeration"%>
<%
// 모든 요청 헤더의 이름을 반환 (반환 타입 Enumeration)
Enumeration headers = request.getHeaderNames();
// 출력할 요청 헤더명이 더 있는지 확인
headers.hasMoreElements();
// 헤더명 받아오기
String headerName = (String)headers.nextElement();
// 헤더값 받아오기
String headerValue = request.getHeader(headerName);
%>
예시
더보기
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>내장 객체 - request</title>
</head>
<body>
<h2>HTTP 요청 헤더 정보 읽기</h2>
<a href="RequestHeader.jsp">요청 헤더 정보 읽기</a>
</body>
</html>
<%@ page import = "java.util.Enumeration"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>내장 객체 - request</title>
</head>
<body>
<h2>요청 헤더 정보 출력하기</h2>
<%
Enumeration headers = request.getHeaderNames();
while (headers.hasMoreElements()){
String headerName = (String)headers.nextElement();
String headerValue = request.getHeader(headerName);
out.print("헤더명 : "+ headerName + ", 헤더값 : " + headerValue + "<br>");
}
%>
</body>
</html>
user-agent : 웹 브라우저의 종류
referer : 웹을 서핑하면서 링크를 통해 다른 사이트로 방문 시 남는 흔적 (어떤 경로로 접속했는지 확인 가능)
cookie : 쿠키
response 객체
response
- 요청에 대한 응답을 웹 브라우저로 보내주는 역할
- 리다이렉트(redirect) : 페이지 이동
- HTTP 헤더에 응답 추가
목록
// 응답 페이지로 이동
response.sendRedirect("ResponseWelcome.jsp")
예시
더보기
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>내장 객체 - response</title>
</head>
<body>
<%
String loginErr = request.getParameter("loginErr");
if(loginErr!=null) out.print("로그인 실패");
%>
<form action="./ResponseLogin.jsp" method="post">
아이디 : <input type="text" name="user_id"><br>
비밀번호 : <input type="password" name="user_pwd"><br>
<input type="submit" value="로그인">
</form>
<h2>HTTP 응 헤더 설정</h2>
<form action=" " method="get">
날짜 형식 : <input type="text" name="daa_date" value="2021-10-25 09:00"><br>
숫자 형식 : <input type="text" name="add_int" value="8282"><br>
문자 형식 : <input type="text" name="add_str" value="홍길동"><br>
<input type="submit" value="응답 헤더 설정 & 출력">
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>내장 객체 - response</title>
</head>
<body>
<%
String userId = request.getParameter("user_id");
String userPw = request.getParameter("user_pwd");
if(userId.equalsIgnoreCase("must") && userPw.equalsIgnoreCase("1234")){
response.sendRedirect("ResponseWelcome.jsp");
} else {
request.getRequestDispatcher("ResponseMain.jsp?loginErr=1")
.forward(request, response);
}
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>내장 객체 - response</title>
</head>
<body>
<h2>로그인 성공</h2>
</body>
</html>
예시2
더보기
<!-- 로그인 페이지 -->
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<form method="get" action="Response01Process.jsp">
<p>
아이디 : <input type="text" name="id">
비밀번호 : <input type="password" name="passwd">
<input type="submit" value="전송">
</p>
</form>
</body>
</html>
<!-- 로그인 정보 페이지 -->
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
String id = request.getParameter("id");
String passwd = request.getParameter("passwd");
if(id.equals("관리자") && passwd.equals("1234")){
response.sendRedirect("Response01Success.jsp");
} else {
response.sendRedirect("Response01Failed.jsp");
}
%>
</body>
</html>
<!-- 로그인 성공 페이지 -->
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
성공
</body>
</html>
<!-- 로그인 실패 -->
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
실패.
</body>
</html>