기본 객체(implicit object)


웹 프로그래밍에 필요한 기능을 제공. JSP에서 별도 선언 없이 사용 가능

주요 기본 객체
(1) request : 요청 정보를 구할 때 사용
(2) response : 응답과 관련된 설정(헤더, 쿠키 등)시 사용
(3) out : 직접 응답을 출력할 때 사용
(4) session : 세션 관리에 사용

-----------------------------------------------------------------------------------------------------------------------------------

(1) request 기본 객체

웹 브라우저가 웹 서버에 전송한 요청 관련 정보 제공


주요 기능

- 클라이언트(웹 브라우저)와 관련된 정보 읽기 기능

- 서버와 관련된 정보 읽기 기능

- 클라이언트가 전송한 요청 파라미터 읽기 기능

- 클라이언트가 전송한 요청 헤더 읽기 기능

- 클라이언트가 전송한 쿠키 읽기 기능

- 속성 처리 기능



request 기본 객체의 클라이언트 및 서버 정보 관련 메서드


getRemoteAddr() : 웹 서버에 연결한 클라이언트의 IP 주소를 구한다. 게시판이나 방명록 등에서 글 작성자의 IP 주소가 자동으로 입력되기도 하는데, 이때 입력되는 IP 주소가 바로 이 메서드를 사용하여 구한 것이다.

getContentLength() : 클라이언트가 전송한 요청 정보의 길이를 구한다. 전송된 데이터의 길이를 알 수 없는 경우 -1을 리턴한다.

getCharacterEncoding() : 클라이언트가 요청 정보를 전송할 때 사용한 캐릭터의 인코딩을 구한다.

getContentType() : 클라이언트가 요청 정보를 전송할 때 사용한 컨텐트의 타입을 구한다.

getProtocol() : 클라이언트가 요청한 프로토콜을 구한다.

getMethod() : 웹 브라우저가 정보를 전송할 때 사용한 방식을 구한다.

getRequestURI() : 웹 브라우저가 요청한 URL에서 경로를 구한다. (폴더명~파일명까지)

getContextPath() : JSP 페이지가 속한 프로젝트명(폴더명) 반환

getServerName() : 연결할 때 사용한 서버 이름을 구한다.

getServerPort() : 서버가 실행 중인 포트 번호를 구한다.




예제) 클라이언트와 서버 정보를 보여주는 JSP 파일

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>클라이언트 및 서버 정보</title>
</head>
<body>
<h1>클라이언트 및 서버 정보 관련 메서드</h1>
<ol>
<li>클라이언트 IP = <%= request.getRemoteAddr() %></li>
<li>요청정보 길이 = <%= request.getContentLength() %></li>
<li>요청정보 인코딩 = <%= request.getCharacterEncoding() %></li>
<li>요청정보 컨텐츠 타입 = <%= request.getContentType() %></li>
<li>요청정보 프로토콜 = <%= request.getProtocol() %></li>
<li>요청정보 전송방식 = <%= request.getMethod() %></li>
<li>요청정보 URI = <%= request.getRequestURI() %></li>
<li>컨텍스트 경로 = <%= request.getContextPath() %></li>
<li>서버이름 = <%= request.getServerName() %></li>
</ul>
</body>
</html>

결과)
  1. 클라이언트 IP = 0:0:0:0:0:0:0:1
  2. 요청정보 길이 = -1
  3. 요청정보 인코딩 = null
  4. 요청정보 컨텐츠 타입 = null
  5. 요청정보 프로토콜 = HTTP/1.1
  6. 요청정보 전송방식 = GET
  7. 요청정보 URI = /chap02/requestinfo.jsp
  8. 컨텍스트 경로 = /chap02
  9. 서버이름 = localhost


request 기본 객체 - 파라미터 읽기 메서드


getParameter(String name) : 이름이 name인 파라미터의 값을 구한다. 존재하지 않을 경우 null을 리턴한다.

getParameterValues(String name) : 이름이 name인 모든 파라미터의 값을 배열로 구한다. 존재하지 않을 경우 null을 리턴한다.

getParameterNames() : 웹 브라우저가 전송한 파라미터의 이름을 구한다.

getParameterMap() : 웹 브라우저가 전송한 파라미터의 맵을 구한다. 맵은 <파라미터 이름, 값> 쌍으로 구성된다.






GET 방식(METHOD)/POST 방식(METHOD)


파라미터를 전송하는 방식

GET : 쿼리문자열로 전송(길이 제한)

POST : 요청 몸체 데이터로 전송


<form action="formAction.jsp" method="get"> 

// form에 method를 get으로 하거나 post로 할 수 있다.

default는 get 방식. (전송시 위의 url에 쿼리문이 뒤에 붙는다.)

post 방식은 메시지 형태로 전송하므로 위의 url 뒤에 쿼리문자가 나오지 않는다.

로그인폼 등에서 아이디/비번 등 위에 노출되지 않게 post 방식으로 전송한다.



GET 방식 전송 예


GET /chap03/viewParameter.jsp?name=cbk&address=seoul HTTP/1.1

Host: localhost:8080

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; ...

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language: ko-kr,ko;q=0.8,en-us;q=0.5,en;q=0.3


POST 방식 전송 예


POST /chap03/viewParameter.jsp HTTP/1.1

Host: localhost:8080

User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; ko; rv:1.9.0.3) ...

...

Content-Type: application/x-www-form-urlencoded

Content-Length: 22


name=cbk&address=seoul




파라미터 값의 인코딩/디코딩






JSP에서 파라미터 로딩 시 인코딩 지정이 필요하다. (POST 방식)


<%

    request.setCharacterEncoding("UTF-8");

    String name = request.getParameter("name");

%>





GET 방식을 이용해서 파라미터 전송 방법


첫번째. <a> 태그의 링크에 쿼리 문자열 추가


- <a href=“viewParameter.jsp?name=홍길동&address=역삼동”>링크</a>



두번째. HTML 폼(form)의 method 속성 값을 “get”으로 지정해서 전송


<%@ page contentType = "text/html; charset=utf-8" %>

  . . .

<form action="viewParameter.jsp" method=“get">

<input type="text" name="name" size="10"> <br>

<input type="text" name="address" size="30"> <br>

<input type="submit" value="전송">

</form>


웹브라우저 주소에 직접 쿼리 문자열 포함한 URL 입력

- HTTP, URL, URI 등의 표준에는 get 방식으로 전달되는 파라미터 값을 인코딩 할 때 어떤 캐릭터 셋을 사용해야 하는지에 대한 규칙이 정해져 있지 않다.

- 톰캣은 기본적으로 ISO-8859-1 캐릭터 셋으로 파라미터 값을 읽어온다.

(톰캣 8.0부터는 기본적으로 UTF-8로 변경되었다.)




톰캣에서 GET 방식 파라미터를 위한 인코딩 처리


form을 불러올 때 문자 코드가 맞지 않으면 깨지는 문제가 있다.

post 방식의 경우 불러와서 처리할 jsp에 <%request.setCharacterEncoding("UTF-8");%>을 넣어주면 된다.

get 방식인 경우에는 다음과 같이 처리한다.


방법1 : Server.xml 파일 수정

<Connector>의 useBodyEncodingForURI 속성의 값을 true로 지정하면 된다.


server.xml 위치 : [톰캣설치디렉토리]/conf/server.xml



<Connector port=“8090” protocol=“HTTP/1.1”

                 connectionTimeout=“20000”

                 redirectPort=“8443”

                 useBodyEncodingForURI=“true” />


request.setCharacterEncoding(“utf-8”); 이 적용된다.



1) 이클립스 왼쪽 Servers에서 server.xml을 찾아 연다.





2) source를 눌러 Connector port 태그에  useBodyEncodingForURI=“true” 를 넣어준다.





방법2 : Server.xml 파일에서 <Connector>의 URIEncoding 속성의 값으로 원하는 캐릭터 셋으로 직접 지정


<Connector port=“8090” protocol=“HTTP/1.1”

                 connectionTimeout=“20000”

                 redirectPort=“8443”

                 URIEncoding=“utf-8” />


request.setCharacterEncoding(“utf-8”); 은 적용되지 않음





request 기본 객체 - 요청 헤더 정보 읽기

getHeader(String name) : 지정한 이름의 헤더 값을 구한다.
getHeaders(String name) : 지정한 이름의 헤더 목록을 구한다.
getHeaderNames() : 모든 헤더의 이름을 구한다.
getIntHeader(String name) : 지정한 헤더의 값을 정수 값으로 읽어 온다.
getDateHeader(String name) : 지정한 헤더의 값을 시간 값으로 읽어 온다.


-----------------------------------------------------------------------------------------------------------------------------------

(2) response 기본 객체

웹 브라우저에 전송하는 응답 정보 설정
주요 기능
- 헤더 정보 입력
- 리다이렉트 처리


response 기본 객체 - 헤더 설정 메서드

addDateHeader(String name, long date) : name 헤더에 date를 추가한다. date는 1970년 1월 1일 이후 흘러간 시간을 1/1000초 단위로 나타낸다.
addHeader(String name, String value) : name 헤더에 value를 값으로 추가한다.
addIntHeader(String name, int value) : name 헤더에 정수 값 value를 추가한다.
setDateHeader(String name, long date) : name 헤더의 값을 date로 지정한다. date는 1970년 1월 1일 이후 흘러간 시간을 1/1000초 단위로 나타낸다.
setHeader(String name, String value) : name 헤더의 값을 value로 지정한다.
setIntHeader(String name, int value) : name 헤더의 값을 정수 값 value로 지정한다.
containsHeader(String name) : 이름이 name인 헤더를 포함하고 있을 경우 true를 그렇지 않을 경우 false를 리턴한다.



웹 브라우저 캐시 제어


응답 헤더 입력


<%

    response.setHeader(“Pragma”, “No-cache”);

    response.setHeader(“Cache-Control”, “no-cache”);

    response.addHeader(“Cache-Control”, “no-store”);


    response.setDateHeader(“Expires”, 1L);

%>




리다이렉트(Redirect)


웹 서버가 웹 브라우저에게 특정 페이지로 이동하라고 웹 브라우저에 응답하는 기능.

ex) 로그인에 성공한 후 메인 페이지로 자동 이동 등

리다이렉트를 지시한 JSP 페이지가 있을 경우 웹 브라우저는 실질적으로 요청을 두 번 하게 됨.




response.sendRedirect(String location)로 구현


예제) 로그인 하면 index.jsp로 이동
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String id = request.getParameter("memberId");
if (id != null && id.equals("madvirus")) {
response.sendRedirect("/chap3/index.jsp");
} else {
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인에 실패</title>
</head>
<body>잘못된 아이디입니다.
</body>
</html>
<%
}
%>





JSP 주석


1) 자바의 주석 사용 1

<% // 자바의 주석 사용 %>


2) 자바의 주석 사용 2

<% 

/* 자바의 주석

여기까지 주석 */

%>


3) JSP 자체 주석

<%-- JSP 코드 자체 주석 --%>


4) 웹 주석

HTML : <!-- -->

CSS :  /* */

자바스크립트 :  자바와 동일



Posted by netyhobby
,