티스토리 뷰

JSP

[JSP]내장 객체

dev23 2024. 8. 14. 16:42
반응형

내장 객체

- JSP 페이지의 내장 객체(내장 변수) JSP가 서블릿으로 변활될 때 컨테이너가 자동으로 생성시키는 멤버 변수
말한다.

- , 서블릿으로 구현 자주 사용했던 객체를 개발자가 일일이 만드는 것이 아니라 서블릿으로 변환 컨테이너가
자동으로 생성하여 사용하게끔 제공하는 것이다.

서블릿에 선언된 내장 객체(내장 변수)

JSP에서 제공하는 내장 객체

내장 객체 서블릿 타입 설명
request HttpServletRequest 클라이언트의 요청 정보를 저장한다.
response ServletResponse 응답 정보를 저장한다.
out javax.servlet.jsp.JspWriter JSP 페이지에서 결과를 출력한다.
session javax.servlet.http.HttpSession 세션 정보를 저장한다.
application javax.servlet.ServletContext 컨텍스트 정보를 저장한다.
pageContext javax.servlet.jsp.PageContext JSP 페이지에 대한 정보를 저장한다.
page java.lang.Object JSP 페이지의 서블릿 인스턴스를 저장한다.
config javax.servlet.ServletConfig JSP 페이지에 대한 설정 정보를 저장한다.
exception java.lang.Exception 예외 발생 예외를 처리한다.

 

내장객체의 스코프

 

- request, session, application 서블릿의 스코프와 같다.

- page 요청하는 해당 JSP 페이지에 대해서만 공유할 있다.

내장 객체 서블릿 scope
page this 번의 요청에 대해 하나의 JSP 페이지를 공유한다.
request HttpServletRequest 번의 요청에 대해 같은 요청을 공유하는 JSP 페이지를 공유한다.
session HttpSession 같은 브라우저에서 공유한다.
application ServletContext 같은 애플리케이션에서 공유한다.

 

session 내장 객체 데이터 바인딩

- 서블릿에서 getSession() 메서드를 이용해 session 객체를 얻은 name 바인딩한다.

 

* SessionTest.java

package servlet;

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;

/**
 * Servlet implementation class SessionTest
 */
@WebServlet("/sess")
public class SessionTest extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out = response.getWriter();
		HttpSession session = request.getSession();
		
		session.setAttribute("name","이순신");
		out.print("<html><body>");
		out.print("<h1>세션에 이름을 바인딩합니다.");
		out.print("<a href='/JSP/sessRequest/session1.jsp'>첫 번째 페이지로 이동하기");
		out.print("</body></html>");

	}

}

 

* session1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	String name = (String)session.getAttribute("name");
	session.setAttribute("address","서울시");
%>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>session 내장 객체 테스트2</title>
</head>
<body>
	이름은 <%=name %>입니다.
	<a href="session2.jsp">세 번째 페이지로 이동</a>
</body>
</html>

 

* session2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	String name = (String) session.getAttribute("name");
	String address = (String)session.getAttribute("address");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>session 내장 객체 테스트3</title>
</head>
<body>
	이름은 <%=name %>입니다.<br>
	주소는 <%=address %>입니다.
</body>
</html>

 

- 코드 작성 후 브라우저에 localhost:[port]/[project_name]/sess 입력하여 접속하여 세션에 값을 바인딩시킨다.

세션에 값 바인딩

 

- "첫 번째 페이지로 이동하기" 링크를 클릭해 보면 서블릿에서 세션 객체에 바인딩한 값이 나타나며,

세션 객체에 바인딩된 이름 출력

 

"세번 째 페이지로 이동"을 클릭해 보면, session1.jsp에서 세션 객체에 바인딩한 address에 대한 값이 같이 출력된다.

세션 객체에 바인딩된 이름과 주소 출력

 

application 내장 객체 데이터 바인딩

- 이번에는 application 내장 객체에 데이터를 바인딩한다.

 

* appTest1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	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

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	String name=(String)session.getAttribute("name");
	String address = (String)application.getAttribute("address");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>내장 객체 스코프 테스트2</title>
</head>
<body>
	<h1>이름은 <%=name %>입니다.</h1>
	<h1>주소는 <%=address %>입니다.</h1>
</body>
</html>

 

- 코드 작성 후 /appTest1.jsp에 접속해 본다.

이름과 주소를 바인딩

 

- "두 번째 웹 페이지로 이동" 링크를 클릭해 보면 이름과 주소가 출력된다.

세션과 애플리케이션에 바인딩된 값

 

- 다른 브라우저에서 /appTest2.jsp 로 바로 접근하면 이름은 null로 출력될 것이다.

이름은 바인딩되지 않았다

 

- 이름은 세션 객체에 바인딩되는데, 새로운 브라우저로 접근 시 세션에 이름에 대한 값이 바인딩되지 않았기 때문이다.

 

reqeust 내장 객체 데이터 바인딩

- request 내장 객체에 데이터를 바인딩한다.

 

* request1.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	request.setAttribute("name","이순신");
	request.setAttribute("address","서울시");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>request 내장객체테스트 1</title>
</head>
<body>
<%
	RequestDispatcher dispatcher = request.getRequestDispatcher("request2.jsp");
	dispatcher.forward(request, response);
%>
</body>
</html>

 

* request2.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
	String name = (String)request.getAttribute("name");
	String address= (String)request.getAttribute("address");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>request 내장 객체 바인딩 테스트2</title>
</head>
<body>
	<h1>이름은 <%=name %></h1>
	<h1>주소는 <%=address %></h1>
</body>
</html>

 

- 코드 작성 후 /request1.jsp 에 접근하면 request 객체에 값을 바인딩하고 /request2.jsp로 포워딩한다.

 

바인딩 후 /request2.jsp로 포워딩

 

out 내장 객체

- out 내장 객체를 이용해 데이터를 출력한다.

* out1.jsp

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

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>out 내장 객체 테스트 1</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

<%@ 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>out 내장 객체 테스트 2</title>
</head>
<body>
<%
	if(name!=null || name.length() != 0){
%>
<h1><%=name %>, <%=age %></h1>
<%
	}else{
%>
	<h1>이름을 입력하세요!</h1>
<%
	}

	if(name!=null || name.length() != 0){
%>	
	<!-- name과 age의 값을 out 내장 객체로 출력한다. -->
	<h1><% out.print(name + ", " + age); %></h1>
<%
	}else{
%>
	<h1>이름을 입력하세요!</h1>
<%
	}
%>
</body>
</html>

 

- /out1.jsp 페이지에서 이름과 비밀번호를 입력하고 [전송] 버튼을 누른다.

출력 결과

- 값 출력 시 <%= ... =%>와 같이 표현식을 사용해도 되고, <% out.print( ... ) %> 와 같이 스크립틀릿 안에 out 객체를 사용하여 출력할 수도 있다(스클립틀릿은 자바 코드를 작성하는 요소다).

반응형

'JSP' 카테고리의 다른 글

[JSP]Welcome 파일 지정  (0) 2024.08.14
[JSP]예외 처리  (0) 2024.08.14
[JSP]스크립트 요소 사용 예  (0) 2024.08.14
[JSP]스크립트 요소(선언문, 스크립틀릿, 표현식, 주석문)  (0) 2024.08.13
JSP의 구성 요소  (0) 2024.08.13
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함