Model 2
- Controller 클래스 만들때 Java Servlet 으로 만든다
- View 페이지에 출력할때 표현 언어(EL) 사용
- JSTL 사용자 정의 태그 : 태그를 만들어서 사용 <%@ taglib %>
-> Model 2 전에 Java Servlet, EL(표현언어), JSTL 학습할 것
Spring
- Model 2 빠른 개발 위한 프레임 워크
내장 객체 메소드 찾아보기
- Java EE 라이브러리의 클래스/인터페이스를 찾아서 내장객체 사용
- Java EE 라이브러리는 Apache Tomcat 에 설치되어있다
ex) JavaEE -> Apache Tomcat lib 폴더의 servlet-api.jar 파일 안에 있다
JSP의 영역
- 4가지 영역에 대한 각각의 내장 객체들이 공유 영역 설정
기본 객체 | 영역 | 쓰임새 |
pageContext | PAGE | (한번의 요청을 처리하는) 하나의 JSP 페이지 내에서 공유될 값을 저장한다 |
request | REQUEST | 한번의 요청을 처리하는데 사용되는 모든 JSP 페이지에서 공유될 값을 저장한다 |
session | SESSION | 한 사용자와 관련된 정보를 JSP 들이 공유하기 위해서 사용된다 |
application | APPLICATION | 모든 사용자와 관련해서 공유할 정보를 저장한다 |
- PAGE 영역 : 페이지를 벗어나면 공유 불가, 변수에 저장하면 되므로 잘 사용하지 않음
- SESSION 영역 : 회원가입에서 많이 사용, 로그인시 세션 설정, 로그아웃시 세션 끊기
- REQUEST 영역 : 현재 공유설정했으면 이 페이지부터 다음 페이지까지가 공유 영역
- APPLICATION 영역 : 다른 폴더 내에서도 공유 가능
- 모든 객체에서 각 영역에 대해 공유 설정하고 공유 값을 얻어오는 메소드가 같다
ex) setAttribute() 로 공유 설정, getAttribute() 로 공유 값 얻어오기 는 각 객체가 동일
pageContext
- 개별적인 page 하나가 PAGE 영역이 됨
session
- 세션들마다 아이디를 하나씩 부여해서 서버측 메모리에 저장함
- 한번 세션 연결하면 세션을 연결한 같은 종류의 브라우저끼리는 그 세션 id 를 공유하므로 연결상태 유지가능
- 주로 로그인시 session 을 연결하고 로그아웃시 session 을 끊으므로 그 사이가 범위가 된다
request
- REQUEST 영역은 특정 페이지에서 request 객체로 공유 설정하면 그 다음 페이지까지 일반적으로 request 영역
- 뷰페이지에 request 객체로 공유한 값을 뿌려주기 위해서 EL (표현언어) 사용
- 공유한 값들은 Controller 를 통해서 뷰페이지에 뿌려줄때 공유된 값을 쉽게 쓰기 위해서 표현언어 사용
- REQUEST 영역은 PAGE 보다 넓고 SESSION 보다 좁음
- request 객체는 클라이언트의 get/post 요청을 받기도 하지만 영역에 관련된 내장객체이기도 하다
JSP의 영역 예제
실습 준비
JSP의 영역 예제 1
APPLICATION 영역과 SESSION 영역
- attributeTest1_Form.jsp & attributeTest1.jsp & attributeTest2.jsp & attributeTest3.jsp
- attributeTest1_Form.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<html>
<head>
<title>Attribute Test Form</title>
</head>
<body>
<h2>영역과 속성 테스트</h2>
<form action="attributeTest1.jsp" method="post">
<table border="1">
<tr><td colspan="2">Application 영역에 저장할 내용들</td></tr>
<tr>
<td>이름</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>아이디</td>
<td><input type="text" name="id"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="전송"></td>
</tr>
</table>
</form>
</body>
</html>
- Application 영역에 저장할 내용들을 입력
- 가입하는 양식 폼, action 값이 attributeTest1.jsp
- Application 영역에 저장할 값인 이름, 아이디
- get/post 등으로 값을 넘긴게 아니라 공유한 값을 가져와서 뿌린 것이다.
- attributeTest1.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<html>
<head>
<title>Attribute Test</title>
</head>
<body>
<h2>영역과 속성 테스트</h2>
<%
request.setCharacterEncoding("euc-kr");
String name=request.getParameter("name");
String id=request.getParameter("id");
if(name!=null&&id!=null){
// application 객체로 공유 설정
application.setAttribute("name",name);
application.setAttribute("id",id);
}
%>
<h3><%=name %>님 반갑습니다.<br><%=name %>님의 아이디는 <%=id %>입니다.</h3>
<form action="attributeTest2.jsp" method="post">
<table border="1">
<tr><td colspan="2">Session 영역에 저장할 내용들</td></tr>
<tr>
<td>e-mail 주소</td>
<td><input type="text" name="email"></td>
</tr>
<tr>
<td>집 주소</td>
<td><input type="text" name="address"></td>
</tr>
<tr>
<td>전화번호</td>
<td><input type="text" name="tel"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="전송"></td>
</tr>
</table>
</form>
</body>
</html>
<인코딩>
- post 방식으로 한글 값을 받았으므로 한글 인코딩 문제를 해결하기 위해 request.setCharaterEncoding() 으로 인코딩
- 위쪽에서 charset 이 EUC-KR 이므로 EUC-KR 로 값을 인코딩 시킨다
<값 받음>
- name != null && id != null 은 이름과 아이디를 잘 받았다면 이라는 의미
- 이전 파일 attributeTest1_Form.jsp 에서 사용자가 입력한 이름, 아이디를 request.getParameter() 로 값을 받음
- 그리고 받은 값을 화면에 뿌림
<공유 설정>
- 가장 넓은 영역인 APPLICATION 영역에 공유설정, 전체 어플리케이션이 하나의 영역이다
- 그 값들을 application 객체의 setAttribute() 메소드로 APPLICATION 영역 공유 설정함
- 폴더가 달라지더라도 공유한 값을 구해올 수 있는 영역이다, 페이지가 몇단계 넘어가더라도 공유한 값 가져올 수 있다
<입력>
- SESSION 영역에 공유 설정할 값을 입력하는 입력창을 만듬
- 입력받은 값을 post 방식으로 attributeTest2.jsp 파일로 전송
- attributeTest2.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<html>
<head>
<title>Attribute Test</title>
</head>
<body>
<h2>영역과 속성 테스트</h2>
<%
request.setCharacterEncoding("euc-kr");
String email=request.getParameter("email");
String address=request.getParameter("address");
String tel=request.getParameter("tel");
// session 객체로 공유 설정
session.setAttribute("email",email);
session.setAttribute("address",address);
session.setAttribute("tel",tel);
String name=(String)application.getAttribute("name");
%>
<h3><%=name %>님의 정보가 모두 저장되었습니다.</h3>
<a href="attributeTest3.jsp">확인하러 가기</a>
</body>
</html>
- 인코딩 이후 attributeTest1.jsp 파일에서 넘어온 값을 getParameter() 메소드로 받음
- 그 값들을 session 객체의 setAttribute() 메소드로 SESSION 영역에 공유 설정함
- 그리고 APPLICATION 영역에 공유설정되어있던 이름값을 가져오고 뿌린다
- 확인하러 가기 를 클릭시 attributeTest3.jsp 파일로 넘어간다, 값 전달하며 넘어가는 것이 아니라 그냥 하이퍼링크로 넘어간다
- attributeTest3.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@page import="java.util.Enumeration"%>
<html>
<head>
<title>Attribute Test</title>
</head>
<body>
<h2>영역과 속성 테스트</h2>
<table border="1">
<tr><td colspan="2">Application 영역에 저장된 내용들</td></tr>
<tr>
<td>이름</td>
<td><%=application.getAttribute("name") %></td>
</tr>
<tr>
<td>아이디</td>
<td><%=application.getAttribute("id") %></td>
</tr>
</table>
<br>
<table border="1">
<tr><td colspan="2">Session 영역에 저장된 내용들</td></tr>
<%
Enumeration e=session.getAttributeNames();
while(e.hasMoreElements()){
String attributeName=(String)e.nextElement();
String attributeValue=(String)session.getAttribute(attributeName);
%>
<tr>
<td><%=attributeName %></td>
<td><%=attributeValue %></td>
</tr>
<%
}
%>
</table>
</body>
</html>
- 앞에서 application 객체와 session 객체로 공유한 값들을 구해오서 표에서 출력
- 페이지가 계속 넘어가고 값을 전달하지 않았지만 공유가 되기때문에 값을 구해올 수 있다
- APPLICATION 영역의 공유 값을 name, id 라는 속성(네임) 으로 구한다, 언제든지 구해올 수 있는 값이다
+ APPLICATION 영역 공유값은 서로 다른 폴더에서도 구해올 수 있다
- SESSION 영역의 공유 값을 구해올 때는 해당 네임 값을 모르는 경우에 네임과 값을 구해오는 방식이다.
+ 원래는 SESSION 영역의 시간을 정하지만 여기선 설정하지 않았으므로 브라우저를 닫을때 까지이다.
- 페이지가 넘어갈때마다 값을 전달하지 않아도 값을 공유시키면 된다
- 네임 값을 아는 경우 공유 값을 구하는 코드로 바꾸자 (아래 코드)
<tr>
<td>email</td>
<td><%=session.getAttribute("email") %></td>
</tr>
<tr>
<td>tel</td>
<td><%=session.getAttribute("tel") %></td>
</tr>
<tr>
<td>address</td>
<td><%=session.getAttribute("address") %></td>
</tr>
</table>
- 전체 출력
- 현재 get/post 등으로 값을 넘긴게 아니라 공유한 값을 가져와서 뿌린 것이다.
JSP의 영역 예제 2
PAGE 영역과 REQUEST영역
- attributeTest4.jsp & requestTest5Result.jsp
- attributeTest4.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
pageContext.setAttribute("pageScope", "pageValue");
request.setAttribute("requestScope", "requestValue");
%>
pageValue = <%=pageContext.getAttribute("pageScope") %><br>
requestValue = <%=request.getAttribute("requestScope") %>
</body>
</html>
- pageContext 객체로 PAGE 영역 공유 설정하고 있다
- request 객체로 REQUEST 영역 공유 설정하고 있다
- 아래에서 getAttribute() 메소드로 공유 설정한 각 영역의 공유값들을 구해온다
- PAGE 영역은 하나의 페이지 내에서 공유 가능, 변수를 만들고 변수값을 출력할 수 있는 방법이 있기에 잘 쓰지 않는다
- REQUEST 는 다음 페이지까지 공유 가능
- PAGE 영역 공유설정시엔 page 객체가 아니라 pageContext 객체로 공유설정을 해야한다
- requestTest5.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
pageContext.setAttribute("pageScope", "pageValue");
request.setAttribute("requestScope", "requestValue");
%>
<jsp:forward page="requestTest5Result.jsp"></jsp:forward>
</body>
</html>
- 이 문서 실행 시 pageContext 와 request 객체로 공유설정하는 내용은 앞의 예제와 같다
- PAGE 영역과 REQUEST 영역에 공유 설정만 하는 코드
- jsp 의 태그 중 하나인 action 태그인 forward action 태그 이다, 이 태그를 만나면 지정된 페이지로 이동함
- requestTest5Result.jsp 페이지로 바로 이동함
- requestTest5Result.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
pageValue = <%=pageContext.getAttribute("pageScope") %><br>
requestValue = <%=request.getAttribute("requestScope") %>
</body>
</html>
- 페이지가 바뀌었으므로 PAGE 영역 범위를 벗어나므로 pageContext 객체로 공유된 값은 사용 불가, null 로 나올 것
- REQUEST 영역은 페이지가 한단계 이동하면 거기까지가 REQUEST 영역이므로 request 객체로 공유한 값 사용 가능
- 즉 이전페이지에서 request 객체로 공유 설정했으므로 한단계 이동한 페이지인 이 페이지까지 유효한 범위임
+ 개별적인 페이지 하나가 PAGE 영역
+ 기타 객체
- config 객체 : 환경 설정 파일에 대해서 사용
- exception 객체 : 예외처리시 주로 사용
JSP의 영역 예제
실습 준비
JSP의 영역 예제 3
- login.jsp & selProduct.jsp
- login.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>login.jsp</title>
</head>
<body>
<center>
<H2>로그인</H2>
<form name="form1" method="POST" action="selProduct.jsp">
<input type="text" name="username"/>
<input type="submit" value="로그인"/>
</form>
</center>
</body>
</html>
- '로그인' 버튼 클릭시 selProduct.jsp 로 입력한 id 값을 post 방식 값 전달
- selProduct.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>selProduct.jsp</title>
</head>
<%
// HTML FORM 에서 전달된 데이터의 한글인코딩
request.setCharacterEncoding("euc-kr");
// session 에 username 이름으로 HTML FORM 의 <input type="text" name="username"/> 에 입력된 값을 저장함.
session.setAttribute("username",request.getParameter("username"));
%>
<body>
<center>
<H2>상품선택</H2>
<HR>
<%=session.getAttribute("username") %>님이 로그인 한 상태 입니다.
${username}
<HR>
<form name="form1" method="POST" action="add.jsp">
<SELECT name="product">
<option>사과</option>
<option>귤</option>
<option>파인애플</option>
<option>자몽</option>
<option>레몬</option>
</SELECT>
<input type="submit" value="추가"/>
</form>
<a href="checkOut.jsp">계산</a>
</center>
</body>
</html>
- 한글값이 username 이라는 네임값이 post 방식으로 전달되므로 한글값 인코딩 처리를 한다
- request.getParameter() 메소드로 네임인 username 을 통해 전달된 값을 받는다
- 받은 그 값을 SESSION 영역에 공유 설정한다, 여기서부터 SESSION 영역이 시작된다
+ 페이지가 바뀌더라도 사용가능
- select-option 에서 값을 선택하고 '추가' 를 누르면 form 을 통해 add.jsp 로 선택값이 넘어감
+ select-option 에서 option 에 value 값이 없을때는 option 태그 안에 쓰인 값이 value 로 넘어감, 즉 select 태그의 name 인 product 변수에 선택된 '사과' 가 저장됨
- '계산' 을 누르면 checkOut.jsp 로 페이지 이동
+ 코드에서 EL(표현언어) 를 통해 한번 더 아이디를 출력하고 있음
- 이게 표현언어이다.
- '추가' 시 장바구니에 과일이 담김 (add.jsp)
- 이런식으로 다른 과일들을 몇개 추가
- 장바구니에 담긴 과일들을 보여줌 (checkOut.jsp)
- add.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR" import="java.util.ArrayList"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
// HTML 폼에서 입력된 한글 처리를 위한 부분
request.setCharacterEncoding("euc-kr");
// product 속성으로 전달된 파라미터를 읽어옴.
String productname = request.getParameter("product");
// session scope 에 저장된 productlist 라는 이름의 ArrayList 객체를 가지고 옴.
ArrayList list = (ArrayList)session.getAttribute("productlist");
// 만일 null 인 경우 처음 데이터를 추가한 것이므로 새로운 ArrayList 생성
if(list == null) {
list = new ArrayList();
}
// ArrayList 에 새로운 데이터 추가
list.add(productname);
session.setAttribute("productlist",list);
%>
<!-- 자바스크립트를 이용해 간단한 메시지 출력 -->
<script>
alert("<%=productname %> 이(가)추가 되었습니다.!!");
history.go(-1);
</script>
</body>
</html>
- 한글값이 post 방식으로 넘어오므로 euc-kr로 인코딩 처리를 함
- select 의 name 값이었던 product 변수(속성, 네임) 을 통해 getParameter() 로 선택된 값을 구해서 productname 변수에 저장
- 처음에 아무것도 추가하지 않았기 때문에 이 list 는 null 이다, 그래서 null 인 경우 ArrayList 객체를 만들어줌
- 메세지박스로 추가된 과일 알려주고 그 후 상품을 선택할 수 있게끔 이전 파일로 돌아감
'추가' 된 과일들을 장바구니에 저장
// session scope 에 저장된 productlist 라는 이름의 ArrayList 객체를 가지고 옴.
ArrayList list = (ArrayList)session.getAttribute("productlist");
- 세션에 저장된 값을 구하기 위해 getAttribute("productlist") 사용, 이 productlist 를 세션 영역 공유 설정한 것은 아래 코드
- 처음에 아무것도 추가하지 않았기 때문에 이 list 는 null 이다, 그래서 null 인 경우 ArrayList 객체를 만들어줌
- Object 로 리턴하고 저장된 값이 리스트이므로 ArrayList로 다운캐스팅 하는 것이다
// ArrayList 에 새로운 데이터 추가
list.add(productname);
session.setAttribute("productlist",list);
- 정의된 리스트에 add() 로 추가된 과일을 저장한다
- session.setAttribute("productlist", list); 를 통해 세션에 리스트를 저장함, setAttribute() 에서 두번째 매개변수는 Object 이므로 리스트 또한 들어갈 수 있다
- 사용자가 다시 다른 과일(자몽) 선택후 추가시 위의 코드 getAttribute() 에서 리스트를 구해오고 아래코드로 리스트에 자몽을 추가하고 그 리스트를 세션 영역 공유 설정
+ 세션 영역은 브라우저 창을 닫는 순간 또는 invalidate() 로 세션 전체삭제나 removeAttribute() 로 세션 삭제로 세션을 끊을때까지 유효함
- checkOut.jsp
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR" import="java.util.ArrayList"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<center>
<H2>계산</H2>
선택한 상품 목록
<HR>
<%
// session scope 에 저장된 productlist 라는 이름의 ArrayList 객체를 가져옴.
ArrayList list = (ArrayList)session.getAttribute("productlist");
// 선택한 상품이 하나도 없는 경우
if(list == null) {
out.println("선택한 상품이 없습니다.!!!");
}
else {
// 선택한 상품이 있을 경우 리스트를 출력함.
for(Object productname:list) {
out.println(productname+"<BR>");
}
}
%>
</center>
</body>
</html>
- 세션에 공유된 list 를 getAttribute() 로 list 를 구한다, 리스트 객체가 저장되어있으므로 ArrayList 로 다운캐스팅 한다
- '계산' 을 눌렀을 당시 선택한 제품이 하나도 없는 경우 list 는 null
- 선택한 제품이 있을때는 향상된 for 문으로 그 list 에서 하나씩 가져와서 출력한다
+ request 객체로 영역설정은 Model 2 에서 자주 사용한다
-게시판 쪽의 목록을 가져오기 위한 Service 클래스 에서 View 페이지에서 필요한 값들을 request 객체로 공유 설정
- 사용자가 선택한 page 번호 등을 request 객체로 공유 설정
+ 지금은 getAttribute() 로 값을 가져오는데 나중엔 request.getAttribute(name값) 로 값을 받아와서 다운캐스팅, 언박싱 하는 번거로운 방법 대신 표현 언어(EL) 를 사용해서 ${listcount} 하면 공유값 가져오기부터 출력까지 바로 가능
+ session 은 로그인 성공시 session 객체로 공유 설정
+ 자바 클래스에선 session 내장 객체가 없으므로 request.getSession() 으로 받아서 사용
JSP 내장 객체 (이어서)
application 객체
- 가장 넓은 영역에 공유 설정하는 객체
application 객체 예제
실습 준비
application 객체 예제
- setApplicationAttribute.jsp
<%@ page contentType = "text/html; charset=euc-kr" %>
<%
// String name = request.getParameter("name");
// String value = request.getParameter("value");
String name = "test";
String value = "1234";
if (name != null && value != null) {
application.setAttribute(name, value); // 공유 설정
// application.setAttribute("test", "1234"); // 위와 같다
}
%>
<html>
<head><title>application 속성 지정</title></head>
<body>
<%
if (name != null && value != null) {
%>
application 기본 객체의 속성 설정:
<%= name %> = <%= value %>
<%
} else {
%>
application 기본 객체의 속성 설정 안함
<%
}
%>
</body>
</html>
- application 객체로 APPLICATION 영역에 공유설정되었으므로 폴더가 달라져도 공유한 값을 쓸 수 있다
- 공유되는 name 은 test, 값은 1234
+ 이 파일을 실행해야 APPLICATION 영역에 공유 설정됨
- 폴더가 다른 곳에서 공유한 값을 불러오자
- WebContent/index.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>
처음 작성하는 JSP 프로그램 <br>
application 객체로 공유한 값:
<%=application.getAttribute("test") %>
</body>
</html>
- APPLICATION 영역에 공유설정된 값은 폴더가 달라져도 공유한 값을 쓸 수 있다
+ 영역이 너무 넓기때문에 자주 사용되지는 않는다
JSP 에러처리
JSP 에러처리 두가지 방법
1. 각 페이지별로 에러 처리
2. web.xml 파일에 에러 코드(종류)별로 등록
+ web.xml 은 아파치 톰캣 구동시 가장 먼저 실행되는 환경설정 파일
1. 각 페이지별로 에러 처리
- 페이지 지시어태그에서 사용할 수 있는 속성 4가지 중 에러 처리 관련 속성이 2가지 있다
1) errorPage 속성으로 경로와 에러 페이지명으로 파일을 지정
<%@ page errorPage = "예외발생시보여질JSP지정" %>
2) 그 파일에서 isErrorPage 속성을 true로 지정 (기본값 false)
<% page isErrorPage = "true" %>
- isErrorPage 속성이 true 인 경우 에러 페이지로 지정
- errorPage 속성 : JSP 에서 에러처리할때, 에러를 보여줄 페이지명을 지정
- isErrorPage 속성 : 지정된 에러를 보여줄 페이지 안에서 true 로 설정해야함
3) 그 후 내장객체 exception 으로 에러 메세지를 구해와서 어떤 원인인지 출력
- exception 기본 객체 : 발생할 예외 객체
- exception.getMessage() : 예외메세지
- exception.printStackTrace() : 예외 추적 메세지 출력
2. web.xml 파일에 에러 코드(종류)별로 등록
- 404 에러를 web.xml 파일에 등록하면 404 에러가 발생했을때 하위에 location 으로 지정된 파일이 출력됨(실행됨)
- 500 에러를 web.xml 파일에 등록하면 500 에러가 발생했을때 하위에 location 으로 지정된 파일이 출력됨(실행됨)
- 에러 코드별 뿐만 아니라 에러 종류별로도 등록가능하다 ex) NullPointerException
JSP 에러처리 예제
실습 준비
- 'JSP 페이지의 에러 처리' 폴더 안의 내용을 가져옴
JSP 에러처리 예제 1
1. 각 페이지별로 에러 처리
- readParameter2.jsp (에러처리 안함) vs readParemeter1.jsp (에러처리 함) & error/viewErrorMessage.jsp (에러페이지)
- readParameter2.jsp
<%@ page contentType = "text/html; charset=utf-8" %>
<html>
<head><title>파라미터 출력</title></head>
<body>
name 파라미터 값: <%= request.getParameter("name").toUpperCase() %>
</body>
</html>
- 에러처리를 하지 않은 파일이다
- name 값을 전달해주는 파일이 없다, 전달되는 값이 없기때문에 500 번 에러 발생
- 500번 오류는 소스코드 상의 오류이다
+ 각 에러 상황별 코드가 있다
+ 값이 전달되지 않았는데 받는 경우 500 에러가 나온다
- 어디서 에러가 발생했는지 알려준다
에러 처리한 파일
- readParameter.jsp
<%@ page contentType = "text/html; charset=utf-8" %>
<%@ page errorPage = "/error/viewErrorMessage.jsp" %>
<html>
<head><title>파라미터 출력</title></head>
<body>
name 파라미터 값: <%= request.getParameter("name").toUpperCase() %>
</body>
</html>
- 500 번 메세지를 알려주는 창 말고 에러 메세지를 뿌리자
- errorPage 속성에 실제 에러를 보여줄 페이지를 지정한다
- erro 폴더 안의 viewErrorMessage.jsp 파일
- error/viewErrorMessage.jsp
<%@ page contentType = "text/html; charset=utf-8" %>
<%@ page isErrorPage = "true" %>
<html>
<head><title>에러 발생</title></head>
<body>
요청 처리 과정에서 에러가 발생하였습니다.<br>
빠른 시간 내에 문제를 해결하도록 하겠습니다.
<p>
에러 타입: <%= exception.getClass().getName() %> <br>
에러 메시지: <b><%= exception.getMessage() %></b>
</body>
</html>
<!--
만약 에러 페이지의 길이가 512 바이트보다 작다면,
인터넷 익스플로러는 이 페이지가 출력하는 에러 페이지를 출력하지 않고
자체적으로 제공하는 'HTTP 오류 메시지' 화면을 출력한다.
인터넷 익스플로러에서도 에러 페이지 내용을 올바르게 출력하려면
응답 결과에 이 주석과 같은 내용을 포함시켜서
에러 데이터가 512 바이트를 넘도록 해야 한다.
-->
- 지정된 파일인 viewErrorMessage 파일에도 isErrorPage 속성값을 "true" 로 설정해줘야한다
+ isErrorPage 속성 기본값이 false
- errorPage 속성과 isErrorPage 속성을 통해 500 번 오류 발생 대신 지정된 페이지 내용을 출력(실행)
- exception 객체를 이용해서 에러 타입과 에러 메세지를 구해온다.
JSP 에러처리 예제 2
+ 자바처럼 try-catch 구문 사용해서 에러 처리할 수도 있다
- try 문 안에 getParameter() 를 사용하고 catch 안에 파라미터가 올바르지 않습니다 라는 내용 출력
- readParameterWithTry.jsp
<%@ page contentType = "text/html; charset=utf-8" %>
<html>
<head><title>파라미터 출력</title></head>
<body>
name 파라미터 값:
<% try { %>
<%= request.getParameter("name").toUpperCase() %>
<% } catch(Exception ex) { %>
name 파라미터가 올바르지 않습니다.
<% } %>
</body>
</html>
JSP 에러처리 예제 3
1. 각 페이지별로 에러 처리
- bufferOverflow.jsp
- 에러페이지를 error/viewErrorMessage.jsp 로지정
<%@ page contentType = "text/html; charset=utf-8" %>
<%@ page buffer="1kb" %>
<%@ page errorPage = "/error/viewErrorMessage.jsp" %>
<html>
<head><title>버퍼 플러시 이후 에러 발생 결과</title></head>
<body>
<% for (int i = 0 ; i < 300 ; i++) { out.println(i); } %>
<%= 1 / 0 %>
</body>
</html>
- buffer 속성값은 기본값이 8kb, buffer 속성으로 크기를 1kb 로 수정
<에러발생>
1. 1 부터 300 까지 출력하기 전에 버퍼 공간이 부족해서 에러가 발생
2. 1을 0 으로 나눌때도 ArithmeticException 에러가 발생
- 에러 메세지를 보여줄 페이지를 viewErrorMessage.jsp 로 지정하고 있다
+ 그 후 viewErrorMessage.jsp 에서 isErrorPage 속성 "true" 로 해야한다
- 실행시
- viewErrorMessage.jsp 의 내용이 출력되고 있다
- 버퍼 공간이 부족해서 300까지 출력하지 못하고 있다
- 1 을 0 으로 나눌때 발생하는 ArithmeticException 예외가 발생했으므로 관련 내용이 여기 출력됨
- 첫번재 방법인 페이지마다 지정하는 방법은 페이지마다 errorPage 를 지정해야함
- 각 페이지별로 에러 처리하는 방법은 페이지가 적을때 가능한 페이지이다.
2. web.xml 파일에 에러 코드(종류)별로 등록
- 주로 web.xml 에 에러 코드, 에러 종류를 등록하는 방법을 사용한다
- 에러 코드(404, 500) 등록시 location 에 지정된 파일이 브라우저 창에 나타남
- 에러 종류(java.lang.NullPointException, java.lang.ArithmeticException) 등록시 location 에 지정된 파일이 브라우저 창에 나타남
- 페이지별 처리보다 간결하다
- 단점 : 개발 과정에서는 에러를 쉽게 찾기 힘듬
+ 404 : 주어진 위치에 해당 파일이 없을때 발생하는 에러
JSP 에러처리 예제
2. web.xml 파일에 에러 코드(종류)별로 등록
실습 준비
- web.xml 에 이 부분을 복붙
JSP 에러처리 예제 4
2. web.xml 파일에 에러 코드(종류)별로 등록
- web.xml & readParameter2.jsp
- web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
id="WebApp_ID" version="4.0">
<display-name>jspproject</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<error-page>
<error-code>404</error-code>
<location>/error/error404.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/error/error500.jsp</location>
</error-page>
<error-page>
<exception-type>java.lang.NullPointerException</exception-type>
<location>/error/errorNullPointer.jsp</location>
</error-page>
</web-app>
- web.xml 파일 : 환경설정 파일, 반드시 WEB-INF 폴더 안에 있어야만 한다
+ Apache Tomcat 이 구동될때 web.xml 의 코드를 가장 먼저 읽어옴
+ xml 의 규칙
- 전체를 감싸는 루트 엘리먼트
- 부모 엘리먼트, 자식 엘리먼트는 여러개 쓸 수 있다
- readParameter2.jsp 는 에러 처리를 하지 않은 파일이었다
- readParameter2.jsp
<%@ page contentType = "text/html; charset=utf-8" %>
<html>
<head><title>파라미터 출력</title></head>
<body>
name 파라미터 값: <%= request.getParameter("name").toUpperCase() %>
</body>
</html>
- 에러 처리를 하지 않은 파일
- web.xml 에 errorNullPointer 에러를 처리했으므로 readParameter.jsp 실행시 error/errorNullPointer.jsp 가 실행됨
- web.xml 에 에러 등록시 브라우저 창에 에러메세지가 보이지 않으므로 개발과정에서 에러를 찾기 힘들다
- 콘솔창에서는 어떤 에러가 발생했는지 확인 가능
+ 환경설정 파일 수정 후에는 서버 재구동되어야 반영됨
JSP 태그 (이어서)
지시어 태그
- 지시어 태그 3가지 태그 중 포함 태그 할 것
1) 페이지 태그 <%@ page %>
2) 포함 태그 <%@ include %>
3) 사용자 정의 태그 <%@ taglib %>
액션 태그
- jsp 액션 태그는 6가지 종류
- 그 중 forward 액션 태그와 include 액션 태그 할 것
- forward action 태그 : 지정된 페이지로 바로 이동시킴 <jsp:forward >
- include action 태그 : 다른 문서를 불러오는 용도로 사용 <jsp:include >
+ plugin action 태그 : 자바 애플릿을 불러오는 용도였는데 지금은 애플릿을 사용하지 않으므로 plugin action 태그사용하지 않음
+ usebean, setProperty, getProperty action 태그 : JAVA DAO/ DTO 클래스와 연결시 사용함
지시어 태그의 포함 태그 vs 액션 태그의 include action 태그
+ 다른 문서를 불러온다는 점은 같지만 내부적으로 차이가 있음
- 지시어 태그의 포함 태그 : 불러오는 파일과 불려지는 파일이 한개파일로
- 액션 태그의 include action 태그 : 불러오는 파일과 불려지는 파일이 따로
액션 태그 (Action Tag)
- JSP에서 액션(Action Tag)는 스크립트, 주석, 디렉티브와 함께 JSP 페이지를 이루고 있는 요소
- 페이지와 페이지 사이의 제어를 이동시킬 수도 있고, 다른 페이지의 실행결과를 현재의 페이지에 포함시킬 수 있으며, 자바빈을 JSP 페이지에서 사용할 수 있는 기능도 제공
- JSP 지원 액션 태그는 6가지 종류가 있다
forward action tag
- <jsp:forward>
- 다른 페이지로 이동할때 사용되는 태그
- forward action tag 가 포함된 페이지는 브라우저에 출력되지 않고 지정된 페이지로 바로 이동
include action tag
- <jsp:include>
- 다른 모듈 페이지를 불러올때 사용, 즉 다른 페이지를 불러올 때 사용
useBean, setProperty, getProperty action tag
- 자비빈 (=DTO 클래스) 사용할때 사용하는 액션태그들
forward action tag
- 현재 페이지에서 다른 페이지로 이동시킬때 사용
- 실행되자마자 지정된 페이지로 이동
- 이 태그가 포함된 페이지는 출력되지 않고 바로 포워딩됨
- 계속해서 forwarding 되면 최종적으로 이동한 곳까지가 REQUEST 영역
- 3가지 형식이 있다
1. 간단한 형식
<jsp : forward page = " 이동할 페이지명 " />
2.
<jsp : forward page = " 이동할 페이지명 " > </jsp : forward>
3. 값을 가져가는 경우
<jsp : forward page = " 이동할 페이지명 ">
<jsp : param name = "paramName1" value = "var1" />
<jsp : param name = "paramName2" value = "var2" />
</jsp : forward>
- paramName1 이 변수가되고, 이 변수에 전달될 값이 var1 이다
- paramName2 rk 변수가되고, 이 변수에 전달될 값이 var2 이다
forward action tag 와 REQUEST 영역
- REQUEST 영역 시작으로부터 forward action tag 로 연결된 페이지들은 REQUEST 영역에 해당
forward action tag 예제
실습 준비
forward action tag 예제 1
forward action tag 와 REQUEST 영역
forward action tag 3가지 형식 중 첫번째
- WebContent/forward/forward1/
- forwardForm1.jsp & forwardFrom1.jsp & forwardTo1.jsp & forwardTo2.jsp
- 세번 페이지를 전달하고 있고, 순서대로 파일이 넘어감
- forwardForm1.jsp
<%@ page contentType="text/html;charset=euc-kr"%>
<html>
<body>
<h1>Forward 사용법 예제</h1>
<form method=post action="forwardFrom1.jsp">
아이디 : <input type="text" name="id"><p>
패스워드 : <INPUT TYPE="password" NAME="password"><p>
<input type="submit" value="보내기">
</form>
</body>
</html>
- form 으로 다음 페이지로 넘어감
- forwardFrom1.jsp
<%@ page contentType="text/html;charset=euc-kr"%>
<html>
<body>
<h2>포워딩하는 페이지: forwardFrom1.jsp</h2>
<%
request.setCharacterEncoding("euc-kr");
%>
forwardFrom1.jsp의 내용 입니다.<br>
화면에 절대 표시 안됩니다.
<% // request 객체로 공유 설정
request.setAttribute("name","홍길동");
%>
<jsp:forward page="forwardTo1.jsp"/>
</body>
</html>
- request 객체로 공유 설정 후 페이지를 넘김
- 여기서부터 REQUEST 영역이 시작되고 forward action tag 로 이동하는 곳인 forwardTo1.jsp 와 forwardTo2.jsp 까지가 REQUEST 영역이다
- 여기선 두번 이동하기때문에 REQUEST 영역은 두번 이동한 곳이기때문임
- 일반적으로 1번만 이동하므로 다음 페이지까지 REQUEST 영역이라고 했지만, 사실 계속 해서 이동하면 계속 이동한 곳까지가 REQUEST 영역
- forward action tag 로 이동되어야만 request 객체의 공유값을 사용 가능
- forward action tag 가 있는 페이지인 forwardForm1.jsp 의 내용은 출력되지 않고 forwardTo1.jsp 파일의 내용으로 바로 감
- forward action tag 가 포함된 페이지는 실행은 되지만 출력은 되지 않는다
ex) 한글값 인코딩 코드와 request 객체로 공유 설정하는 코드는 동작하지만 적힌 글은 출력되지 않음
- forwardTo1.jsp
<%@ page contentType="text/html;charset=euc-kr"%>
<html>
<body>
<h2>포워딩되는 페이지: forwardTo1.jsp</h2>
<%
String id = request.getParameter("id");
String password = request.getParameter("password");
%>
<b><%=id%></b>님의<p>
패스워드는 <b><%=password%></b>입니다.
<jsp:forward page="forwardTo2.jsp"/>
</body>
</html>
- REQUEST 가 시작된 곳으로 부터 다음 페이지이다
- 가장 첫 페이지인 forwardForm1.jsp의 request 객체에서 form 태그의 action으로 보낸 값을 여기서 getParameter()로 전달된 값을 받고 있다
- request 객체의 form 태그의 action 으로 보낸 값도 forward action tag 로 이어져 있는 다음의 모든 페이지에서 값을 구해올 수 있다
- forward action tag 가 있는 페이지인 forwardTo1.jsp 의 내용은 출력되지 않고 forwardTo2.jsp 파일의 내용으로 바로 감
- forward action tag 가 포함된 페이지는 실행은 되지만 출력은 되지 않는다
- forwardTo2.jsp (최종 페이지)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
ID : <%=request.getParameter("id")%> <br>
password : <%=request.getParameter("password")%> <br>
request 객체로 공유한 값 출력 <br>
<%=request.getAttribute("name")%>
- forward action tag 로 연결된 다른 파일들에선 출력이 불가능하므로 최종 페이지인 여기서 출력을 한번 해야한다
- 계속해서 forward action tag 로 이어진 페이지들의 최종 페이지이므로 REQUEST 영역이 여기까지 해당된다
- 그러므로 request 객체 전달값이나 request 객체 공유값을 구해올 수 있다
- request 객체 전달값을 여기서 받고 있다, forward action tag 로 이어진 곳이므로 가능
- request 객체 공유값을 여기서 받고 있다, forward action tag 로 이어진 곳이므로 가능
request 객체 공유값 vs request 객체 전달값
request 객체의 역할 두가지
1. request 객체는 REQUEST 영역에서 사용할 수 있는 공유 값을 설정하거나 구해온다
2. request 객체는 form 태그의 action 으로 전달한 값들을 받는 역할을 한다, 클라이언트의 요청 처리
- REQUEST 영역은 다음 페이지까지가 아니라 forward action tag 로 이어진 순차적인 모든 페이지 이다
1. request 객체로 공유값을 받아올 때는 forward action tag 로 이어진 순차적인 모든 페이지에서 값을 받아올 수 있다
2. request 객체로 전달값을 구해올 때도 forward action tag 로 이어진 순차적인 모든 페이지에서 값을 구해올 수 있다
예제에서의 REQUEST 영역
- forward action tag 로 총 2번 전달하고 있다
- forwardFrom1.jsp -> forwardTo1.jsp -> forwardTo2.jsp
- forwardFrom1.jsp 에서 REQUEST 영역이 시작되었고 REQUEST 영역은 forwardTo1.jsp 뿐만 아니라 forward action tag 로 이어진 forwardTo2.jsp 도 해당
request 객체 공유 주의
- forward action 태그로 이동시켜야만 REQUEST 영역 안에 들어가므로 request 객체로 값 공유 가능
- 중간에 location, form-action, meta 등으로 페이지 이동시 REQUEST 영역에서 벗어나므로 request 객체로 값 공유 불가
+ forward action tag 작성 주의
- forward action tag 는 이 자체로 태그이므로 스크립틀릿 태그 안에 쓰면 안된다
- HTML 태그처럼 독립된 태그이므로 따로 쓰기
// <% <jsp:forward page="forwardTo1.jsp"/> %> // 틀린 표현
<jsp:forward page="forwardTo1.jsp"/>
forward action tag 예제 2
forward action tag 와 REQUEST 영역
forward action tag 3가지 형식 중 두번째
- WebContent/forward/forward2/
- forwardForm2.jsp & forwardFrom2.jsp
- a.jsp, b.jsp, ab.jsp, o.jsp 는 각 혈액형별 특징들을 알려주는 파일
- forwardForm2.jsp
<%@ page contentType="text/html;charset=euc-kr"%>
<html>
<head>
<script src="http://code.jquery.com/jquery-1.10.2.js"></script>
<script>
$(document).ready(function(){
$(":submit").click(function(){
if($("#name").val() == ""){
alert("이름을 입력 하세요");
$("#name").focus();
return false;
}
if($("#a").is(":checked") == false &&
$("#b").is(":checked") == false &&
$("#o").is(":checked") == false &&
$("#ab").is(":checked") == false){
alert("혈액형을 선택 하세요");
return false;
}
});
});
</script>
</head>
<body>
<h1>포워딩될 페이지에 파라미터값 전달하기 예제</h1>
<form method=post action="forwardFrom2.jsp">
이름 : <input type=text id="name" name="name"> <br><br>
당신의 혈액형은?<p>
<input type="radio" id="a" name="bloodType" value="a">A형<br>
<input type="radio" id="b" name="bloodType" value="b">B형<br>
<input type="radio" id="o" name="bloodType" value="o">O형<br>
<input type="radio" id="ab" name="bloodType" value="ab">AB형<p>
<input type="submit" value="보내기">
</form>
</body>
</html>
- ex) A 형을 선택시 a.jsp 의 내용이 실행됨
- form 태그의 action 을 통해 forwardFrom2.jsp 로 선택값을 전달한다
- forwardFrom2.jsp
<%@ page contentType="text/html;charset=euc-kr"%>
<html>
<body>
<h1>포워딩하는 페이지: forwardFrom2.jsp</h1>
<%
request.setCharacterEncoding("euc-kr");
// String name1 = "Lay";
String bloodType = request.getParameter("bloodType") + ".jsp";
// String bloodType = "a.jsp";
%>
<jsp:forward page="<%=bloodType%>"/>
+ 한글값이 깨지지 않도록 인코딩
- 앞의 forwardForm2.jsp 파일에서 select 박스로 부터 form action 으로 넘어온 값을 받아서 .jsp 를 붙여서 forward 시키는 페이지를 지정한다
ex) 앞에서 A형 선택시 'a' 값을 getParameter() 로 받은 후 .jsp 를 붙여서 a.jsp 를 forward action tag 를 써서 이동시킬 페이지로 지정
- a.jsp
<%@ page contentType="text/html;charset=euc-kr"%>
<html>
<body>
<h1>포워딩되는 페이지(a.jsp)</h1>
<%
String name = request.getParameter("name");
String bloodType = request.getParameter("bloodType");
%>
<b><%=name%></b>님의 혈액형은
<b><%=bloodType%></b>형이고
성실하고 신중하며 완벽주의자입니다.
</body>
</html>
- a.jsp 는 forwardFrom2.jsp 파일과 forward action tag 로 이어져 있는 최종 페이지
- 그러므로 getParameter() 를 통해 forwardForm2.jsp 파일에서 forwardFrom2.jsp 파일로 전송한 값인 name값과 bloodType값. 즉, 이름값과 혈액형 값을 구해올 수 있다
forward action tag 예제 3
forward action tag 와 REQUEST 영역
forward action tag 3가지 형식 중 세번째 : 값을 가져가는 기능
- WebContent/forward/forward3/
- forwardForm3.jsp & forwardFrom3.jsp
- yellow.jsp, blue.jsp, green,jsp, red.jsp 는 선택한 색상에 따라 보여줄 파일
- forwardForm3.jsp
<%@ page contentType="text/html;charset=euc-kr"%>
<html>
<body>
<h2>포워딩될 페이지에 파라미터값 전달하기 예제</h2>
<form method="post" action="forwardFrom3.jsp">
이름 입력 : <input type="text" name="name"><br><br>
색 선택: <br>
<input type="radio" name="color" value="yellow">노랑색<br>
<input type="radio" name="color" value="green">초록색<br>
<input type="radio" name="color" value="blue">파랑색<br>
<input type="radio" name="color" value="red">빨강색<p>
<input type="submit" value="확인">
</form>
</body>
</html>
- form 태그를 통해 입력된 이름과 선택된 색상을 네임값 name 과 네임값 color 에 저장해서 forwardFrom3.jsp 로 전달
- 선택한 색상 관련 글과 함께 blue.jpg 보여주고 있다
- forwardFrom3.jsp
<%@ page contentType="text/html;charset=euc-kr"%>
<html>
<body>
<h2>포워딩하는 페이지: forwardTagFrom2.jsp</h2>
<%
request.setCharacterEncoding("euc-kr");
String name = request.getParameter("name");
String selectedColor = request.getParameter("color");
%>
<jsp:forward page="<%=selectedColor+\".jsp\"%>">
<jsp:param name="selectedColor" value="<%=selectedColor%>"/>
<jsp:param name="name" value="<%=name%>"/>
</jsp:forward>
- 넘어온 한글값이 깨지지 않도록 인코딩
- 앞에서 넘어온 값을 name, color 네임값을 통해서 구하고 name, selectedColor 변수에 저장한다
- jsp forward action tag 3번째 형식을 사용하면서 값을 전달하고 있다
- selectedColor 는 두곳에 사용하고 있다, 이동할 페이지명 지정과 넘겨줄 값에 사용
- 이렇게 전달된 값들은 request.getParameter() 로 받아야한다!
ex) 만약 사용자가 노란색을 클릭해서 color 값이 yellow 라면
- selectedColor 는 "yellow" 가 되고 forward 할 파일은 yellow.jsp 파일
- 전달할 값1은 selectedColor 라는 네임에 해당하는 값인 yellow
- 전달할 값2는 name 이라는 네임에 해당하는 값인 Lay(사용자가 입력한 이름)
" " 주의
- 바깥쪽에 " " 를 쓰면 안쪽엔 ' ' 를 써야하는데 JSP 에선 ' ' 를 쓸 수 없다
- 그러므로 .jsp 를 쓰기 위해서 " 앞에 \ 를 붙여준다 -> \".jsp\"
- \ 다음의 특수문자는 그대로 출력한다는 의미
- blue.jsp (다른 색상 파일도 마찬가지)
<%@ page contentType="text/html;charset=euc-kr"%>
<%
String name = request.getParameter("name");
String selectedColor = request.getParameter("selectedColor");
%>
<h2>포워딩되는 페이지 - <%=selectedColor+".jsp"%></h2>
<b><%=name%></b>님의 좋아하는 색은 "<%=selectedColor%>"이고
자기탐구와 내적성장을 상징하는 색입니다.<br><br>
<img src="<%=selectedColor+".jpg"%>" border="0" width="70" height="30">
- 이 최종 파일에서는 request.getParameter() 를 통해 4가지 값을 구해올 수 있다
1. forwardForm3.jsp 파일의 폼에서의 네임값인 name, color 값들을 가져올 수 있다
2. forwardFrom3.jsp 파일에서 forward action tag 로 전달된 값의 네임값인 name, selectedColor 의 값들을 가져올 수 있다.
- 즉 총 4개의 값을 구해올 수 있다
이때 중복된 네임값인 name값은 두가지 값 중 어떤 값을 의미할까?
- 같은 이름일때 가까운 파일의 name값이 출력된다
- 여기선 forward action tag 로 전달된 name값이 출력됨
다음 시간
- include action tag
- include 디렉티브 태그
- DTO, DAO 클래스로 자바와 연동
- 자바빈(=DTO 클래스) 연동 위한 action tag