컴퓨터/JAVA

[JSP] JSP 내장객체란?/내장객체 사용하는 법

도도새 도 2023. 6. 28. 18:05

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가 만료됩니다.