Java

2024.07.04 JSP 프로그래밍 기본 JSP 내장 객체란 뭘까?

정훈5 2024. 7. 4. 11:10

JSP 내장 객체는 JSP 페이지 내에서 특별한 선언 없이 사용할 수 있는 객체들입니다.

이 객체들은 자동으로 생성되며, 서버와 클라이언트 간의 상호작용을 처리하고 웹 애플리케이션의 다양한 기능을 지원하는 데 사용됩니다.

 

주요 내장 객체

  • request: 클라이언트의 요청 정보를 포함하는 객체.
  • response: 서버에서 클라이언트로 전송할 응답을 나타내는 객체.
  • session: 사용자별 정보를 서버에 저장하는 객체.
  • application: 애플리케이션 범위의 속성을 저장하는 객체.
  • out: 클라이언트에 데이터를 출력하는 데 사용되는 객체.
  • config: JSP 페이지의 설정 정보를 포함하는 객체.
  • pageContext: JSP 페이지의 실행 환경을 제공하는 객체.
  • exception : 예외 정보를 제공 (에러 페이지에서만 사용)
  • page : 현재 JSP 페이지를 나타냄

1. request

  • 설명: 클라이언트의 요청 정보를 포함하는 객체입니다.
    HTTP 요청 매개변수, 헤더, 쿠키 등의 정보를 제공합니다.
  • 주요 메서드:
    • getParameter(String name): 요청 파라미터 값을 반환합니다.
    • setAttribute(String name, Object value): 요청 속성을 설정합니다.
    • getAttribute(String name): 요청 속성 값을 반환합니다.

2. response

  • 설명: 서버에서 클라이언트로 전송할 응답을 나타내는 객체입니다.
    HTTP 상태 코드, 응답 헤더, 쿠키 등을 설정할 수 있습니다.

  • 주요 메서드:
    • setContentType(String type): 응답의 MIME 타입을 설정합니다.
    • sendRedirect(String location): 클라이언트를 다른 URL로 리다이렉트합니다.
    • addCookie(Cookie cookie): 응답에 쿠키를 추가합니다.

3. session

  • 설명: 세션은 사용자별 정보를 서버에 저장하는 객체입니다.
    사용자별 상태 정보를 관리할 수 있습니다.

  • 주요 메서드:
    • getAttribute(String name): 세션 속성 값을 반환합니다.
    • setAttribute(String name, Object value): 세션 속성을 설정합니다.
    • invalidate(): 세션을 무효화합니다.

4. application

  • 설명: 애플리케이션 범위의 속성을 저장하는 객체입니다.
    모든 사용자와 모든 세션에 대해 공통적인 데이터를 저장할 수 있습니다.
  • 주요 메서드:
    • getAttribute(String name): 애플리케이션 속성 값을 반환합니다.
    • setAttribute(String name, Object value): 애플리케이션 속성을 설정합니다.

5. out

  • 설명: 클라이언트에 출력하는 데 사용되는 객체입니다.
    JSP 페이지의 출력 버퍼를 제어합니다.
  • 주요 메서드:
    • print(String s): 문자열을 출력합니다.
    • println(String s): 문자열을 출력하고 줄바꿈을 추가합니다.
    • clear(): 출력 버퍼를 지웁니다.

6.config

  • 설명: JSP 페이지의 설정 정보를 포함하는 객체입니다.
    JSP 페이지에 대한 초기화 파라미터를 제공합니다.

  • 주요 메서드:
    • getInitParameter(String name): 초기화 파라미터 값을 반환합니다.

7. pageContext

  • 설명: JSP 페이지의 실행 환경을 제공하는 객체입니다.
    모든 범위에 접근할 수 있는 메서드를 제공합니다.

  • 주요 메서드:
    • getAttribute(String name, int scope): 특정 범위의 속성 값을 반환합니다.
    • setAttribute(String name, Object value, int scope): 특정 범위의 속성을 설정합니다.

8. exception

  • 설명: JSP 페이지에서 발생한 예외 정보를 포함하는 객체로, 오류 페이지에서만 유효합니다.
  • 주요 메서드:
    • getMessage(): 예외 메시지를 반환합니다.
    • printStackTrace(): 예외의 스택 추적을 출력합니다.

9. page

  • 설명: 현재 JSP 페이지의 인스턴스를 나타내는 객체입니다. 일반적으로 this와 동일합니다.

class_jsp_v04 폴더 생성

 

login.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>
	<h2>로그인</h2>
	<%-- welcome.jsp : 상대경로 --%>
	<!-- 로그인 처리는 예외적인 사항으로 POST 요청을 하자! 이유: GET 방식은 주소창에 데이터가 보이고 취약하다. -->
	<form action="welcome.jsp" method="POST">
		<label for="username">username : </label>
		<input type="text" id="username" name="username" value="홍길동">
		
		<label for="password">password : </label>
		<input type="text" id="password" name="password" value="1234">
		
		<button type="submit">로그인</button>
		
	</form>

</body>
</html>

 

welcome.jsp

<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>환영해요</title>
</head>
<body>
 <%-- <% %> 스크립트 릿 이라고한다. --%>
 
 	<%
 		// http://localhost:8080/jsp/welcome.jsp
 		
 		// session 객체를 사용하여 사용자 정보 여부를 확인하자.
 		String username = (String)session.getAttribute("username");
 		
 		if(username == null || username.trim().isEmpty()){
 			// request 객체에서 사용자 정보를 추출하자.
 			username = request.getParameter("username");
 			if(username != null && !username.trim().isEmpty()) {
 			// 홍길동 ok
 			// ""				&&  !""
 			
 			// 세션 객체를 사용해서 사용자 정보를 저장(속성과 같음)
 			session.setAttribute("username", username);
 			} else {
 				// 사용자가 정상적인 데이터를 보내지 않는다면 (클라이언트를 다시 뒤로 돌린다.)
 				response.sendRedirect("login.jsp"); // login.jsp 로 응답해서 돌려보낸다.
 				return;
 			}
 		}
 		
 		// application 내장 객체를 사용하여 방문 횟수 증가 
 		Integer visitCount = (Integer)application.getAttribute("visitCount");
 		if(visitCount == null){
 			visitCount = 1;
 		} else {
 			visitCount++;
 		}
 		
 		// chrome 이나 edge에서 각각 로그인 해서 새로고침 하면 방문 횟수는 공유가 된다.
 		application.setAttribute("visitCount", visitCount);
 		
 		Date now = new Date();
 	%>
 	
 	<h2>환영 합니다. <%= username %> </h2>
 	
 	<p>현재 시간 : <%= now %></p>
 	<p>방문 횟수 : <%= visitCount %> </p>
 
</body>
</html>

 

 


 

login.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>
	<h2>로그인</h2>
	<%-- welcome.jsp : 상대경로 --%>
	<!-- 로그인 처리는 예외적인 사항으로 POST 요청을 하자! 이유: GET 방식은 주소창에 데이터가 보이고 취약하다. -->
	<form action="welcome2.jsp" method="POST">
		<label for="username">username : </label>
		<input type="text" id="username" name="username" value="홍길동">
		
		<label for="password">password : </label>
		<input type="text" id="password" name="password" value="1234">
		
		<button type="submit">로그인</button>
		
	</form>

</body>
</html>

 

welcome2.jsp

<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>환영해요</title>
</head>
<body>
 <%-- <% %> 스크립트 릿 이라고한다. --%>
 
 	<%
 		// http://localhost:8080/jsp/welcome2.jsp
 		
 		// session 객체를 사용하여 사용자 정보 여부를 확인하자.
 		String username = (String)session.getAttribute("username");
 		
 		if(username == null || username.trim().isEmpty()){
 			// 여기에 들어 온다면 최초 요청이 아닐까??
 			// 폼 데이터 있는지 없는지 확인 .... 가정 있다면
 			session.setAttribute("username", "홍길동");
 			session.setAttribute("visitCount", 1);
 			
 		} else {
 			
 			Integer visitCount = (Integer)session.getAttribute("visitCount");
 			
 			if(visitCount == null){
 				visitCount = 1;
 			} else {
 				visitCount++;
 			}
 				// 두번째 요청 인듯 ...
 				session.setAttribute("visitCount", visitCount);
 		}
 		
 	%>
 	
 	<h2>환영 합니다, <%= username %> </h2>
 	<p>방문 횟수 : <%= session.getAttribute("visitCount") %> </p>
 
</body>
</html>

 

// 두번째 요청 인듯 . . .

session.setAttribute("visitCount", 1);  <-- 이렇게 수정해야 될거같다.

 

새로고침 해도 방문횟수가 1 이상 증가하지 않는다.