Action Tag에서 자주 사용되는 태그
1) forward : 페이지 흐름 제어
2) include : 외부 페이지 포함
3) param : forward, include, plugin 태그에 파라미터 추가
forward 액션 태그
JSP 컨테이너가 처리
전까지 출력 버퍼의 내용을 모두 비움
설정된 페이지로 프로그램의 제어가 이동
include 액션 태그
현재 JSP 페이지에 외부 파일을 포함
외부 파일 : JSP, HTML, 서블릿 페이지
param 액션 태그
단독으로 사용할 수 없음
<jsp:forward.., <jsp:include.. 태그의 내부에서 사용됨
다른 페이지에 파라미터 목록을 전달할 때 사용됨
flush -> 크롬으로 보내는 것(html로)
날짜를 출력할때는 Date 클래스
날짜를 계산하는 등 세밀한 작업을 할 때는 Calendar 클래스
forward
ex)흐름을 제어하는 주체가 first.jsp에 있다가 <jsp:forward>로 second.jsp로 이동하면 끝
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Action Tag</title>
</head>
<body>
<pre>
* forward 액션태그
- 현재 JSP 페이지에서 다른 페이지로 이동
- JSP 컨테이너는 forward 액션 태그를 만나면 그 전까지 출력 버퍼에 저장되어 있던
내용을 모두 비움
- 설정된 페이지로 프로그램의 제어가 이동
</pre>
<h3>이 파일은 first.jsp입니다.</h3>
<jsp:forward page="second.jsp"></jsp:forward>
<p>==first.jsp의 페이지==</p>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="java.util.Date"%>
<!DOCTYPE html>
<html>
<head>
<title>Action Tag</title>
</head>
<body>
<h3>이 파일은 second.jsp입니다.</h3>
Today is : <%=new Date()%>
</body>
</html>
include <jsp:include>
** <%@ include file=""> 과 다르다
이거는 ""의 내용이 고정되어 있음(정적)
액션태그의 내용은 변경된다(동적)
ex)주체가 includeAction01.jsp 이다가 <jsp:include>로 includeAction02.jsp 잠시 줬다가
다시 includeAction01.jsp로 돌아온다
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<title>Action Tag</title>
</head>
<body>
<pre>
* include 액션 태그?
- include 디렉티브 태그처럼 현재 JSP 페이지의 특정 영역에 외부 파일(JSP, HTML, 서블릿 페이지)의 내용을 포함하는 태그
- flush : 지금까지 출력 버퍼에 저장한 결과를 처리
false(기본) : 웹브라우저에 출력안함. 버퍼 유지.(생략 가능)
true : 웹브라우저에 출력. 버퍼 비움.(헤더 정보도 같이 전송됨. 더이상 헤더 사용 불가)
</pre>
<%
// 이름은 같지만 다 다르지롱
pageContext.setAttribute("id", "page001");
request.setAttribute("id", "request001");
//웹브라우저 다르면 공유 안됨
session.setAttribute("id", "session001");
//웹브라우저 간에도 공유됨
application.setAttribute("id", "application001");
%>
<h3>이 파일은 includeAction01.jsp입니다</h3>
<jsp:include page="includeAction02.jsp" flush="false" />
<p>Java Servlet Page</p>
<!-- 위 태그는 jstl이 아닌 액션태그다! jsp: jsp에서 기본으로 제공하는 태그-->
<!-- 다른 페이지를 갔다왔지만 요청이 살아있기 때문에 아래는 뜬다~ -->
<h4><%=pageContext.getAttribute("id") %></h4>
<h4><%=request.getAttribute("id") %></h4>
<h4><%=session.getAttribute("id") %></h4>
<h4><%=application.getAttribute("id") %></h4>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="java.util.Date"%>
<!DOCTYPE html>
<html>
<head>
<title>Action Tag</title>
</head>
<body>
<h4><%=request.getAttribute("id") %></h4>
<h4><%=pageContext.getAttribute("id") %></h4>
<h4><%=session.getAttribute("id") %></h4>
<h4><%=application.getAttribute("id") %></h4>
<h3>이 파일은 includeAction02.jsp 입니다.</h3>
Today is : <%=new Date() %>
</body>
</html>
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<title>Action Tag</title>
</head>
<body>
<h2>include 액션 태그</h2>
<jsp:include page="includeAction04.jsp" flush="false">
<jsp:param name="date" value="<%=new Date()%>" />
</jsp:include>
<p>---------------------------------------------------</p>
</body>
</html>
<%@page import="java.util.Date"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<title>Action Tag</title>
</head>
<body>
<p>오늘은 몇일? 그리고 지금 시간은?</p>
<p><%=(new Date()).toLocaleString()%></p>
<p>Today is : <%=request.getParameter("date") %>
</body>
</html>
param : 액션태그의 include에 파라미터를 보낼 수 있다 (request객체 이용)
<%@page import="java.net.URLEncoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<title>Action Tag</title>
</head>
<body>
<h3>param 액션 태그</h3>
<!-- ...01_data.jsp?id=admin&name=관리자 <= 파라미터 목록이 request객체에 담길것 -->
<!-- URLEncoder.encode() 로 한글 인코딩해야 깨지지 않는다 -->
<jsp:forward page="/ch04/param01_data.jsp">
<jsp:param name="id" value="admin" />
<jsp:param name="name" value='<%=URLEncoder.encode("관리자") %>' />
</jsp:forward>
<p>Java Servlet page</p>
</body>
</html>
<%@page import="java.net.URLDecoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<title>Action Tag</title>
</head>
<body>
<p>아이디 : <%=request.getParameter("id") %></p>
<%
String name = request.getParameter("name");
out.print("인코딩된 관리자 : " + name);
%>
<p>이름 : <%=URLDecoder.decode(name) %></p>
</body>
</html>
<%@page import="java.net.URLEncoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="java.util.Calendar"%>
<!DOCTYPE html>
<html>
<head>
<title>Action Tag</title>
</head>
<body>
<h3>param 액션 태그</h3>
<jsp:include page="param02_data.jsp">
<jsp:param name="title" value='<%=URLEncoder.encode("오늘의 날짜와 시각") %>' />
<jsp:param name="date" value="<%=Calendar.getInstance().getTime() %>" />
</jsp:include>
</body>
</html>
<%@page import="java.util.Enumeration"%>
<%@page import="java.net.URLDecoder"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<title>Action Tag</title>
</head>
<body>
<!-- request객체 내에 title=오늘의 날짜와 시각&date=2021-->
<%
String title = request.getParameter("title");
%>
<h3><%=URLDecoder.decode(title)%></h3>
Today is : <%=request.getParameter("date") %>
<br>
<%
// request 객체의 속성정보 나열하기
Enumeration<String> attrEnum = request.getAttributeNames();
while(attrEnum.hasMoreElements()){
String name = attrEnum.nextElement();
Object value = request.getAttribute(name);
out.print("<b>" + name + "</b>=" + value + "<br>");
}
%>
</body>
</html>
자바빈 클래스라고 부름!
java resources폴더에 저장된다
MVC 패턴으로 사용하기 위해 자바빈즈를 사용한다.
M(Model) : 비즈니스 로직, 자바빈 클래스
V(View) : JSP
C(Controller) : Servlet
-> 화면을 출력하는 부분과 비즈니스 로직(데이터를 처리하는 부분)을 분리하여
비즈니스 로직 부분의 코드에 자바빈 클래스를 사용한다.
자바빈즈의 동작 흐름
1) 웹 브라우저가 톰켓(컨테이너 : 웹서버 + 서블릿)에게 JSP 페이지 요청
2) 자바빈즈와 통신
3) 자바빈즈가 데이터베이스에 연결
4) 톰켓이 웹 브라우저에 응답
< 조건 세가지를 모두 만족해야 함 >
1. 필드가 있어야함
2. getter/setter 메소드가 있어야함
3. 기본 생성자가 있어야함
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="java.util.Date"%>
<!DOCTYPE html>
<html>
<head>
<title>Action Tag</title>
</head>
<body>
<%
//이제 이렇게 안쓰고 아래 태그로 할거다~
//Date date = new Date();
%>
<jsp:useBean id="date" class="java.util.Date">
<p>오늘 날짜 및 시간 : </p>
<p><%=date %></p>
</jsp:useBean>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="ch04.com.dao.Calculator"%>
<!DOCTYPE html>
<html>
<head>
<title>Action Tag</title>
</head>
<body>
<%
/* Calculator bean = new Calculator();
//m은 5 * 5 * 5
int m = bean.process(5);
out.print("5의 3제곱 : " + m); */
%>
<jsp:useBean id="bean" class="ch04.com.dao.Calculator" />
<%
int m = bean.process(5);
out.print("5의 3제곱 : " + m);
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<title>Action Tag</title>
</head>
<body>
<jsp:useBean id="person" class="ch04.com.dao.Person" scope="request" />
<!-- scope생략하면 기본이 page, useBean04와 scope맞춰주기 -->
<!-- class는 Person.java의 패키지명.클래스명 -->
<p>아이디 : <%=person.getId() %></p>
<p>이름 : <%=person.getName() %></p>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<!DOCTYPE html>
<html>
<head>
<title>Action Tag</title>
</head>
<body>
<!-- id = "" <- 소문자로 객체명 적기 / 디자인 패턴으로 약속했음(클래스명 첫자리는 대문자지만 클래스에서 만든 객체는 소문자로 적는다) -->
<!-- class는 그 클래스의 package명.객체명 -->
<!-- scope는 영역 -->
<jsp:useBean id="person" class="ch04.com.dao.Person" scope="request"/>
<p>아이디 : <%=person.getId() %></p>
<p>이름 : <%=person.getName() %></p>
<%
person.setId(20210106); //아이디에 새로운 값을 넣어줌
person.setName("손영흔"); //name필드에 새로운 값을 넣어줌
%>
<jsp:include page="useBean03.jsp" />
</body>
</html>