JSP 암시적 객체

⚡ 스마트 요약

JSP 암시적 객체는 서블릿 컨테이너가 페이지 변환 중에 자동으로 생성하는 미리 정의된 변수로, 개발자가 수동 선언이나 추가 구성 없이 페이지 내에서 출력 스트림, 요청, 응답, 세션 및 애플리케이션 데이터에 직접 접근할 수 있도록 합니다.

  • 🖨️ 출력 객체: 데이터를 버퍼에 기록하고 JSP를 통해 클라이언트로 출력을 전송합니다.Writer 스트림입니다.
  • 📥 요청 객체: getParameter() 메서드를 사용하여 매개변수, 헤더 및 서버 세부 정보를 가져오는 HttpServletRequest 인스턴스입니다.
  • 📤 응답 객체: HttpServletResponse를 구현하여 콘텐츠 유형을 설정하고, 쿠키를 추가하고, 클라이언트를 리디렉션합니다.
  • ⚙️ 구성 및 적용: 설정 파일은 web.xml에서 초기화 매개변수를 읽어옵니다. 애플리케이션은 전체 배포 환경에서 컨텍스트 데이터를 공유합니다.
  • 🗂️ 세션 및 페이지 컨텍스트: 세션은 페이지 간에 사용자 속성을 유지하고, PageContext는 페이지, 요청, 세션 및 애플리케이션 범위에 걸쳐 속성을 관리합니다.
  • ⚠️ 예외 객체: ArrayIndexOutOfBounds와 같은 런타임 오류를 보고하는 오류 페이지에서만 사용할 수 있는 예외입니다.

JSP 암시적 객체란 무엇입니까?

  • JSP 암시적 객체는 JSP를 서블릿으로 변환하는 단계에서 생성됩니다.
  • 이러한 개체는 서비스 메서드에 포함되는 스크립트에서 직접 사용할 수 있습니다.
  • 컨테이너에 의해 자동으로 생성되며 개체를 사용하여 액세스할 수 있습니다.

JSP에서 사용할 수 있는 암시적 객체는 몇 개입니까?

컨테이너에는 9가지 유형의 암시적 개체가 있습니다.

  1. 아웃
  2. 의뢰
  3. 응답
  4. 구성
  5. 어플리케이션
  6. 세션
  7. 페이지컨텍스트
  8. 페이지
  9. 예외

하나씩 공부해보자

1) 아웃

  • Out은 버퍼에 데이터를 쓰고 응답으로 클라이언트에 출력을 보내는 암묵적 객체 중 하나입니다.
  • Out 객체를 사용하면 서블릿의 출력 스트림에 액세스할 수 있습니다.
  • Out은 javax.servlet.jsp.jsp의 객체입니다.Writer 수업
  • 작업하는 동안 서블릿, 인쇄기 개체가 필요합니다

예:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implicit Guru JSP1</title>
</head>
<body>
<% int num1=10;int num2=20;
out.println("num1 is " +num1);
out.println("num2 is "+num2);
%>
</body>
</html>

코드 설명:

Code 전화번호 11-12– out은 출력 스트림으로 인쇄하는 데 사용됩니다.

위 코드를 실행하면 다음과 같은 출력이 나옵니다.

JSP로 나가기

출력:

  • 출력에서 num1과 num2의 값을 얻습니다.

2) 요청

  • 요청 객체는 java.servlet.http.HttpServletRequest의 인스턴스이며 서비스 메소드의 인수 중 하나입니다.
  • 모든 요청에 ​​대해 컨테이너에 의해 생성됩니다.
  • 매개변수, 헤더 정보, 서버 이름 등과 같은 정보를 요청하는 데 사용됩니다.
  • 요청 매개변수에 액세스하기 위해 getParameter()를 사용합니다.

예:

Implicit_jsp2.jsp(요청이 guru.jsp로 전송되는 양식)

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implicit Guru form JSP2</title>
</head>
<body>
<form action="guru.jsp">
<input type="text" name="username">
<input type="submit" value="submit">
</form>
</body>
</html>

Guru.jsp (실행되는 작업 영역)

JSP로 요청

코드 설명:

Code 10~13행: implicit_jsp2.jsp(form) 요청이 전송되므로 username 변수가 처리되어 JSP의 작업인 guru.jsp로 전송됩니다.

Guru.jsp

Code 10-11행: 요청이 처리되는 곳은 Action JSP이고 사용자 이름은 jsp 형식에서 가져옵니다.

위 코드를 실행하면 다음과 같은 출력이 나옵니다.

출력:

JSP로 요청

테스트를 작성하고 제출 버튼을 클릭하면 다음과 같은 출력인 "Welcome Test"가 표시됩니다.

JSP로 요청

3) 응답

  • "Response"는 HttpServletResponse 인터페이스를 구현하는 클래스의 인스턴스입니다.
  • 컨테이너는 이 객체를 생성하고 _jspservice() 메소드에 매개변수로 전달합니다.
  • "응답 개체"는 각 요청에 대해 컨테이너에 의해 생성됩니다.
  • 클라이언트에게 제공할 수 있는 응답을 나타냅니다.
  • 응답 암시적 개체는 콘텐츠 유형, 쿠키 추가 및 응답 페이지로 리디렉션하는 데 사용됩니다.

예:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implicit Guru JSP4</title>
</head>
<body>
<%response.setContentType("text/html"); %>
</body>
</html>

코드 설명:

Code 11 라인 : 응답 객체에서 콘텐츠 유형을 설정할 수 있습니다.

여기서는 응답 개체의 콘텐츠 유형만 설정합니다. 따라서 이에 대한 출력이 없습니다.

4) 구성

  • "구성"은 java.servlet.servletConfig 유형입니다.
  • 각 JSP 페이지의 컨테이너에 의해 생성됩니다.
  • web.xml에서 초기화 매개변수를 가져오는 데 사용됩니다.

예:

Web.xml (이름과 맵을 지정합니다)ping 서블릿의)

JSP에서 구성

Implicit_jsp5.jsp(서블릿 이름 값 가져오기)

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implicit Guru JSP5</title>
</head>
<body>
<% String servletName = config.getServletName();
out.println("Servlet Name is " +servletName);%>
</body>
</html>

코드 설명:

web.xml에서

Code 14-17행: web.xml에는 map이 있습니다.ping 클래스에 대한 서블릿.

Implicit_jsp5.jsp

Code 10-11행: JSP에서 서블릿의 이름을 얻으려면 config.getServletName을 사용할 수 있습니다. 이는 서블릿의 이름을 얻는 데 도움이 됩니다.

위 코드를 실행하면 다음과 같은 출력이 나옵니다.

JSP의 응답

출력:

  • 서블릿 이름은 "Guru웹.xml 파일에 "Servlet"이라는 이름이 있습니다.

5) 신청

  • 애플리케이션 객체(코드 라인 10)는 javax.servlet.ServletContext의 인스턴스이며 JSP에서 컨텍스트 정보와 속성을 가져오는 데 사용됩니다.
  • 애플리케이션 객체는 애플리케이션이 배포될 때 컨테이너에 의해 애플리케이션당 하나씩 생성됩니다.
  • Servletcontext 객체에는 서블릿 컨테이너와 상호 작용하는 데 사용되는 일련의 메소드가 포함되어 있습니다. 서블릿 컨테이너에 대한 정보를 찾을 수 있습니다

예:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Guru Implicit JSP6</title>
</head>
<body>
<% application.getContextPath(); %>
</body>
</html>

코드 설명:

  • 위 코드에서 애플리케이션 속성은 JSP 페이지의 컨텍스트 경로를 가져오는 데 도움이 됩니다.

6) 세션

  • 세션은 "httpsession" 개체(코드 라인 10)를 보유하고 있습니다.
  • 세션 개체는 세션 범위에 대한 속성을 가져오고 설정하고 제거하는 데 사용되며 세션 정보를 가져오는 데에도 사용됩니다.

예:

Implicit_jsp7(속성이 설정됨)

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implicit JSP</title>
</head>
<body>
<% session.setAttribute("user","GuruJSP"); %>
<a href="implicit_jsp8.jsp">Click here to get user name</a>
</body>
</html>

Implicit_jsp8.jsp(getAttribute)

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>implicit Guru JSP8</title>
</head>
<body>
<% String name = (String)session.getAttribute("user");
out.println("User Name is " +name);
%>
</body>
</html>

코드 설명:

Implicit_jsp7.jsp

Code 11 라인 : 우리는 세션 변수에 user 속성을 설정하고 있으며 해당 값은 jsp가 호출되는 세션(_jsp8.jsp)에서 가져올 수 있습니다.

Code 12 라인 : 설정된 user 속성 값을 가져오는 href에서 또 다른 jsp를 호출합니다.

Implicit_jsp8.jsp

Code 11 라인 : 세션 개체에서 사용자 속성 값을 가져와 해당 값을 표시합니다.

위 코드를 실행하면 다음과 같은 출력이 나옵니다.

JSP의 세션

사용자 이름에 대한 링크를 클릭하면 다음과 같은 출력이 표시됩니다.

JSP의 세션

출력:

  • implicit_jsp7.jsp에 제공된 링크를 클릭하면 두 번째 jsp 페이지, 즉 (_jsp8.jsp) 페이지로 리디렉션되고 사용자 속성(_jsp7.jsp)의 세션 개체에서 값을 가져옵니다.

7) 페이지 컨텍스트

  • 이 개체는 페이지 컨텍스트 유형입니다.
  • 특정 범위에서 속성을 가져오고 설정하고 제거하는 데 사용됩니다.

범위는 4가지 유형이 있습니다.

  • 페이지
  • 의뢰
  • 세션
  • 어플리케이션

예:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implicit Guru JSP9</title>
</head>
<body>
<% pageContext.setAttribute("student","gurustudent",pageContext.PAGE_SCOPE);
String name = (String)pageContext.getAttribute("student");
out.println("student name is " +name);
%>
</body>
</html>

코드 설명:

Code 11 라인 : pageContext 객체를 사용하여 속성을 설정하고 있으며 여기에는 세 가지 매개변수가 있습니다.

  • 키
  • 가치관
  • 범위

위 코드에서 키는 학생이고 값은 "gurustudent"이고 범위는 페이지 범위입니다. 여기서 범위는 "페이지"이며 페이지 범위만 사용하여 가져올 수 있습니다.

Code 12 라인 : pageContext를 사용하여 속성 값을 가져옵니다.

위 코드를 실행하면 다음과 같은 출력이 나옵니다.

JSP의 PageContext

출력:

  • 출력에는 "학생 이름은 gurustudent"가 인쇄됩니다.

8) 페이지

  • 페이지 암시적 변수는 해당 jsp에 대해 현재 실행되는 서블릿 객체를 보유합니다.
  • 현재 JSP 페이지에 대해 이 객체로 작동합니다.

예:

이 예에서는 페이지 개체를 사용하여 toString 메서드를 사용하여 페이지 이름을 가져옵니다.

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implicit Guru JSP10</title>
</head>
<body>
<% String pageName = page.toString();
out.println("Page Name is " +pageName);%>
</body>
</html>

코드 설명:

Code 10-11행: 이 예에서는 페이지 개체의 toString() 메서드를 사용하여 JSP 페이지의 문자열 이름을 가져오려고 합니다.

코드를 실행하면 다음과 같은 출력이 표시됩니다.

JSP의 페이지

출력:

  • 출력은 위 JSP 페이지의 문자열 이름입니다.

9) 예외

  • Exception은 던질 수 있는 클래스의 암시적 객체입니다.
  • 사용됩니다 JSP의 예외 처리.
  • 예외 개체는 오류 페이지에서만 사용할 수 있습니다.예:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1" isErrorPage="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Implicit Guru JSP 11</title>
</head>
<body>
<%int[] num1={1,2,3,4};
out.println(num1[5]);%>
<%= exception %>
</body>
</html>

코드 설명:

Code 전화번호 10-12 – 숫자 배열, 즉 1개의 요소가 있는 num1이 있습니다. 출력에서 ​​우리는 배열 목록에서 선언되지 않은 numXNUMX의 배열의 다섯 번째 요소를 인쇄하려고 합니다. 그래서 그것은 jsp의 예외 객체를 얻는 데 사용됩니다.

출력:

JSP의 예외

다섯 번째 요소의 num1 배열을 가져오는 배열에서 ArrayIndexOfBoundsException을 가져옵니다.

자주 묻는 질문

아니요. 컨테이너는 변환 단계에서 9개의 암시적 객체를 자동으로 생성합니다. 개발자는 패키지를 가져오거나 변수를 선언할 필요 없이 스크립틀릿과 서비스 메서드 내에서 이러한 객체를 직접 사용할 수 있습니다.

아니요. 암시적 객체는 서비스 메서드에 매핑되는 스크립틀릿 및 표현식 내에서만 사용할 수 있습니다. 해당 메서드 외부에 클래스 수준 멤버를 생성하는 JSP 선언 태그 내에서는 사용할 수 없습니다.

PageContext는 페이지, 요청, 세션, 애플리케이션의 네 가지 범위 모두에서 작동합니다. setAttribute, getAttribute, removeAttribute 메서드를 제공하여 다양한 범위 수준에서 데이터를 관리하는 데 가장 유연한 암시적 객체입니다.

AI는 각 암묵적 객체를 예시와 함께 설명하고, 스크립틀릿 코드를 더 깔끔한 대안으로 변환하며, 범위 관련 질문에 즉시 답변할 수 있습니다. 이는 초보자가 요청, 세션 또는 애플리케이션 객체를 언제 올바르게 사용해야 하는지 이해하는 데 도움이 됩니다.

네. AI 도구는 out, request, session 및 기타 암묵적인 객체를 사용하여 작동하는 JSP 코드 조각을 생성하고 각 줄을 설명할 수 있습니다. 하지만 개발자는 스코프 처리 및 보안 측면에서 올바른지 확인하기 위해 출력 결과를 검토해야 합니다.

이 게시물을 요약하면 다음과 같습니다.