[JSP] request 기본 객체
request 기본 객체
request는 웹 브라우저의 요청과 관련이 있다. 웹 브라우저는 웹 서버에 연결한 후 요청 정보를 전송하는데, 이 요청 정보를 제공하는 것이 바로 request 기본 객체이다.
- 클라이언트(웹 브라우저)와 관련된 정보 읽기 기능
- 서버와 관련된 정보 읽기 기능
- 클라이언트가 전송한 요청 파라미터 읽기 가능
- 클라이언트가 전송한 요청 헤더 읽기 기능
- 클라이언트가 전송한 쿠키 읽기 기능
- 속성 처리 기능
request 기본 객체가 제공하는 기능을 구분해보았다.
클라이언트 정보 및 서버 정보 읽기
request 기본 객체는 웹 브라우저, 즉 (클라이언트)가 전송한 정보와 서버 정보를 구할 수 있는 메서드를 제공하고 있다.
메서드 | 리턴 타입 | 설명 |
getRemoteAddr() | String | 웹 서버에 연결한 클라이언트의 IP 주소를 구한다. 게시판이나 방명록 등에서 글 작성자의 IP 주소가 자동으로 입력되기도 하는데, 이때 입력되는 IP 주소가 바로 이 메서드를 사용해서 구할 수 있다. |
getContentLength() | long | 클라이언트가 전송한 요청 정보의 길이를 구한다. 전송된 데이터의 길이를 알 수 없는 경우 -1을 리턴한다. |
getCharcterEncoding() | String | 클라이언트가 요청 정보를 전송할 때 사용한 캐릭터 인코딩을 구한다. |
getContentType() | String | 클라이언트가 요청 정보를 전송할 때 컨텐츠의 타입을 구한다. |
getProtocol() | String | 클라이언트가 요청한 프로토콜을 구한다. |
getMethod() | String | 웹 브라우저가 정보를 전송할 때 사용한 방식을 구한다. |
getRequestURl() | String | 웹 브라우저가 요청한 URL에서 경로를 구한다. |
getContextPath() | String | JSP 페이지가 속한 웹 어플리케이션의 컨텍스트 경로를 구한다. |
getSeverName() | String | 연결할 때 사용한 서버 이름을 구한다. |
getSeverPort() | int | 서버가 실행중인 포트 번호를 구한다. |
<%@ 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>
<b>클라이언트 IP= <%=request.getRemoteAddr()%><br></b>
<b>요청정보길이= <%=request.getContentLength()%><br></b>
<b>요청정보 인코딩= <%=request.getCharacterEncoding()%><br></b>
<b>요청정보 컨텐츠타입= <%=request.getContentType()%><br></b>
<b>요청정보 프로토콜= <%=request.getProtocol()%> <br></b>
<b>요청정보 전송방식= <%=request.getMethod()%><br></b>
<b>요청 URI= <%=request.getRequestURI()%><br></b>
<b>컨텍스트 경로= <%=request.getContextPath()%><br></b>
<b>서버이름=<%=request.getServerName()%><br></b>
<b>서버포트=<%=request.getServerPort()%><br></b>
</body>
</html>
http://localhost:8080/JSPTes/Hello.jsp
위 코드는
웹 브라우저에 입력한 URL로부터 추출된 것인 것을 확인할 수 있다.
위에 있는 URL을 이용해 request메서드를 설명하자면
localhost는 request.getSeverName()
8080은 request.getSeverPort()
/JSPTes/Hello.jsp는 request.getRequestURI()
이처럼 클라이언트 정보와 서버 정보를 읽을 때 URL을 사용한다.
요청 파라미터 처리
메서드 | 리턴타입 | 설명 |
getParameter(String name) | String | 이름이 name인 파라미터의 값을 구한다. 존재 하지 않을 경우 null을 리턴. |
getParameterValues(String name) | String[] | 이름이 name인 모든 파라미터의 값을 배열로 구한다. 존재하지 않을 경우 null을 리턴. |
getParameterNames() | java.util.Enumeration | 웹 브라우저가 전송한 파라미터의 이름 목록을 구한다. |
getParameterMap() | java.util.Map | 웹 브라우저가 전송한 파라미터의 맵을 구한다. 맵은 <파라미터 이름, 값> 쌍을 이룬다. |
요청 파라미터 관련 메서드
<%@ 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>
<form action="data.jsp" method="post" >
이름: <input type="text" size="15" name="name">
주소: <input type="text" size="30" name="address">
<br>
좋아하는 과일:
<input type="checkbox" name="fruit" value="apple">사과
<input type="checkbox" name="fruit" value="banana">바나나
<input type="checkbox" name="fruit" value="strawberry">딸기
<br>
<input type="submit" value="전송">
</form>
</body>
</html>
form 태그가 있는 jsp 파일
위 jsp 파일은 입력 요소들은 data.jsp 파일로 넘어가진다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" trimDirectiveWhitespaces="true"%>
<%@ page import="java.util.Enumeration" %>
<%@ page import="java.util.Map" %>
<%
request.setCharacterEncoding("utf-8");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>request test</title>
</head>
<body>
<b>request.getParameter() 사용</b><br>
name 파라미터: <%=request.getParameter("name") %><br>
fruit 파라미터: <%=request.getParameter("fruit") %><br>
<p>
<b>request.getParameterValues 사용</b><br>
<%
String[] values = request.getParameterValues("fruit");
if(values!=null){
for(int i=0;i<values.length;i++){
%>
<%= values[i] %>
<%
}
}
%>
<p>
<b>request.getParameterNames() 사용</b><br>
<%
Enumeration par = request.getParameterNames();
while (par.hasMoreElements()){
String str = (String)par.nextElement();
%> <%= str %><br>
<%
}
%>
<p>
<b>request.getParameterMap() 사용</b><br>
<%
Map parMap = request.getParameterMap();
String[] nameParStrings =(String[]) parMap.get("name");
if(nameParStrings!=null){
%> name = <%= nameParStrings[0] %>
<%
}
%>
</body>
</html>
<최범균 JSP 2.3 저서 참고 p72~80>
커버사진
https://www.flaticon.com/kr/free-icon/jsp-open-file-format-with-java-logo_28968
<a href="https://www.flaticon.com/kr/free-icons/" title="자바 아이콘">자바 아이콘 제작자: Freepik - Flaticon</a>