JSP 5강 - Action Tag, 자바빈 클래스

voilà!·2022년 1월 16일
0

JSP 스프링

목록 보기
5/31

Action Tag란?

  • 서버(tomcat)나 클라이언트(크롬)에게 어떤 행동을 하도록 명령
  • 페이지와 페이지 사이를 제어
  • 다른 페이지의 실행 결과 내용을 현재 페이지에 포함
  • 자바빈즈 처리
  • 반드시 끝나는 태그 />로 마무리해야 함

Action Tag에서 자주 사용되는 태그
1) forward : 페이지 흐름 제어
2) include : 외부 페이지 포함
3) param : forward, include, plugin 태그에 파라미터 추가

  • 자바빈즈 : useBean, setProperty, getProperty
    4) useBean : 자바빈즈 설정
    5) setProperty : 자바빈즈의 프로퍼티(멤버변수) 값 설정
    6) getProperty : 자바빈즈의 프로퍼티(멤버변수) 값 가져옴

forward 액션 태그
JSP 컨테이너가 처리
전까지 출력 버퍼의 내용을 모두 비움
설정된 페이지로 프로그램의 제어가 이동

include 액션 태그
현재 JSP 페이지에 외부 파일을 포함
외부 파일 : JSP, HTML, 서블릿 페이지

param 액션 태그
단독으로 사용할 수 없음
<jsp:forward.., <jsp:include.. 태그의 내부에서 사용됨
다른 페이지에 파라미터 목록을 전달할 때 사용됨

flush -> 크롬으로 보내는 것(html로)

날짜를 출력할때는 Date 클래스
날짜를 계산하는 등 세밀한 작업을 할 때는 Calendar 클래스

forward
ex)흐름을 제어하는 주체가 first.jsp에 있다가 <jsp:forward>로 second.jsp로 이동하면 끝

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

second.jsp

<%@ 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로 돌아온다

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>

includeAction02.jsp

<%@ 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>

includeAction03.jsp

<%@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>

includeAction04.jsp

<%@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객체 이용)

param01.jsp

<%@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>

param01_data.jsp

<%@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>

param02.jsp

<%@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>

param02_data.jsp

<%@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 beans

자바빈 클래스라고 부름!
java resources폴더에 저장된다
MVC 패턴으로 사용하기 위해 자바빈즈를 사용한다.
M(Model) : 비즈니스 로직, 자바빈 클래스
V(View) : JSP
C(Controller) : Servlet

-> 화면을 출력하는 부분과 비즈니스 로직(데이터를 처리하는 부분)을 분리하여
비즈니스 로직 부분의 코드에 자바빈 클래스를 사용한다.

자바빈즈의 동작 흐름
1) 웹 브라우저가 톰켓(컨테이너 : 웹서버 + 서블릿)에게 JSP 페이지 요청
2) 자바빈즈와 통신
3) 자바빈즈가 데이터베이스에 연결
4) 톰켓이 웹 브라우저에 응답

< 조건 세가지를 모두 만족해야 함 >
1. 필드가 있어야함
2. getter/setter 메소드가 있어야함
3. 기본 생성자가 있어야함

useBean01.jsp

<%@ 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>

useBean02.jsp

<%@ 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>

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

useBean04.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>
<!-- 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>

0개의 댓글