JSP 내장객체
객체는 메서드 수행 객체를 의미한다.
1. exception 내장객체
다음은 JSP파일을 작성하는 중 에러가 발생한 예시이다.

n2의 값이 0인데 n2로 n1을 나눠서 발생한 오류이다.
위 오류의 해결방안으로는
1) n2를 0이 아닌 다른 정수로 설정하거나
2) try-catch를 사용해서 예외처리를 하거나
3) 에러 페이지로 이동 처리를 하는 방법이 있다.
에러페이지를 error.jsp로 새로 만들고 error폴더를 하나 만들어서 저장해준다.
( 폴더별로 관리하면 응집도를 높일 수 있어서 유지보수가 용이해진다. )
error.jsp 페이지 지시어에 errorPage="error/error.jsp" 를 넣은 뒤
기존 JSP 페이지 지시어에 isErrorPage="true" 설정을 추가하면 에러가 나면 error.jsp의 페이지로 넘어간다.
<%= exception %>는 에러페이지에 넣을 수 있는데
page 지시어에 isErrorPage="true" 설정을 추가하면 exception 객체를 내장해주기 때문에
사용할 수 있다.
2. out 내장객체
웹 브라우저 화면에 html을 그리는 역할을 한다.
Servlet 실습에서는 기본제공되지않아서 선언하여 사용한다.
하지만, JSP에는 내장되어 있기 때문에 별도 선언 없이 사용할 수 있다.
3. request
선언을 하지 않아도 사용가능하고, response와 짝궁이다.
요청 객체이며 METHOD 요청 전달 방식을 확인하고 getParameter 파라미터를 받아올 때 사용한다.
4. response
다양한 응답을 할 수 있다.
응답 객체로 여러 응답 방법 중 대표적인 out 객체를 생성해서 웹 브라우저 화면에 HTML 문서를 작성할 수 있다.
.sendRedirect(); 리다이렉트 방식으로도 응답 가능하다.
5. 파라미터를 옮길 수 있는 내장객체들
데이터를 옮길 수 있는 내장객체들에는 크게 3가지가 있다.
1) request
새로운 요청을 수행하면 기존의 정보들이 사라진다.
.getParameter();
ex) 리다이렉트는 새로운 요청
.sendRedirect(); 하니까 기존의 값이 사라져 버린다.
↓↓↓요청을 할때마다(버튼을 누를때마다) 데이터가 사라져버리면 안됨!!!
2) session
요청을 할때마다(버튼을 누를때마다) 데이터가 사라져버리면 안되서
기존의 창을 닫으면 기존의 정보들이 사라지게 할 때 사용된다.
시간이 정해져있어서 기존의 창이 유지되더라도, 일정 시간이 지나면 기존의 정보들이 사라진다.
.setAttribute();, .getAttribute();
ex) 네이버의 로그인 정보
ex) 금융권 어플의 로그인 연장 버튼
3) application
포워드 vs 리다이렉트
1. URL이 변화가 없을 때
페이지 주도권은 포워드 요청을 수행한 페이지가 그대로 가지고 있고,
사용자에게 보여지는 웹 페이지만 넘겨준다.
URL에 변화가 없다.
== 새로운 요청이 없다.
== 파라미터가 유지됨
== request 내장객체가 유지됨
== 동일한(하나의) 요청
2. URL이 변경되었을 때
== 새로운 요청이다.
== request 내장객체가 새로 생성되었다.
== 다른 요청이다.
== 파라미터가 삭제되어 유지되지못한다.
※ 없는 파라미터를 요청하는 코드는 에러가 아니다.
==just NULL 반환
다음은 jsp내장객체를 이용하여 장바구니에 물건을 담는 프로그램을 제작했다.
- 요구 사항
d.jsp 페이지에서 이름을 입력하여 e.jsp 페이지로 이동합니다.
e.jsp 페이지에는 상품들이 select 박스에 제공되어있습니다.
상품은 내가 하고 싶은대로 5개 정도 제공해주세요.
[장바구니에 추가] 버튼을 눌러서 해당상품을 추가합니다.
[계산하기] 버튼을 눌러서 지금까지 장바구니에 담았던 상품들을 모두 출력합니다.
f.jsp 페이지에서 장바구니에 select에서 선택한 상품을 추가 해주세요.
g.jsp 페이지에서 장바구니에 저장했던 상품들을 출력해주세요.
<d.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>
<form action="e.jsp" method="POST"> <!-- 폼을 만들어서 -->
<input type="text" name="name" required placeholder="이름을 입력하세요"> <!-- 이름을 입력받은뒤 -->
<input type="submit" value="로그인"> <!-- 로그인 버튼을 누르면 -->
</form> <!-- e.jsp로 넘어간다 -->
</body>
</html>
<e.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.ArrayList"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>상품 담기 페이지</title>
</head>
<body>
<%
String name=request.getParameter("name"); // a에서 입력받은 값을 name 변수에 저장
if(name!=null) { // name이 null이 아니면 // 처음 받아왔다면
session.setAttribute("member", name); // session member에 저장
}
String member=(String)session.getAttribute("member"); // 저장한 값 가져와서 member 변수에 저장
ArrayList<String> datas=(ArrayList<String>)session.getAttribute("datas"); // session datas를 배열으로 형변환해서 datas 배열에 담는다.
%>
<form action="f.jsp" method="POST"> <!-- 폼 만든 뒤 -->
<select name="option"> <!-- select박스에 상품 5개 제공 -->
<option>사과</option>
<option>참외</option>
<option>포도</option>
<option>딸기</option>
<option>자몽</option>
</select> <!-- select 한 뒤 -->
<input type="submit" value="장바구니에 추가"> <!-- 장바구니 추가 누르면 해당상품 장바구니 배열에 추가 -->
</form>
<form action="g.jsp" method="POST">
<input type="submit" value="계산하기"> <!-- 계산하기 버튼 누르면 -->
</form> <!-- 장바구니 배열 전체 출력페이지로 넘어감 -->
</body>
</html>
<f.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.ArrayList"%>
<%
String op=(String)request.getParameter("option"); // select에서 선택한 값을 op배열에 저장
ArrayList<String> datas=(ArrayList<String>)session.getAttribute("datas"); // session에 저장된 datas를 배열로 형변환 후 datas에 저장
if(datas == null){ // 첫 상품담기 // null이면 상품이 장바구니에 없는 것이니까
datas=new ArrayList<String>(); // 생성자를 새로 생성해준 뒤
session.setAttribute("datas", datas); // session의 datas에 datas배열(현재 비어있어서 null) 저장
}
datas.add(op); // op변수 배열에 저장
out.println("<script>alert('장바구니에 "+op+" 추가');history.go(-1);</script>");
// response.sendRedirect("e.jsp"); // e에 다시 보낸다.
%>
<g.jsp>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.ArrayList"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>장바구니 전체 출력 페이지</title>
</head>
<body>
<%
ArrayList<String> datas=(ArrayList<String>)session.getAttribute("datas"); // session에 저장된 datas를 배열로 형변환 후 datas에 저장
session.removeAttribute("datas");
if(datas!=null) { // datas가 null값이면 아직 상품을 안담은 것이니 null이 아니면 상품이 있다. %>
장바구니 목록<hr>
<ul>
<% for(String data:datas) { // datas 배열에 들어있는 개수 만큼 %>
<li><%= data // 데이터를 ul 언오더리스트로 리스트출력
%></li>
<% } %>
</ul>
<%
}
else {
out.println("장바구니에 상품이 없습니다..."); // null값이면 담긴 상품이 하나도 없으니까 없다고 출력
}
%>
<form action="d.jsp" method="POST">
<input type="submit" value="처음으로 돌아가기">
</form>
</body>
</html>
2024.08.07
'WEB' 카테고리의 다른 글
| [WEB] 04. MVC파트 나눠서 쇼핑몰 프로그램 설계하기 (0) | 2024.08.12 |
|---|---|
| [WEB] 03-1. Session scope 맞추기 (0) | 2024.08.12 |
| [WEB] 02-2. JSP의 스크립트릿(JAVA 공간)을 JAVA파일로 나누기 (0) | 2024.08.06 |
| [WEB] 02-1. JSP (2) | 2024.08.06 |
| [WEB] 01. Servlet (0) | 2024.08.06 |