<jsp:forward page="파일명"/>
그냥 전에 만들어둔 jsp 파일은 날아가고 forward 안에 파일만 출력된다는 것
include vs forward (액션 태그)
forward 태그의 동작 방식을 생각해보면 forward를 만난 순간 이전 페이지의 제어권이 forward 태그로 넘어가게된다. 하지만 include 태그는 페이지의 이동이 실행된 후 다시 include 구문이 있는 jsp로 돌아온다는 차이가 있다.
하나 더 해보자
include vs include(디렉티브)
우선 디렉티브의 include는 입력한 file을 실행한 결과물(텍스트)을 원래 jsp 페이지로 가져온다. 하지만 액션 태그의 include는 포함시킬 페이지의 처리 결과를 포함시킨다. 포함되는 페이지로는 html, jsp, 서블릿 페이지 모두 가능하다
무슨 말인지 잘 모르겠다. 디렉티브의 include가 조금 더 단순한 형태로 동작하는 것 같은 느낌이고 액션 태그의 include가 구체적인 느낌이다.
블로그를 예를 들어 생각해보면 액션 태그의 include가 이미 만들어진 전체적인 포맷 위에 여러 기능들을 동작시킨다고 생각할 수 있을 것 같다. 디렉티브의 include는 그저 일반 문장을 가져올 때 사용한다고 생각하면 될 것 같다.
<%@ incude file ="파일명" %> <jsp:include page = "파일명" flush="false"/>
액션태그로 사용 시 문법도 조금 다르고 뒤에 flush라는 속성이 추가된다.
flush 속성은 include 태그로 포함될 페이지로 제어가 이동될 때 현재 포함하는 페이지가 지금까지 출력 버퍼에 저장한 결과를 어떻게 처리하는지 결정
true or false냐?
웹 브라우저에 서버에서 보낸 response가 도착하기 전에 buffer라는 곳에 모아두는데, include함과 동시에 flush 속성을 true로 전달하게 되면 앞에 쌓여있던 버퍼들의 헤더 정보를 브라우저에 전송하고 버퍼를 비우게 된다.
이렇게 되면 이후 다시 요청이 들어올 때 이미 헤더 정보가 웹 브라우저에 있기 때문에 반영이 안된다는 문제가 발생한다. 그래서 헤더 정보를 보내지 않는 false를 선택해 주는게 좋다.
현재 JSP 페이지에서 다른 페이지에 정보를 전달하는 태그
단독으로 사용이 불가하고 forward나 inlcude 태그의 내부에서 사용되어야한다.
EX) ID와 이름 전달하기
<p> param 액션 태그
<jsp:include page = "B.jsp">
<jsp:param name = "name" value ="<%= java.net.URLEncoder.encode("홍공진") %>" />
<jsp:param name = "id" value = "admin"/>
</jsp:include>
B.jsp 파일
<p> 아이디 : <%= request.getParameter("id") %>
<% String name = request.getParameter("name"); %>
<p> 아이디 : <%= java.net.URLDecoder.decode("name") %>
왜 String name을 하고 name을 파라미터로 받은 후 decode하는 줄 몰랐다..
근데 생각해보면 name값을 먼저 가져온 후 깨지지 않게 decode하는 것이라는 것을 알 수 있다.
프로그램의 효율을 높이기 위해 화면을 출력하는 부분과 데이터를 처맇는 로직 부분을 작성하며, 로직 부분의 코드에 자비빈즈라는 클래스를 사용
JSP 페이지가 HTML과 같이 쉽고 간단한 코드로만 구성
자바빈즈는 데이터 표현을 목적으로 하는 자바 클래스
데이터를 담는 멤버 변수인 프로퍼티와 데이터를 가져오거나 저장하는 메서드로 구성
작성 규칙
1. 자바 클래스는 java.io.Serializable 인터페이스를 구현해야 한다.
2. 인수가 없는 기본 생성자가 있어야 한다.
3. 모든 멤버 변수인 프로퍼티는 private 접근 지정자로 설정해야 한다.
4. 모든 멤버 변수인 프로퍼티는 getter/setter( ) 메소드가 존재해야 한다.