[목차]

  • 내장 객체란
  • request
  • response
  • out
  • application
  • exception

 

1. 내장 객체란

내장 객체는 JSP 전반에서 활용되고 있고

요청(request)과 응답(response), 출력(out), 세션(session), 어플리케이션 등이 있다.

 

보통 제품에 어떤 기능이 내장되어 있다고 하면 제품이 그 기능을 지니고 있다는 뜻으로  해석된다.

JSP의 내장 객체도 동일하다. 

 

클라이언트(Client)가 서버(Server)로 정보를 요청(request)할 때, Get 또는 Post 방식으로 요청하고

서버(Server)가 클라이언트(Client)에 응답(response)할 때 쿠키(Cookie) 등으로 응답한다.

 

다음으로 내장 객체의 특징을 알아보자.

  • 컨테이너(Container)가 미리 선언해놓은 참조 변수를 이용하여 사용한다.
  • 별도의 객체 생성 없이 각 내장 객체의 메소드를 사용할 수 있다.
  • JSP문서 만의 스크립틀릿(<% %>)과 표현식(<%= %>에서만 사용할 수 있다.
  • 선언부(<%! %>)에서 즉시 사용은 불가하고 매개변수로 전달받아 사용할수는 있다.

 

2. request 객체

JSP에서 가장 많이 사용되며 클라이언트, (여기서는 주로 웹 브라우저)가 전송한 요청 정보를 담고 있는 객체이다.

 

request의 역할로는

  • 클라이언트(Client / Web Browser)와 서버(Server)에 대한 정보 읽기
  • 클라이언트(Client / Web Browser)가 전송한 요청 매개변수에 대한 정보 읽기
  • 요청 헤더 및 쿠키 정보 읽기

가 있다.

 

예제를 통해 Get 방식 전송과 Post 방식 전송을 알아보자.

 

[예제1 - RequestMain.jsp / RequestWebInfo.jsp]

    (1) Get: <a>태그를 통해 주소창에 값을 띄워 전송하기

    (2) Post: <form> 태그를 통해 주소창에 값을 감춰 전송하기

 

//RequestMain.jsp
<!-- [예시(1)] -->
<!-- (1) Get 방식 전송-->
<h2>1. Get 방식으로 클라이언트 - 서버 환경정보 읽기</h2>
<a href="./RequestWebInfo.jsp?eng=Hello&han=안녕">Get 방식 전송</a>

<br/>
<!-- (2) Post 방식 전송 -->
<form action="RequestWebInfo.jsp" method="Post">
영어: <input type="text" name="eng" value="Bye"><br/>
한글: <input type="text" name="han" value="잘 가">
<input type="submit" value="Post 방식 전송">
</form>

//RequestWebInfo.jsp
<h2>클라이언트 - 서버 환경정보 읽기</h2>
<ul>
<li>데이터 전송 방식: <%=request.getMethod() %></li>		<!-- (1) -->
<li>URL: <%=request.getRequestURL() %></li>			<!-- (2) -->
<li>URI: <%=request.getRequestURI() %></li>			<!-- (3) -->
<li>프로토콜(Protocol): <%=request.getProtocol() %></li>
<li>서버명: <%=request.getServerName() %></li>
<li>서버 포트:<%=request.getServerPort() %> </li>
<li>클라이언트 IP 주소: <%=request.getRemoteAddr() %></li>	<!-- (4) -->
<li>쿼리스트링: <%=request.getQueryString() %></li>		<!-- (5) -->
<li>전송된 값(ENG): <%=request.getParameter("eng") %></li>	<!-- (6) -->
<li>전송된 값(HAN): <%=request.getParameter("han") %></li>	<!-- (6') -->
</ul>

RequestMain.jsp 실행 화면

두 가지 방식으로 전송할 수 있다.

하나는 링크로 되어 있는 'Get 방식 전송'으로 전송하는 것이고

다른 하나는 버튼으로 되어 있는 'Post 방식 전송'으로 전송하는 것이다.

 

우선 Get 방식 전송을 살펴보자.

RequestMain.jsp - Get 방식 전송

주목해야 할 부분은 두 군데다.

한 군데는 주소창에 eng와 han값이 들어가 있는 것을 보는 것이고

나머지는 데이터 전송 방식이 'Get'으로 되어 있는 것이다.

 

그렇다면 Post 방식은 어떻게 전송됐는지도 살펴보자.

RequestMain.jsp - Post 방식 전송 button

당연히 주소창과 데이터 전송방식만 비교할려고 했는데 생각해보니 인코딩을 해주지 않았다.

맨 마지막 줄에서 전송된 값의 한글 부분의 글자가 깨져 있는 것을 볼 수 있다.

 

이번 예제는 이대로 넘어가고 다음 파라미터를 받는 예제에서 인코딩을 하여 글자가 제대로 출력되는 것을 보도록 하자.

 


 

[예제2 - RequestMain2.jsp / RequestParameter.jsp]

    (1) <form>태그를 활용하여 여러 <input>값 및 <textarea>값 받기

    (2) 받은 값을 RequestParameter.jsp에서 출력하기

    (3) 주의사항: 한글 깨짐 방지

//RequestMain2.jsp (전송)
<!-- [예시(2)] -->
<h3>클라이언트의 요청 매개변수 읽기 -> RequestParameter</h3>
<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="checked">여자<br/>
관심사항: 
<input type="checkbox" name="favo" value="eco">경제
<input type="checkbox" name="favo" value="pol">정치
<input type="checkbox" name="favo" value="ent">연예<br/>
자기소개: 
<textarea name="intro" cols="30" rows="4"></textarea>
<br/>
<input type="submit" value="전송하기">
</form>

//RequestParameter.jsp (출력)
<%
//인코딩
request.setCharacterEncoding("UTF-8");

//매개변수 값 받기
String id = request.getParameter("id");			//(1)
String sex = request.getParameter("sex");

String[] favo = request.getParameterValues("favo");	//(2)
String favoStr = "";
if (favo != null) {					
	for(int i = 0; i <favo.length; i++) {
		favoStr += favo[i] + " ";
	}
}
							//(3)
String intro = request.getParameter("intro").replace("\r\n", "<br/>");
%>

<ul>
<li>아이디: <%=id %></li>
<li>성별: <%=sex %></li>
<li>관심사항: <%=favoStr %></li>
<li>자기소개: <%=intro %></li>
</ul>

RequestMain2.jsp 실행화면 및 값 넣기
RequestMain2.jsp - 값 넣기 - 전송하기 - RequestParameter.jsp - 입력된 값 보기

 

부가 설명

(1) String xxx = request.getParameter("xxx name값");

전송되는 값이 하나일 경우 getParameter() 메소드로 받을 수 있으며 

주로 <input type>의 속성이 text / radio / password인 경우 사용된다.

checkbox인 경우라도 선택값이 하나라면 getParameter()로 받을 수 있다.

 

(2) String[] favo = request.getParameterValues("checkbox name값");

하지만 checkbox를 쓰는 이유는 여러 값을 선택하기 위해서이다.

그러므로 2개의 값이 선택되어도 반환받을 수 있도록 getParameterValues()를 사용해준다.

또한 값이 2개 이상이므로 String 배열로 반환받고 for 문을 사용하여 배열에 담긴 값들을 문자열로 합쳐준다.

 

(3) String intro = request.getParameter("intro").replace("\r\n", "<br/>");

<textarea>태그는 텍스트를 여러 줄 입력할 수 있다.

또한 출력할 때 enter키를 <br> 태그로 변환해야 줄바꿈이 제대로 반영된다. 

enter키는 특수기호로 \r\n로 나타낼 수 있다.

 


[예제3 - RequestMain3.jsp / RequestHeader.jsp]

    (1) 기존에 듣던 수업에서도 해보지 못한 거라 교재를 그대로 따라간다.

    (2) 일단 설명을 적는다. 

 

RequestMain3.jsp 실행 화면
RequestMain3.jsp - '요청 헤더 정보 읽기' - RequestHeader.jsp

 

(1) 7번째 헤더명: user-agent

웹 브라우저의 종류를 알 수 있다.

크롬, 사파리 등 다른 브라우저에서 테스트 해 보면 다른 결과가 출력된다고 한다.

 

(2) 밑에서 4번째 헤더명: referer

referer는 웹 서핑을 하면서 링크를 통해 다른 사이트로 방문 시 남는 흔적을 말한다.

RequestHeader를 직접 실행하면 referer는 출력되지 않는다.

referer는 웹 사이트를 방문한 사람이 어떤 경로로 접속했는지 알아볼 때 유용하다.

 

(3) 맨 아래 헤더명: cookie

요청 헤더를 통해 쿠키를 확인할 수 있다.

쿠키는 뒷부분에서 자세히 설명될 것이다.

 


 

지금까지 다양한 예제들을 살펴보았다. 

쪽수도 10쪽이 안되길래 쉽게 생각하고 작성하다 2시간 동안 작성하는 모습을 바라보고 겸손한 마음을 가지게 되었다.

 

안다고 생각했던 것도 나만의 언어와 문장으로 옮겨보려고 하니 헷갈리는 개념들이 있었다.

 

오늘 이 자료들을 통해 request 객체를 좀 더 자세히 알 수 있어서 의미있었다.

'ebook > jsp' 카테고리의 다른 글

[7] 내장 객체 - out  (0) 2022.05.27
[6] 내장 객체 - response  (0) 2022.05.25
[4] 스크립트 요소  (0) 2022.05.23
[3] 지시어  (0) 2022.05.21
[2] JSP란  (0) 2022.05.17

+ Recent posts