[jsp] jsp 페이지의 내장 객체(내장 변수)

hoonak·2023년 6월 3일
0

JSP

목록 보기
2/12

jsp 페이지의 내장 객체(내장변수)란?

jsp가 서블릿으로 변환될 때 컨테이너가 자동으로 생성시키는 서블릿 멤버 변수를 말함. 즉, 서블릿으로 구현 시 자주 사용했던 객체를 개발자가 일일이 만드는 것이 아니라 서블릿으로 변환 시 컨테이너가 자동으로 생성하여 사용하게끔 제공하는 것.

* jsp에서 제공하는 내장 객체들

request : 클라이언트의 요청 정보를 저장함. - javax.servlet.httpHttpServletRequest

response : 응답 정보를 저장함. - javax.servlet.httpHttpServletResoponse

out : jsp 페이지에서 결과를 출력. - javax.servlet.jsp.JspWriter

session : 세션 정보를 저장. - javax.servlet.http.HttpSession

application : 컨텍스트 정보를 저장. - javax.servlet.ServletContext

pageContext : jsp 페이지에 대한 정보를 저장. -javax.servlet.jsp.PageContext

page : jsp 페이지의 서블릿 인스턴스를 저장. - java.lang.Object

config : jsp 페이지에 대한 설정 정보를 저장. - javax.servlet.ServletConfig

exception : 예외 발생 시 예외를 처리. - java.lang.Exception

* 내장 객체들의 스코프

page : 한 번의 요청에 대해 하나의 jsp 페이지를 공유. - this

request : 한 번의 요청에 대해 같은 요청을 공유하는 jsp 페이지를 공유. -
HttpServletRequest

session : 같은 브라우저에서 공유. - HttpSession

application : 같은 애플리케이션에서 공유. - ServletContext

예 1) session 내장 객체에 데이터 바인딩

  • SessionTest.java

서블릿에서 getSession() 메서드를 이용해 session 객체를 얻은 후 name을 바인딩함.

package sec01.ex01;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

@WebServlet("/sess")
public class SessionTest extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html; charset = utf-8");
		PrintWriter pw = response.getWriter();
		HttpSession session = request.getSession(); // session 객체를 가져 옴.
		session.setAttribute("name", "이순신"); // session 객체에 name을 바인딩 함.
		pw.println("<html><body>");
		pw.println("<h1> 세션에 이름을 바인딩 합니다.</h1>");
		pw.println("<a href  = '/pro11/test01/session1.jsp'> 첫 번째 페이지로 이동하기 </a>");
		pw.println("</body></html>");
	}

}
  • session.jsp

session 객체의 사용법은 서블릿 HttpSession 사용법과 같음. 차이점은 jsp에서는 자동으로 세션 객체를 생성해주므로 굳이 getSession() 메서드를 호출해서 세션을 얻을 필요가 없다는 것. getAttribute() 메서드를 이용해 첫 번째 jsp에서 session에 바인딩된 name 값을 가져온 후 setAttribute() 메서드를 이용해 session에 address를 바인딩함.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
	//session 객체에 바인딩 된 name 값을 가져옴.
	String name = (String)session.getAttribute("name"); 
	
	//session 객체에 address를 바인딩 함.
	session.setAttribute("address", "서울시 강남구"); 
%>    
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	이름은 <%= name %> 입니다.<br>
	<a href = session2.jsp> 두 번째 페이지로 이동 </a>
</body>
</html>
  • session2.jsp

getAttribute()를 이용해 서블릿과 jsp에서 session에 바인딩된 name과 address 값을 가져옴.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
	//session 객체에 바인딩 된 name과 address 값을 가져옴.
	String name = (String)session.getAttribute("name"); 
	String address = (String)session.getAttribute("address");
%>    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	이름은 <%= name %> 입니다.<br>
	주소는 <%= address %> 입니다. <br>
</body>
</html>

예 2) application 내장 객체에 데이터 바인딩

  • appTest1.jsp

첫 번째 jsp에서 session과 application 내장 객체에 name과 address 값을 바인딩함.


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
	//이름과 주소를 session과 application 내장 객체에 바인딩 함.
	session.setAttribute("name", "이순신"); 
	application.setAttribute("address", "서울시 성동구");
%>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>내장 객체 스코프 테스트1</title>
</head>
<body>
	<h1> 이름과 주소를 저장함. </h1>
	<a href = appTest2.jsp> 두 번째 웹 페이지로 이동 </a>
</body>
</html>
  • appTest2.jsp

첫 번째 jsp에서 session과 application 내장 객체에 바인딩한 값을 가져옴.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
	//첫 번째 웹 페이지에서 저장한 데이터를 session과 application 내장 객체에서 가져옴.
	String name = (String)session.getAttribute("name"); 
	String address = (String)application.getAttribute("address");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>이름은 <%= name %></h1>
	<h1>주소는 <%= address %></h1>
</body>
</html>

같은 브라우저에서 appTest2.jsp를 요청하면 session과 application에 저장된 값을 그대로 출력함. 그러나 다른 브라우저로 요청할 경우 session 내장 객체의 스코프는 접근할 수 없으므로 null을 출력함. 이를 통해 application 내장 객체의 스코프는 애플리케이션 전체이고, session 내장 객체의 스코프는 같은 브라우저임을 알 수 있음.

예 3) request 내장 객체에 데이터 바인딩

  • request1.jsp

브라우저의 요청에 대한 request 객체에 name, address를 바인딩함. 그리고 RequestDispatch를 이용해 두 번째 jsp로 전송함.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%
	//request 객체에 setAttribute()를 이용해 name과 address를 바인딩 함.
	request.setAttribute("name", "이순신"); 
	request.setAttribute("address", "서울시 강남구");
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		// request 객체를 다른 jsp로 포워딩 함.
		RequestDispatcher dispatch = request.getRequestDispatcher("request2.jsp");
		dispatch.forward(request, response);
	%>
</body>
</html>
  • request2.jsp

첫 번째 jsp에서 전송된 request 객체에서 바인딩 된 name과 address를 가져옴.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<%
	//첫 번째 페이지에서 포워딩된 request 객체에서 getAttribute()를 이용해 정보를 가져옴.
	String name = (String)request.getAttribute("name"); 
	String address = (String)request.getAttribute("address");
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1> 이름은 <%= name %> 입니다. </h1> <!-- 이전 jsp에서 전송된 정보를 출력함. --> 
	<h1> 주소는 <%= address %> </h1>
</body>
</html>

예 4) out 내장 객체 이용해 데이터 출력하기

  • out1.jsp

이름과 나이를 두 번째 jsp로 전송함.

<%@ 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 method = "post" action = "out2.jsp">
		이름 : <input type = 'text' name = 'name'><br>
		나이 : <input type = 'text' name = 'age'><br>
		<input type = 'submit' value = '전송'>
	</form>
</body>
</html>
  • out2.jsp

전송된 이름과 나이를 표현식과 out 내장 객체를 이용해 출력함.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
	request.setCharacterEncoding("utf-8");
	String name = request.getParameter("name");
	String age = request.getParameter("age");
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<%
		if(name != null || name.length() != 0){
	%>	
			<h1><%= name %> , <%= age %></h1> <!-- name과 age의 값을 표현식으로 출력함. -->
	<%			
		}else {
	%>
			<h1> 이름을 입력하세요 </h1>
	<%
		}
	%>
	
	<%
		if(name != null || name.length() != 0){
	%>		
			<h1><% out.println(name + " , " + age); %></h1> <!-- name과 age의 값을 out 내장 객체로 출력함. -->
	<%	
		}else {
	%>
		<h1> 이름을 입력하세요 </h1>
	<%
		}
	%> 	
</body>
</html>

out 내장 객체를 이용해 스크립트릿으로 출력하면 복잡한 코드를 상대적으로 간단하게 출력하 수 있음.

profile
Hello World!

0개의 댓글