- 서블릿으로 변경된 JSP 코드는 모두 _jspService() 메서드에 위치함.
- 메서드 매개변수인 request, response 를 비롯한 pageContext, session, application, page, config, out 등 메서드 내에서 참조할 수 있는 참조변수들이 내장객체가 됨.
내장객체를 이용한 속성 관리 기법
내장객체가 단순히 특정한 기능을 제공하는 컨테이너 관리 객체라는 점 외에도 한 가지 특징이 있다. 바로 page, request, session, application 내장객체를 이용한 속성 관리 기법이다. 이들 내장객체는 각자 지정된 생명주기가 있으며 setAttribute( ), getAttribute( )라는 메서드를 통해 해당 생명주기 동안 자바 객체를 유지하는 기능을 제공한다.
REQUEST 내장객체
- request는 사용자 요청과 관련된 기능을 제공하는 내장객체로 javax.servlet.http.HttpServletRequest 클래스에 대한 참조변수이다
- 주로 클라이언트에서 서버로 전달되는 정보를 처리하기 위해 사용한다
- 대표적으로 HTML 폼을 통해 입력된 값을 JSP에서 가져올 때 사용함
예제
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Request Form</title>
</head>
<body>
<h1>Request Form</h1>
<hr>
<!-- 중요 -->
<form action="requestResult.jsp" method="get">
<table>
<tr>
<td>이름</td>
<td><input type="text" name="userName" id="userName"></td>
</tr>
<tr>
<td>직업</td>
<td>
<select name="job">
<option value="프로그래머">프로그래머</option>
<option value="디자이너">디자이너</option>
<option value="엔지니어">엔지니어</option>
</select>
</td>
</tr>
<tr>
<td>관심사</td>
<td>
<input type="checkbox" name="interest" value="java">JAVA<br>
<input type="checkbox" name="interest" value="html5">html5<br>
<input type="checkbox" name="interest" value="css3">css3<br>
<input type="checkbox" name="interest" value="javascript">javascript<br>
<input type="checkbox" name="interest" value="jsp">jsp<br>
</td>
</tr>
<tr>
<td></td>
<td><input type="submit" value="보내기"><input type="reset" value="초기화"></td>
</tr>
</table>
</form>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Request Result</title>
</head>
<body>
<h1>Request Result</h1>
<hr>
<table>
<tr>
<td>이름</td>
<td><%=request.getParameter("userName")%></td>
</tr>
<tr>
<td>직업</td>
<td><%=request.getParameter("job")%></td>
</tr>
<tr>
<td>관심사</td>
<td>
<%
String[] interests = request.getParameterValues("interest");
for (int i = 0; i < interests.length; i++) {
out.println(interests[i]+"<br>");
}
%>
</td>
</table>
</body>
</html>
GET 방식
RESPONSE 내장객체
- ddresponse는 request와 반대되는 개념으로, 사용자 응답과 관련된 기능을 제공.
- 사용자 요청(request)을 처리하고 응답을 다른 페이지로 전달하는 등의 기능을 제공한다.
- javax.servlet.http.HttpServletReponse 객체에 대한 참조변수로, request에 만큼 많이 사용되지는 않으나 setContentType, sendRedirect와 같은 메서드는 잘 알아두어야 한다.
예제
<%@ 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="resultPage.jsp">
페이지 이동테스트
<select name="select">
<option value="0">forward</option>
<option value="1">sendRedirect</option>
</select>
<input type="submit">
</form>
</body>
</html>
resultPage.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Result Page</title>
</head>
<body>
<%
String select = request.getParameter("select");
int selectNum = Integer.parseInt(select);
if(selectNum>0){
out.println(selectNum);
// 현재 페이지가 응답으로 처리가 되고, result.jsp 페이지를 다시 요청
response.sendRedirect("result.jsp");
} else {
out.println(selectNum);
%>
<!-- 현재 페이지가 응답으로 처리되는 것이 아니라 result.jsp 페이지의 결과가 응답으로 실행
-->
<jsp:forward page="result.jsp"></jsp:forward>
<%
}
%>
</body>
</html>
result.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>
</body>
</html>
SESSION 내장객체
- HTTP 프로토콜이 비연결형 프로토콜이기 때문에 한 페이지가 출력된 다음에는 클라이언트와 서버의 연결이 끊어진다. 따라서 한번 로그인한 사용자가 로그아웃할 때까지 페이지를 이동해도 보관해야 할 정보가 있다면 이에 대한 처리가 매우 곤란해진다.
- 이러한 HTTP 프로토콜 문제점을 해결하려고 나온 것이 쿠키와 세션이다.
- session 은 javax.servlet.http.HttpSession 인터페이스의 참조 변수 이다.
- session 은 접속하는 사용자 별로 따로 생성되며 일정시간 유지되고 소멸된다.
이러한 세션의 특징을 이용해 setAttribute() 메서드를 이용해 임의의 값을 저장해 놓고 활용할 수 있음.
- 세션이 주로 사용되는 경우는 다음과 같다.
➊ 사용자 로그인 후 세션을 설정하고 일정 시간이 지난 경우 다시 사용자 인증을 요구 할 때.
➋ 쇼핑몰에서 장바구니 기능을 구현할 때.
➌사용자의 페이지 이동 동선 등 웹 페이지 트래킹 분석 기능 등을 구현할 때.
예제
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
session.setAttribute("userName", "김태형");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>session control</title>
</head>
<body>
<h1>세션에 정보를 저장했습니다 :)</h1>
<h1><a href="sessionView.jsp">세션의 속성 확인</a></h1>
</body>
</html>
sessionView.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>세션의 속성에 저장된 userName : <%= session.getAttribute("userName")%></h1>
<h1><a href="../index.jsp">index로 이동</a></h1>
</body>
</html>
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>First JSP</title>
</head>
<body>
<h1>INDEX : <%= session.getAttribute("userName")%></h1>
</body>
</html>
그 밖의 내장객체
'JAVA > Jsp&Servlet' 카테고리의 다른 글
[JSP] 쿠키 (0) | 2020.12.17 |
---|---|
[JSP] 에러 (0) | 2020.12.17 |
[JSP] beans 빈즈 (0) | 2020.12.17 |
[JSP] 내장객체와 속성관리 / 생명주기 (0) | 2020.12.16 |
[JSP] 지시어 & 액션 ( include / param / forward ) (0) | 2020.12.15 |
[JSP] JSP / 서블릿 작성 (0) | 2020.12.14 |
[JSP] apache tomcat 톰캣 환경설정 (0) | 2020.12.14 |