[JSP] JSP 내장객체란?/내장객체 사용하는 법
JSP 내장객체
내장 객체란?
내장객체는 jsp가 서블릿 코드로 변환될 때(jsp는 서블릿으로 컴파일된다) 참조 가능한 객체들이다. 별도의 선언을 하지 않고도 사용할 수 있다.
<% out.println("<h1>내장 객체 사용</h1>"); %>
위의 코드는 h1태그를 웹상에 출력한다.
이는 jsp파일이 서블릿 코드로 변환될 때_jspService() 메서드가 생성되고 JSP 내용들이 해당 메서드 내에 위치하게 되기 때문이다. 게다가 _jspService()는 그 인자로 request, response를 받기 때문에 다양한 내장 객체 사용이 가능하다.
내장 객체 | 설명 |
---|---|
request | 현재 요청과 관련된 정보를 저장하고 있는 객체. HTTP 요청에 대한 매개변수, 헤더, 쿠키 등에 접근 가능. |
response | 현재 요청에 대한 응답을 생성하는 메서드와 속성을 제공하는 객체. HTTP 응답을 조작하는 데 사용됨. |
session | 사용자의 세션 정보를 저장하고 있는 객체. 세션을 통해 사용자별로 상태를 유지할 수 있음. |
application | 웹 애플리케이션의 전역 정보를 저장하고 있는 객체. 여러 사용자 간에 공유되는 상태를 유지할 수 있음. |
out | 응답 출력 스트림을 제공하는 객체. HTML이나 텍스트와 같은 응답 데이터를 출력하는 데 사용됨. |
pageContext | 현재 JSP 페이지의 실행 컨텍스트에 대한 정보를 저장하고 있는 객체. 다른 내장 객체에 접근할 수 있는 메서드를 제공함. |
JSP 내장 객체 예시
request사용
<%@ 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>
<%
String name = request.getParameter("name");
String age = request.getParameter("age");
String hobby[]= request.getParameterValues("hobby");
%>
<p>이름 : <%=name %></p>
<p>나이 : <%=age %></p>
<p>취미 : <%=hobby[0] %></p>
</body>
</html>
웹 브라우저 상에서 아래 url를 입력한다.
http://localhost:9000/sample1/index.jsp?name=이름이다&age=26&hobby=그림&영화
즉, 루트 경로 뒤에 ?로 시작하는 쿼리 파라미터를 입력한다. 즉 GET방식이다.
request 내장 객체의 주요 메서드:
- getParameter(String name):
지정된 이름의 HTTP 요청 매개변수 값을 반환합니다. - getParameterValues(String name):
지정된 이름의 HTTP 요청 매개변수 값들을 배열로 반환합니다. - getAttribute(String name):
지정된 이름의 요청 속성 값을 반환합니다. - setAttribute(String name, Object value):
지정된 이름으로 요청 속성을 저장합니다. 속성의 값을 value로 지정합니다. - getSession():
현재 요청에 대한 세션 객체를 반환합니다. 세션이 없는 경우, 새로운 세션을 생성합니다.
response 내장 객체의 주요 메서드:
- setContentType(String type):
응답의 콘텐츠 타입을 설정합니다. 예를 들어, "text/html"로 설정하면 HTML 콘텐츠를 응답합니다. - getWriter():
응답에 출력할 수 있는 PrintWriter 객체를 반환합니다. 이를 통해 응답 데이터를 출력할 수 있습니다. - sendRedirect(String location):
지정된 위치로 클라이언트에게 리다이렉션을 수행합니다. 클라이언트는 해당 위치로 다시 요청을 보냅니다. - addCookie(Cookie cookie):
응답에 쿠키를 추가합니다. 클라이언트로 쿠키를 전달하여 상태를 유지할 수 있습니다. - setHeader(String name, String value):
응답 헤더의 값을 설정합니다. 예를 들어, "Content-Disposition" 헤더를 설정하여 파일 다운로드를 지시할 수 있습니다. - setStatus(int sc):
응답 상태 코드를 설정합니다. 예를 들어, 200은 "OK", 404는 "Not Found"를 나타냅니다.
JSP 페이지 이동
- sendRedirect
- forward
response.sendRedirect("index2.jsp");
pageContext.forward("index2.jsp");
sendRedirect와 forward의 차이
sendRedirect
- URL로 재요청하도록 응답을 보내는 방식이다.
- 서블릿 컨테이너 밖에서 말 그대로 “리다이렉트”하는 것이다.
- 클라이언트와 서버 간의 연결이 끊기고 새로운 요청이 생성되기 때문에 이전 정보가 사라진다.
forward
- 이동하면서 데이터를 전달할 수 있다.
- 서버 내에서만 요청이 처리된다.
- 클라이언트 정보를 유지 가능하다.
index.jsp //forward
<%@page import="sample1.Student"%>
<%@ 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>
<%
Student stu = new Student("홍길동", 24);
request.setAttribute("student", stu);
pageContext.forward("index2.jsp");
%>
</body>
</html>
index2.jsp
<%@page import="sample1.Student"%>
<%@ 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>
<h1>인덱스 2</h1>
<%
Student s = (Student)request.getAttribute("student");
%>
<%= s.print() %>
</body>
</html>
s라는 변수에 Student stu = new Student("홍길동", 24); 의 객체가 담긴다. 하지만 sendRedirect의 경우 이런 방식으로 진행 할 수 없다.
JSP 세션
위와 거의 동일한 코드를 사용한다.
index.jsp
Student stu = new Student("홍길동", 24);
session.setAttribute("student", stu);
pageContext.forward("index2.jsp");
index2.jsp
Student s = (Student)session.getAttribute("student");
결과 역시 동일하다.
하지만 세션에서는 아래 코드도 동일하게 작동한다.
Student stu = new Student("홍길동", 24);
session.setAttribute("student", stu);
response.sendRedirect("index2.jsp");
즉 sendRedirect를 사용하는 것이다. 세션은 웹 애플리케이션의 전역 범위에 걸쳐 유지되기 때문에 가능한 것이다.
세션에 대해
- JSP 세션(Session)은 클라이언트와 서버 간의 상태를 유지하기 위한 메커니즘이다.
- 시적으로 정보를 저장하고 유지할 수 있는 공간을 제공한다.
- 동일한 클라이언트가 웹 애플리케이션과 상호작용하는 동안 데이터를 유지하고, 다른 페이지나 요청에서도 접근 가능하다.
*request.getSession().setAttribute(name, value)로도 세션에 접근 가능
세션의 메서드
- setAttribute(String name, Object value):
지정된 이름으로 세션에 속성을 저장합니다. 속성의 값을 value로 지정합니다. - getAttribute(String name):
지정된 이름의 세션 속성 값을 반환합니다. - removeAttribute(String name):
지정된 이름의 세션 속성을 제거합니다. - getId():
현재 세션의 고유 식별자인 세션 ID를 반환합니다. - setMaxInactiveInterval(int interval):
세션의 최대 비활성 시간을 설정합니다. 일정 시간 동안 세션에 요청이 없을 경우, 세션은 만료됩니다. - getMaxInactiveInterval():
세션의 최대 비활성 시간을 반환합니다. - invalidate():
현재 세션을 무효화합니다. 모든 세션 속성이 제거되고 세션 ID가 만료됩니다.