JSP 스크립트 요소 기능(2)

허다람·2022년 3월 6일
0

Spring

목록 보기
4/5
post-thumbnail

내장 객체(내장 변수) 기능

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

JSP에서 제공하는 내장 객체들

내장 객체서블릿 타입설명
requestjavax.servlet.http.HttpServletRequest클라이언트의 요청 정보를 저장한다.
responsejavax.servlet.http.HttpServletResponse응답 정보를 저장한다.
outjavax.servlet.jsp.JspWriterJSP 페이지에서 결과를 출력한다.
sessionjavax.servlet.http.HttpSession세셩 정보를 저장한다.
applicationjavax.servlet.ServletContext컨텍스트 정보를 저장한다.
pageContextjavax.servlet.jsp.PageContextJSP 페이지에 대한 정보를 저장한다.
pagejavax.lang.ObjectJSP 페이지의 서블릿 인스턴스를 저장한다.
configjavax.servlet.ServletConfigJSP 페이지에 대한 설정 정보를 저장한다.
exceptionjavax.lang.Exception예외 발생 시 예외를 처리한다.

내장 객체들의 스코프

내장 객체서블릿스코프
pagethis한 번의 요청에 대해 하나의 JSP 페이지를 공유한다.
requestHttpServletRequest한 번의 요청에 대해 같은 요청을 공유하는 JSP 페이지를 공유한다.
sessionHttpSession같은 브라우저에서 공유한다.
applicationServletContext같은 애플리케이션에서 공유한다.

내장 객체 예제 실습

session 내장 객체에 데이처 바인딩 실습

<SessionTest.java>

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("/SessionTest")
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='/javaWebPro/test01/session1.jsp'>첫 번째 페이지로 이동하기</a>");
		pw.println("</body></html>");
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

		doGet(request, response);
	}

}

<session1.jsp>

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
	String name=(String)session.getAttribute("name"); // session 객체에 바인딩 된 name 값을 가져온다.
session.setAttribute("address","서울시 강남구"); // session 객체에  ad
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>내장 객체 테스트2</title>
</head>
<body>
	이름은 <%=name %>입니다. <br>
	<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 %>입니다. <br>
</body>
</html>

실행 결과


최초 서블릿에 요청한 결과이다. 서블릿 요청 시 session 객체에 name을 바인딩 한다.

첫 번째 페이지로 이동하기 클릭 시 서블릿에거 바인딩한 name을 출력한다. 두번째 페이지로 이동을 클릭한다.

서블릿과 첫 번째 JSP에서 바인딩한 이름(name)과 주소(address)를 출력한다.


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>내장 객체 스코프 테스트</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>내장 객체 스코프 테스트</title>
</head>
<body>
	<h1>이름은 <%=name %>입니다.</h1>
	<h1>주소는 <%=address %>입니다.</h1>
</body>
</html>

실행 결과


같은 브라우저에서 요청 할 경우 두 번째 JSP에서 session과 application에 접근할 수 있다.

다른 브라우저에서는 application의 값에만 접근 가능한 것을 확인할 수 있다.


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>Insert title here</title>
</head>
<body>
<%
	RequestDispatcher dispatch = request.getRequestDispatcher("request2.jsp");
	dispatch.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>Insert title here</title>
</head>
<body>
	<h1>이름은 <%=name %>입니다.</h1>
	<h1>주소는 <%=address %>입니다.</h1>
</body>
</html>

실행 결과


브라우저에서 request1.jsp로 요청하면 request 객체에 바인딩한 후 request2.jsp로 포워딩하여 이름과 주소를 출력한다.


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

<out1.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>

<%@ 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>
<%
	}else{
%>
	<h1>이름을 입력하세요</h1>
<%
	}
%>

<%
	if(name!=null || name.length()!=0){
%>
	<h1><% out.println(name+" , "+age); %></h1>
<%
	}else{
%>
	<h1>이름을 입력하세요</h1>
<%
	}
%>
</body>
</html>

실행 결과


브라우저에서 요청하여 이름과 나이를 입력한 후 전송하면

전달받은 정보를 표현식과 out 내장 객체로 출력한다.


JSP 페이지 예외 처리

페이지 예외 처리란 프로그램 실행 시 예외나 오류가 발생할 경우 이를 안내하는 페이지다. 즉 전용 예외 처리 페이지가 나타나게 하여 좀 더 신뢰 있고 사용자 친화적은 웹 페이지를 만들 수 있게 한다.

profile
나 java봐라

0개의 댓글