[JSP] 2.5 JSP 기본 객체 : request

2022. 4. 7. 13:14JAVA/Servlet&JSP

request 객체란 무엇인가?

  • JSP 페이지에서 가장 많이 사용되는 객체
  • 웹 브라우저가 웹 서버에 서비스를 요청할때 서버에 보내는 정보 객체

 

request 객체 기능

  • 클라이언트(웹 브라우저)와 관련된 정보 읽기 기능
  • 서버와 관련된 정보 읽기 기능
  • 클라이언트가 전송한 요청 파라미터 읽기 기능
  • 클라이언트가 전송한 요청 헤더 읽기 기능
  • 클라이언트가 전송한 쿠기 읽기 기능
  • 속성 처리 기능

1. 클라이언트 정보 및 서버 정보 읽기

request 기본 객체는 웹 브라우저, 즉 클라이언트가 전송한 정보 및 서버 정보를 구할 수 있는 메서드를 제공합니다.

 

메서드 리턴타입 설명
getRemoteAddr() String 웹 서버에 연결한 클라이언트의 IP 주소를 구함
getContentLength() long 클라이언트가 전송한 요청 정보의 길이를 구함
getCharacterEncoding() String 클라이언트가 요청 정보를 전송할 때 사용한 캐릭터의 인코딩을 구함
getContentType() String 클라이언트가 요청 정보를 전송할때 사용한 컨텐츠의 타입을 구함
getProtocol() String 클라이언트가 요청한 프로토콜을 구함
getMethod() String 웹 브라우저가 정보를 전송할 때 사용한 방식을 구함
getRequestURL() String 웹 브라우저가 요청한 URL의 경로를 구함
getContextPath() String JSP 페이지가 속한 웹 어플리케이션의 컨텍스트 경로를 구함
getServerName() String 연결할 때 사용한 서버 이름을 구함
getServerPort() int 서버가 실행중인 포트번호를 구함

 

<%@ 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>
클라이언트 IP = <%= request.getRemoteAddr() %><br>
요청정보길이 = <%= request.getContentLength() %><br>
요청정보 인코딩 = <%= request.getCharacterEncoding() %><br>
요청정보 컨텐트 타입 = <%= request.getContentType() %><br>
요청정보 프로토콜 = <%= request.getProtocol() %><br>
요청정보 전송 방식 = <%= request.getMethod() %><br>
요청 URL = <%= request.getRequestURI() %><br>
컨텍스트 경로 = <%= request.getContextPath() %><br>
서버이름 = <%= request.getServerName() %><br>
서버포트 = <%= request.getServerPort() %><br>
</body>
</html>

2. HTML 폼과 요청 파라미터의 처리

폼 데이터를 웹 서버로 전송하는 과정

웹 브라우저는 폼에 입력한 정보를 파라미터로 전송합니다. request 기본 객체는 웹 브라우저가 전송한 파라미터를 읽어 올 수 있는 메서드를 제공합니다. 메서드는 다음과 같습니다.

메서드 리턴 타입 설명
getParameter(String name) String 이름이 name인 파라미터의 값을 구한다. 존재하지 않을 경우 null을 리턴
getParameterValues(String name) String[] 이름이 name인 모든 파라미터의 값을 배열로 구한다. 존재하지 않을 경우 null을 리턴한다.
getParameterNames() java.util.Enumeration 웹 브라우저가 전송한 파라미터의 이름을 구한다.
getParameterMap() java.util.Map 웹 브라우저가 전송한 파라미터의 맵을 구한다.

 

makeTestForm.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
폼에 데이터를 입력한 후 '전송' 버튼을 클릭하세요.
<form action="./13_viewParameter.jsp" method="post">	<!--입력한 데이터를 전달한 jsp페이지를 ./13_viewParameter.jsp로 지정한다. post 방식으로 데이터를 전송한다. -->
이름: <input type="text" name ="name" size="10"><br> 		<!--이름이 name인 요청 파라미터 입력 칸 생성 -->
주소: <input type="text" name="address" size="30"><br>	<!--이름이 address인 요청 파라미터 입력 칸 생성 -->
좋아하는 동물:
	<input type="checkbox" name="pet" value="dog">강아지
	<input type="checkbox" name="pet" value="cat">고양이
	<input type="checkbox" name="pet" value="pig">돼지
<br>
<input type="submit" value="전송">
</form>

</body>
</html>

 

viewParameter.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    <%@ page import="java.util.Enumeration" %>
    <%@ page import="java.util.Map" %>
    <%
    //요청 파라미터의 캐릭터 인코딩을 한글로 지정한다. 이렇게 해야 한글을 올바르게 처리할 수 있다.
    	request.setCharacterEncoding("UTF-8");
    %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>요청 파라미터 출력</title>
</head>
<body>
<!-- request.getParameter()메소드를 사용하여 name파라미터와 address파라미터의 값을 출력한다. -->
<b>request.getParameter() 메소드 사용</b><br>
name 파라미터 = <%=request.getParameter("name") %><br>
address 파라미터 = <%=request.getParameter("address") %><br>
<p>
<b>request.getParameterValues() 메소드 사용</b><br>
<%
/*
	request.getParameterVlues() 메소드는 String의 배열(String[])을 리턴한다.
	배열의 첫번째 원소를 사용할 때에는 배열변수[0]의 형태를 사용한다.
	배열 변수명을 values로 하였으므로, values[0], values[2]와 같이 파라미터값에 접근한다.
*/
	String[] values = request.getParameterValues("pet");
	if(values!=null)
	{
		for(int i=0;i<values.length;i++)
		{
			%>
			<%=values[i] %>
			<%
		}
	}
%>
<p>

<b>request.getParameterNames() 메소드 사용</b><br>
<%
/*
	파라미터의 이름을 출력한다.
	이 코드가 request.getParameterNames() 메소드를 사용하는 기본형태입니다.
*/
	Enumeration e = request.getParameterNames();
	while(e.hasMoreElements())
	{
		String name = (String)e.nextElement();
		%>
		<%=name %>
<%
	}
%>
<p>

<b>request.getParameterMap() 메소드 사용</b><br>
<%
/*
	request.getParameterMap()은 자바의 Map을 사용하여 파라미터 이름과 파라미터 값을 리턴한다.
	이 Map에는 <파라미터이름, 파라미터값 배열>이 쌍을 이루고 있다.
*/
	Map parameterMap = request.getParameterMap();
	String[] nameParam = (String[])parameterMap.get("name");
	if(nameParam!=null){
		%>
		name = <%= nameParam[0] %>
<%
	}
%>
</body>
</html>

GET 방식 전송과 POST 방식 전송

  • GET 방식
    • 요청 URL에 파라미터를 붙여서 전송하는 방식
    • viewParameter.jsp?이름1=값1&이름2=값2...&이름n=값n
    • 파라미터를 URL에 붙여서 전송하므로 HTTP 패킷의 헤더에 포함되어 서버에 요청한다.
    • 길이에 제한이 있기 때문에 데이터를 보내는 양에 한계가 있음
    • URL에 파라미터가 노출되기 때문에 보안에 취약함
  • POST 방식
    • URL에 파라미터를 붙여서 보내지 않고 HTTP 패킷의 BODY에 데이터를 넣어서 전송합니다.
    • 헤더 필드 중 BODY의 데이터를 설명하는 Content-Type이라는 헤더 필드가 들어가고 어떤 데이터 타입인지 명시합니다.
    • 컨텐츠 타입은 다음과 같습니다. 기본적으로 1번 컨텐츠 타입으로 셋팅됩니다.
      • 1번 컨텐츠 타입은 BODY에 key, value 방식으로 데이터를 넣습니다.
      • 2번 컨텐츠 타입은 BODY에 단순 txt를 넣습니다.
      • 3번 컨텐츠 타입은 파일전송시 사용하며 BODY의 데이터를 이진 데이터로 넣어서 전송합니다.
1. application/x-www-form-urlencoded
2. text/plain
3. multipart/form-data

 

3. 요청 헤더 정보의 처리

웹 브라우저는 HTTP 프로토콜에 따라서 요청 정보를 웹 서버에 전송합니다. HTTP 프로토콜은 헤더 정보에 부가적인 정보를 담도록 하고 있습니다. 예를 들어 웹 브라우저는 웹 브라우저의 종류에 대한 정보를 헤더에 담아서 전송합니다.

 

JSP의 request 기본 객체는 이러한 헤더 정보를 읽어 올 수 있는 기능을 제공합니다.

메서드 리턴 타입 설명
getHeader(String name) String 지정한 이름의 헤더 값을 구함
getHeaders(String name) java.util.Enumeration 지정한 이름의 헤더 목록을 구함
getHeaderNames() java.util.Enumeration 모든 헤더의 이름을 구함
getIntHeader() int 지정한 헤더의 값을 정수값으로 읽어옴
getDateHeader() long 지정한 헤더의 값을 시간값으로 읽어옴 (1997/01/01 기준, 1/1000초 단위)

 

<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
    <%@ page import="java.util.Enumeration" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
	Enumeration e = request.getHeaderNames();
	while(e.hasMoreElements())
	{
		String headerName = (String)e.nextElement();
		String headerValue = request.getHeader(headerName);
	%>
	<%= headerName %> = <%= headerValue %><br>
<%	
	}
%>
</body>
</html>

 

References

https://mommoo.tistory.com/60
JSP 2.0 프로그래밍 기초부터 중급까지