위로 아래

내장 객체

내장 객체 (implicit Object)

  1. 선언하거나 생성하지 않아도 사용 가능.
  2. JSP가 실행되어 자바(서블릿) 파일로 컴파일될 때, 컨테이너가 자동으로 내장 객체를 생성.
  3. 컨테이너가 미리 선언해놓은 참조 변수를 이용
  4. 표현문과 스크립틀릿에서 사용
  5. 선언문에서는 매개변수로 전달 받아서는 사용 가능

내장 객체 목록

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

  1. 클라이언트가 전송한 요청 정보를 담고 있는 객체
  2. 클라이언트가 웹 브라우저를 통해 서버에 요청
  3. 요청 시 명시 가능한 것들 (Get or Post 타입 종류, 요청 URL, 포트 번호, 쿼리스트링)
  4. 하는 일
    1. 클라이언트와 서버에 대한 정보 읽기
    2. 클라이언트가 전송한 요청 매개변수에 대한 정보 읽기
    3. 요청 헤더 및 쿠키 정보 읽기

 

Get 방식

<a href="./RequestWebInfo.jsp?eng=Hello&han=안녕">Get 방식 전송</a>
  1. 전송할 데이터를 URL 뒤에 문자열 형태(쿼리스트링)으로 붙여서 전송하는 방식
  2. 쿼리스트링(query string) : URL 뒤에 "?키 = 값&키 = 값" 형태로 붙는 정보
  3. 주소와 데이터가 모두 노출
  4. 다양한 방식으로 보낼 수 있다 (<a>, <form>, 직접 링크 걸기 등)
  5. 데이터 조회용 (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>
  1. 주소만 노출, 데이터는 숨김
  2. type 속성에 따라 매개변수를 읽어오는 방식이 조금씩 다르다
  3. <form>을 이용해 submit 하는 것이 일반적이다 (자바스크립트를 이용하면 <a>로도 post 방식을 쓸 수 있다)
  4. 데이터 수정용 (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

  1. 요청에 대한 응답을 웹 브라우저로 보내주는 역할
  2. 리다이렉트(redirect) : 페이지 이동
  3. 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>