JSP : 액션태그

공진·2023년 10월 24일
0

액션 태그

  • 서버나 클라이언트에게 어떤 행동을 하도록 명령하는 태그
  • XML 형식 <jsp : ~~ />을 사용
  • 액션 태그는 반드시 끝나는 태그 />를 사용해야함
    +저번에 수업시간에 />로 인해 나타나는 오류 확인해봤으니 주의주의주의

종류

forward 액션 태그

  • 현재 JSP 페이지에서 다른 페이지로 이동하는 태그
  • JSP 컨테이너는 현재 JSP 페이지에서 forward 액션 태그를 만나면 그 전까지 출력 버퍼에 저장되어 있던 내용 싹 날리고 forward 액션 태그에 설정된 페이지로 프로그램의 제어가 이동한다.
<jsp:forward page="파일명"/>

동작 방식

  1. 사용자가 1.jsp를 서버로 보냄
  2. 1.jsp 안에 들어있는 forward 태그를 만남
  3. 1.jsp로 생성된 출력 버퍼의 내용을 싹 지우고 forward 태그 안의 내용이 들어감
  4. 웹서버가 응답 후 사용자가 보는 화면은 1.jsp에 대한 화면이 아니라 1.jsp 안에 있는 forward로 연결된 페이지의 응답임

    그냥 전에 만들어둔 jsp 파일은 날아가고 forward 안에 파일만 출력된다는 것

include 액션 태그

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??

flush 속성은 include 태그로 포함될 페이지로 제어가 이동될 때 현재 포함하는 페이지가 지금까지 출력 버퍼에 저장한 결과를 어떻게 처리하는지 결정

true or false냐?
웹 브라우저에 서버에서 보낸 response가 도착하기 전에 buffer라는 곳에 모아두는데, include함과 동시에 flush 속성을 true로 전달하게 되면 앞에 쌓여있던 버퍼들의 헤더 정보를 브라우저에 전송하고 버퍼를 비우게 된다.

이렇게 되면 이후 다시 요청이 들어올 때 이미 헤더 정보가 웹 브라우저에 있기 때문에 반영이 안된다는 문제가 발생한다. 그래서 헤더 정보를 보내지 않는 false를 선택해 주는게 좋다.

param 액션 태그

현재 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 페이지에서 화면을 표현하기 위한 계산식이나 자료의 처리를 담당하는 자바 코드를 따로 분리하여 작성하는 것

JSP 페이지가 HTML과 같이 쉽고 간단한 코드로만 구성

자바빈즈는 데이터 표현을 목적으로 하는 자바 클래스
데이터를 담는 멤버 변수인 프로퍼티와 데이터를 가져오거나 저장하는 메서드로 구성

작성 규칙
1. 자바 클래스는 java.io.Serializable 인터페이스를 구현해야 한다.
2. 인수가 없는 기본 생성자가 있어야 한다.
3. 모든 멤버 변수인 프로퍼티는 private 접근 지정자로 설정해야 한다.
4. 모든 멤버 변수인 프로퍼티는 getter/setter( ) 메소드가 존재해야 한다.

0개의 댓글

관련 채용 정보