반응형
1. <jsp:forward>
1) 특징
- 현재 페이지에 들어온 요청을 다음 페이지로 보내는 액션 태그
→ 이 액션 태그를 만나기까지의 모든 출력을 제거하고, 포워드할 페이지로 요청을 전달
→ 포워드와 같음: 버퍼를 사용하지 않도록 설정했다면 사용 불가 - 다음 페이지로 요청을 전달하는 것이 목적이므로, 이동된 페이지와 request 영역을 공유함
- URL이 변경되지 않음
2) 시작 페이지(포워드하는 페이지)
- WebContent 폴더 → ActionTag 폴더에서 ForwardMain.jsp 파일 생성
// WebContent/ActionTag/ForwardMain.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//1.(아래 코드 2줄)
pageContext.setAttribute("pAttr", "김유신");
request.setAttribute("rAttr", "계백");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>액션 태그 - forward</title>
</head>
<body>
<h2>액션 태그를 이용한 포워딩</h2> //2.
<jsp:forward page="/ActionTag/ForwardSub.jsp" /> //3.
</body>
</html>
- page 영역과 request 영역에 속성 저장
- 출력되지 않는 문구 (jsp:forward를 만나면 그 전의 모든 출력은 제거됨)
- ForwardSub.jsp 파일로 포워드함
3) 포워드되는 페이지
- WebContent 폴더 → ActionTag 폴더에서 ForwardSub.jsp 파일 생성
// WebContent/ActionTag/ForwardSub.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>액션 태그 - forward</title>
</head>
<body>
<h2>포워드 결과</h2>
<ul>
<li>
page 영역 : <%= pageContext.getAttribute("pAttr") %> //1.
</li>
<li>
request 영역 : <%= request.getAttribute("rAttr") %> //2.
</li>
</ul>
</body>
</html>
- page 영역에 저장한 속성값 출력 시도
- request 영역에 저장할 속성값 출력 시도
4) ForwardMain.jsp를 [Run As] → [Run On Server]로 실행한 결과
- page 영역에 저장한 속성값 출력 시도 → 실패
- request 영역에 저장할 속성값 출력 시도 → 성공(”계백”이 출력됨)
- 실행 결과의 주소표시줄에는 ‘ForwardMain.jsp’가 표시되지만, 화면에는 ForwardSub.jsp의 내용이 출력됨
2. <jsp:useBean>
- 자바빈즈(JavaBeans)를 생성하거나 설정할 때 사용 [자바빈즈: 자바빈즈 개발 규약 참고]
1) 자바빈즈 생성
- <jsp:useBean>으로 자바빈즈를 생성할 때는 기본 생성자를 호출함 (해당 클래스에 기본 생성자가 없다면 에러 발생
- ⇒ 기본 생성자는 자바빈즈 규약에서 필수로 정해두었으므로, 규약대로만 만들었다면 문제 없음
- <jsp:useBean>액션 태그 의 사용방법
- id: 자바빈즈 객체의 이름 지정 (같은 id로 이미 생성된 객체가 있다면 해당 객체를 사용하고, 아직 없다면 새로 생성)
- class: 사용하려는 자바빈즈 객체의 실제 패키지명과 클래스명 저장 (자바에서 다른 패키지의 클래스를 사용하기 위해 import를 하는 것과 같음)
- scope: 자바빈즈가 저장될 내장 객체 영역 지정 (생략 시 기본 값인 page 영역이 저정됨/액션 태그로 생성한 자바빈즈는 4가지 영역 중 한 곳에 저장됨)
<jsp:useBean id="자바빈즈 이름" class="사용할 패키지와 클래스명" scope="저장될 영역" />
2) 멤버 변수 값 설정/추출
(1) <jsp:getProperty>로 멤버 변수 값 설정
<jsp:setProperty name="자바빈즈 이름" property="속성명(멤버 변수)"
value="설정할 값" />
name | <jsp:useBean> 의 id 속성에 지정한 자바빈즈의 이름을 지정함 → 인스턴스 변수를 지정하는 것과 동일 |
property | 자바빈즈의 멤버 변수명 지정 → 이름을 명시하지 않고 property=”*”라고 쓰면, form의 하위 요소와 일치하는 자바빈즈의 모든 속성에 사용자가 전송한 값이 설정됨 (이때는 value 속성 생략 가능) |
value | 멤버 변수에 설정할 값을 지정함 |
(2) <jsp:getProperty>로 자바빈즈(멤버 변수)의 값 추출
- 각 속성의 의미는<jsp:getProperty>와 같음
<jsp:getProperty name="자바빈즈 이름" property="속성명(멤버 변수)" />
(3) 멤버 변수 값 설정/추출 예제
- WebContent 폴더 → ActionTag 폴더에서 UseBeanMain.jsp 파일 생성
// WebContent/ActionTag/UseBeanMain.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>액션 태그 - UseBean</title>
</head>
<body>
<h2>useBean 액션 태그</h2>
<h3>자바빈즈 생성하기</h3>
<jsp:useBean id="person" class="common.Person" scope="request" /> //1.
<h3>setProperty 액션 태그로 자바빈즈 속성 지정하기</h3>
//2.(아래 코드 2줄)
<jsp:setProperty name="person" property="name" value="임꺽정" />
<jsp:setProperty name="person" property="age" value="41" />
<h3>getProperty 액션 태그로 자바빈즈 속성 읽기</h3>
<ul>
//3.(아래 코드 2줄)
<li>이름 : <jsp:getProperty name="person" property="name" /></li>
<li>나이 : <jsp:getProperty name="person" property="age" /></li>
</ul>
</body>
</html>
1. common 패키지의 Person 클래스로 person이라는 자바빈즈를 생성해 request 영역에 저장함
//1.을 자바코드로
Peson person = (Person)request.getAttribute("person"); //request 영역에서 가져옴
if (person == null) { //없으면 새로 생성해 저장
person = new Person();
request.setAttribute("person", person);
}
2. person 자바빈즈의 name과 age 멤버 변수에 값 설정 (setter 메소드 이용)
3. 자바빈즈에서 멤버 변수의 값 출력 (getter 메소드를 이용해 값 추출)
- UseBeanMain.jsp을 [Run] → [Run On Server]로 실행한 결과
→ Person 클래스를 기반으로 자바빈즈를 생성하고 설정된 값이 출력됨
3) 와일드카드로 폼값 한 번에 설정하기
*와일드카드 사용 시 폼값과 자바빈즈 멤버 변수 매핑
(1) 폼값을 전송하는 페이지 생성
- WebContent 폴더 → ActionTag 폴더에서 UseBeanForm.jsp 파일 생성
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><title>액션 태그 - UseBean</title></head>
<body>
<h2>액션 태그로 폼값 한 번에 받기</h2>
<form method="post" action="UseBeanAction.jsp"> //1.
//2.(아래 2줄)
이름 : <input type="text" name="name" /> <br />
나이 : <input type="text" name="age" /> <br />
<input type="submit" value="폼값 전송" /> //3.
</form>
</body>
</html>
- 폼값을 전송하는 방식을 post로 설정
- 이름과 나이 입력 (input 태그의 name 값이 Person 클래스의 멤버 변수 이름과 같아야 함)
- 폼값을 전송
(2) 폼값을 받는 페이지
- WebContent 폴더 → ActionTag 폴더에서 UseBeanAction.jsp 파일 생성
// WebContent/ActionTag/UseBeanAction.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head><title>액션 태그 - UseBean</title></head>
<body>
<h3>액션 태그로 폼값 한 번에 받기</h3>
<jsp:useBean id="person" class="common.Person" /> //1.
<jsp:setProperty property="*" name="person" /> //2.
<ul>
//3.(아래 2줄)
<li>이름 : <jsp:getProperty name="person" property="name" /></li>
<li>나이 : <jsp:getProperty name="person" property="age" /></li>
</ul>
</body>
</html>
- Person클래스로 자바빈즈 생성 - scope 속성을 설정하지 않았으므로, 가장 좁은 page 영역에 저장됨
- <jsp:setProperty>로 폼값을 자바빈즈에 설정함→ 폼값은 항상 input 태그의 name 속성에 지정한 이름을 통해 전송되므로, name 속성에 지정한 이름과 Person 클래스의 멤버 변수 이름을 같게 하면 폼값을 한 번에 저장!
→ property 속성에 멤버 변수 이름 대신 와일드카드 [*] 사용해서, 전송된 폼값이 자바빈즈에 한 번에 저장됨 - 2.에서 설정한 값이 제대로 들어 있는지 확인
(3) 한글 인코딩 문제 방지
- WebContent 폴더 → WEB-INF 폴더에서 web.xml 파일 수정 (’필터’ 추가)
// WebContent/WEB-INF/web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi=...생략...>
...생략...
<filter> //1.
<filter-name>SetCharEncoding</filter-name> //2.
<filter-class>org.apache.catalina.filters.SetCharacterEncodingFilter</filter-class> //3.
<init-param>
<param-name>encoding</param-name> //4.
<param-value>utf-8</param-value> //5.
</init-param>
</filter>
<filter-mapping> //6.
<filter-name>SetCharEncoding</filter-name> //7.
<url-pattern>/*</url-pattern> //8.
</filter-mapping>
</web-app>
- <filter> 태그: 필터의 이름, 사용할 클래스, 4., 5. 클래스에 전달할 매개변수 설정
- 필터의 이름 - SetCharEncoding
- 사용할 클래스
- 인코딩 방식(이름)
- 인코딩 값: utf-8
- <filter-mapping> 태그로 요청 URL과 필터를 매핑
- 8.로 인해, 해당 웹 애플리케이션으로 들어오는 모든 요청에 SetCharEncoding이라는 이름의 필터 적용
- URL 패턴을 /*로 지정
→ 모든 요청의 encoding을 utf-8로 변경
(4) 동작 확인
- UseBeanForm.jsp 파일 [Run] → [Run On Server]로 실행 후, 이름과 나이 입력란에 각각 “안창호”와 “60”을 입력하고 [폼값 전송 버튼 클릭]
반응형
'자바(JAVA) > JSP 웹 프로그래밍 공부 (성낙현의 JSP 자바 웹 프로그래밍 참고)' 카테고리의 다른 글
JAVA/JSP 22. 모델1 방식의 회원제 게시판 만들기 - 프로젝트 구상, 모델1 구조와 모델2 구조(MVC 패턴) (0) | 2023.12.27 |
---|---|
JAVA/JSP 21. 액션 태그(Action Tag) - <jsp:param> (1) | 2023.12.23 |
JAVA/JSP 19. 액션 태그(Action Tag) - 액션 태그의 개념, <jsp:include> (2) | 2023.12.06 |
JAVA/JSP 18. 세션(Session) - 세션과 DB를 이용한 로그인 구현, 쿠키 vs 세션 (1) | 2023.11.30 |
JAVA/JSP 17. 세션(Session) - 세션이란, 세션 설정/확인/삭제 (1) | 2023.11.22 |