request
브라우저에 JSP 페이지로 전달되는 데이터의 묶음으로 HTTP 헤더와 HTTP 바디로 구성되어 있다.
JSP 컨테이너는 요청된 HTTP 메시지를 통해 HttpServletRequest 객체 타입의 request 객체명을 사용한다.
request 객체 요청 메서드
| 메서드 | 설명 |
| String getParameter(name) | name에 할당된 값을 반환하며 지정된 파라미터 값이 없으면 null 값을 반환 |
| String[] getParameterValues(name) | name의 모든 값을 String 배열로 반환 |
| Enumeration getParameterNames() | 요청에 사용된 모든 파라미터의 이름을 java.util.Enumeration 타입으로 반환 |
| void setCharacterEncoding(env) | post 방식으로 요청된 문자열의 character encoding을 설정 |
Enumeration 객체
java.util.Enumeration 인터페이스는 객체를 저장하는 객체로, 저장된 객체들을 모두 Object 타입으로 저장한다.
주로 사용하는 메서드는 다음과 같다.
- boolean hasMoreElements() : 더 이상의 객체가 있는지 없는지를 판단하여 객체가 있으면 true, 없으면 false 리턴
- Object nextElements() : 다음 객체를 가져오는 메서드로 이때 Object 타입으로 받아온 객체를 원래의 객체 형태로 형 변환하여 사용
request1.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>Request Example</h1>
<form method="post" action="request1.jsp">
성명 : <input name="name"><br/>
학번 : <input name="studentNum"><br/>
성별 : 남자 <input type="radio" name="gender" value="man" checked>
여자 <input type="radio" name="gender" value="woman"><br/>
전공 : <select name="major">
<option selected value="국문학과">국문학과</option>
<option value="영문학과">영문학과</option>
<option value="수학과">수학과</option>
<option value="정치학과">정치학과</option>
<option value="체육학과">체육학과</option>
</select><br/>
<input type="submit" value="보내기">
</form>
</body>
</html>
request1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
String studentNum = request.getParameter("studentNum");
String gender = request.getParameter("gender");
String major = request.getParameter("major");
if (gender.equals("man")){
gender = "남자";
} else {
gender = "여자";
}
%>
<h1>Request Example</h1>
성명 : <%=name%><p/>
학번 : <%=studentNum%><p/>
성별 : <%=gender%><p/>
학과 : <%=major%>
출력 결과


request 내부 객체의 클라이언트 정보 메서드
| 메서드 | 설명 |
| String getMethod() | 요청에 사용된 요청 방식(get, post, put)을 반환 |
| String getRequestURI() | 요청에 사용된 URL로 부터 URI를 반환 |
| String getQuertString() | 요청에 사용된 Query 문장을 반환 |
| String getRemoteHost() | 클라이언트의 호스트 이름을 반환 |
| String getRemoteAddr() | 클라이언트의 주소를 반환 |
| String getProtocol() | 사용 중인 프로토콜을 반환 |
| String getSeverName() | 서버의 도메인 이름을 반환 |
| int getServerPort() | 서버의 주소를 반환 |
| String getHeader(name) | HTTP 요청 헤더에 지정된 name의 값을 반환 |
URL와 URI의 차이점
- URL : 인터넷에서 접근 가능한 자원의 주소를 일관되게 표현할 수 있는 형식
- URI : 존재하는 자원을 식별하기 위한 일반적인 식별자를 규정
예시) http://jspstudy.co.kr/jspstudy/board/List.jsp?table=qnaboard
URL http://jspstudy.co.kr/jspstudy/board/List.jsp?table=qnaboard
URI /jspstudy/board/List.jsp?table=qnaboard
URI는 요청된 URL에서 http, 호스트명, 포트번호를 제외한 것이라고 생각하면 된다.
request2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String protocol = request.getProtocol();
String serverName = request.getServerName();
int serverPort = request.getServerPort();
String remoteAddr = request.getRemoteAddr();
String remoteHost = request.getRemoteHost();
String method = request.getMethod();
StringBuffer requestURL = request.getRequestURL();
String requestURI = request.getRequestURI();
String useBrowser = request.getHeader("User-Agent");
String fileType = request.getHeader("Accept");
%>
<h1>Request Example</h1>
프로토콜 : <%=protocol%><p/>
서버의 이름 : <%=serverName%><p/>
서버의 포트 번호 : <%=serverPort%><p/>
사용자 컴퓨터의 주소 : <%=remoteAddr%><p/>
사용자 컴퓨터의 이름 : <%=remoteHost%><p/>
사용 method : <%=method%><p/>
요청 경로(URL) : <%=requestURL%><p/>
요청 경로(URI) : <%=requestURI%><p/>
현재 사용하는 브라우저 : <%=useBrowser%><p/>
브라우저가 지원하는 file Type : <%=fileType%>
출력 결과

response
요청을 시도한 클라이언트로 전송할 응답을 나타내는 데이터의 묶음.
JSP 컨테이너는 요청된 HTTP 메시지를 통해 HttpServletResponse 객체 타입으로 사용되고 reponse 객체명으로 사용한다.
response 내부 객체 메서드
| 메서드 | 설명 |
| void setHeader(name, value) | 응답에 포함될 Header를 설정 |
| void setContentType(type) | 출력되는 페이지의 contentType을 설정 |
| String getCharacterEncoding() | 요청에 사용된 Query 문장을 반환 |
| void sendRedirect(url) | 지정된 URL로 요청을 재전송 |
response1.jsp
<h1>Response Example</h1>
<%
response.sendRedirect("response1_1.jsp");
%>
response1_1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
response.setHeader("Pragma", "no-cache");
if(request.getProtocol().equals("HTTP/1.1")){
response.setHeader("Cache-Control", "no-store");
}
%>
<h1>Response Example</h1>
http://localhost/myapp/ch07/response1.jsp가<p/>
http://localhost/myapp/ch07/response1_1.jsp로 변경이 되었습니다.
출력 결과

out
JSP 페이지의 결과를 클라이언트에 전송해 주는 출력 스트림을 나타내며 JSP 페이지가 클라이언트에게 보내는 모든 정보는 out 객체를 통해서 전달된다. out 객체는 java.io.Writer 클래스를 상속받은 javax.servlet.jsp.JspWriter 클래스 타입의 객체이며, out 객체명으로 사용한다.
<%
String name = "KOREA";
out.println(name);
%>
out 내부 객체 메서드
| 메서드 | 설명 |
| boolean isAutoFlush() | 출력 버퍼가 다 채워져 자동으로 flush 했을 경우는 true 반환, 그렇지 않은 경우는 false를 반환 |
| int getBufferSize() | 출력 버퍼의 전체 크기를 바이트 단위로 반환 |
| int getRemaining() | 출력 버퍼의 남은 양을 바이트 단위로 반환 |
| void clearBuffer() | 현재 출력 버퍼에 저장된 내용을 취소 |
| String println(string) | string을 브라우저에 출력 |
| void flush() | 현재 출력 버퍼의 내용을 flush 하여 클라이언트로 전송 |
| void close() | 출력 버퍼의 내용을 flush 하고 스트림을 닫음 |
<%=코드%>와 out.println(코드)의 차이점
JSP 페이지가 서블릿으로 변환될 때 <%=코드%> 부분을 out.println(코드)로 변환되어 실행된다.
즉 둘 다 브라우저에 출력시키는 똑같은 역할을 한다.
다만 JSP 페이지에서 개발자들에게 편의성을 제공하기 위해서 표현식이 만들어진 것이다.
out1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" buffer="5kb"%>
<%
int totalBuffer = out.getBufferSize();
int remainBuffer = out.getRemaining();
int useBuffer = totalBuffer - remainBuffer;
%>
<h1>Out Example</h1>
<b>현재 페이지의 Buffer 상태</b><p/>
출력 Buffer의 전체 크기 : <%=totalBuffer%>byte<p/>
남은 Buffer의 크기 : <%=remainBuffer%>byte<p/>
현재 Buffer의 사용량 : <%=useBuffer%>byte<p/>
출력 결과

Buffer?
동작 속도가 크게 다른 두 장치 간의 인터페이스가 서로의 속도차를 조정하기 위해 이용되는 일시적인 기억 영역.
버퍼는 각 장치나 프로세스가 상대방에 의해 정체되지 않고 잘 동작할 수 있도록 해준다. 효율적인 버퍼를 만들기 위해서 버퍼의 크기를 상황에 맞게 잘 설계하고 데이터를 버퍼로 집어넣거나 빼내기 쉽게 개발하는 것이 중요하다.
'Web Programming > JSP' 카테고리의 다른 글
| [JSP] 서블릿 관련 내부 객체 (0) | 2024.10.04 |
|---|---|
| [JSP] 외부 환경 정보 제공 내부 객체 (0) | 2024.10.04 |
| [JSP] 내부 객체 (0) | 2024.10.04 |
| [JSP] 액션 태그 (1) | 2024.10.02 |
| [JSP] 기본 제어문 (0) | 2024.10.02 |