본문 바로가기

국비필기노트/jsp

jsp_액션태그, 디렉티브태그,forward,redirect

액션태그

 

 

행위에 대한 태그로서 jsp  페이지에서 동일한 내용이라도 자바 코드를 기술하기 보다는 태그를 기술하는 것이 지저분하지않고 깔끔하게 코딩할 수 있어, 가독성 높은 소스코드를 작성할 수 있고 코드 양을 대폭 줄일 수 있다.

 

페이지와 페이지 사이를 제어하거나 다른 페이지의 실행 결과 내용을 현재 페이지에 포함하거나 자바빈즈(객체) 등의 다양한 기능을 제공한다. 

 

액션 태그는 XML 문법을 따른다. 즉 시작태그와 함께 반드시 종료태그를 포함해야한다.

 

  • 액션 태그의 기본형식 : <jsp: 속성 = "값"> 내용 </jsp : 속성 = "값> 
  • 내용이 없는 액션 태그의 형식: <jsp: 속성 ="값" />

 

 

디렉티브 태그란?

 

 

<%@ include file = "파일명" %>

 

현재 JSP 페이지의 특정 영역에 외부 파일의 내용을 포함시키는 태그이다.

보통 header와 footer 대부분의 페이지에 동일한 내용으로 작성되기 때문에 유지보수 및 편의를 위하여 외부파일로 만든 후에 include하여 사용한다.

 

이러한 것들을 모듈화 작업이라고 한다. 

 

 

 

액션 태그의 종류

 

 

  • forward(<jsp:forward ... />) : 다른페이지로의 이동, 페이지 프름 제어
  • include(<jsp:include .../>) : 외부 페이지의 내용을 포함하거나 페이지 모듈화
  • param(<jsp:param .../>) : 현재 페이지에서 다른 페이지에 정보를 전달할 때 사용
  • useBean(<jsp:useBean .../>) : 빈(Bean)을 생성하고 사용하기 위한 환경을 정의하는 액션 태그
  • setProperty(<jsp:setProperty .../>) : 빈에서 속성 값을 할당
  • getProperty(<jsp:getProperty .../>) : 빈에서 속성값을 얻어올 때 사용

 

 

 

페이지이동

 

 

forward

 

request에 담긴 값이 유효하다(request, response 유지된다)

이동된 url이 화면에 보이지 않아 사용자는 이동했는지 알 수 없다.

 

 

forward 사용방법

 

  •  액션태그:  <jsp: forward page = " 이동할 페이지 " />
  • pageContext.forward("이동할 페이지");

 

예시

 

 

forward_test로 클라이언트가 접속 후 submit을 누르면 이는 controller.jsp로 날라가서 해당 기능을 수행해주는 예시이다. 

 

 

Redirect

 

 

클라이언트가 새로 페이지를 요청한 것과 같은 방식으로 페이지가 이동된다.(request, response가 유지되지않아 새로만들어진다.)

이동된 화면이 url에 보인다.

 

 

Redirect 사용방법

 

  •  response.sendRedirect("이동할페이지");

 

예시

 

 

param_test에서 넘어온 param이 result 값에 들어가 클라이언트에게 parma값이 넘겨진다.

 

 

 

forward와 redirect 방식의 차이

 

 

forward방식은 말 그대로 요청정보가 그대로 유지되는 방법이다. 클라이언트가 request 요청(submit버튼을 누르는 행위 등)을 보내면 처리해줘야하는 url(ex. controller.jsp)에 전달을 하고 이에 상응하는 결과를 클라이언트로 던져준다. 요청이 순환이 되는 형식이다.

 

단, redirect형식이라면 클라이언트의 요청을 받은 url은 사용자에게 다시 정보를 보내준다. 그럼 다시 클라이언트가 해당 정보를 바탕으로 새로운 request2 요청을 보내게되고 그럼 다시 그 요청에 관련된 url2에서 처리결과를 보내주게된다. 요청을 주고받는 형식인 것이다.

 

이 두개의 요청을 실생활 예시로 들자면, forward는 게시판형식, redirect는 결제형식으로 볼 수있다. 

 

게시판에서 클라이언트가 게시판 조회버튼을 누르면 해당 요청은 DBMS로 넘어가고 해당 DBMS는 요청 내용에 부합한 결과를 클라이언트에게 보여준다. 이 때 DBMS는 forword 방식을 사용한다.

 

우리가 인터넷으로 결제를 할 때 결제를 하면 처리가 완료되었다라는 응답이 온다. 단, 우린 결제 중 서버에 결제정보, 신용카드, 비밀번호 등 개인정보를 넘겨주었는데 다시 서버에서 클라이언트에게 요청을 줄 때 해당 정보에 대한 정보를 주면 안된다. 성공과 실패에 대한 정보만 주어야지 개인정보가 그대로 남아있는 데이터를 주고받지 않는다는 것이다. 이런 상황에서 서버는 redirect를 사용하여 보안을 유지한다.

 

 

 

위의 예시로 다시 이해를 해보자면 

 

이름과 생일을 입력하고 subject버튼을 object.jsp 페이지에서 누르면 사용자의 웹에선 바로 object_result.jsp로 넘어가 결과값이 보이지만 서버에서는 DB처리를 해주는 object_ok과 같은 여러 서버를 거칠 수 있다. 

 

이 때 object_ok.jsp와 같은 페이지에서 forward방식으로 할것인지 redirect방식으로 할 것인지를 결정하여 객체를 생성해주어 result.jsp로 값을 보내는 것이다.

 

 

그래서 object.jsp에서 사용자가 데이터를 입력하여 확인을 누르면

 

forward는 sdf님 어서오세요 sdf

redirect는 null님 어서오세요 null

 

이 출력되는 것을 확인할 수 있다. 

즉, 어떠한 데이터를 유지하도록 하는 것은 forward, 데이터를 손실시키는 것은 redirect라고 생각한다.

 

 

 

include

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
 
    <%@ include file = "header.jsp" %>
    <h4>---------------------------현재 페이지 영역------------------------------</h4>
    <p> 페이지의 내용들입니다! <p>
    
    
    <h4>---------------------------현재 페이지 영역------------------------------</h4>
    <%@ include file = "footer.jsp" %>
    
</body>
</html>
cs

 

 

해당 html 페이지이다. 

header와 footer는 다른 외부 파일로서 존재하며 안에는 해당 html 태그엔 없는 내용을 가지고 있다. 

그래서 이 헤더와 푸터를 include file로 연결해주면

 

 

 

 

다음과 같이 html 파일에는 없는 내용들이 출력되는걸 확인할 수 있다.

 

 

forward와 redirect 사용 구분

 

데이터베이스를 연결하여 forward와 redirect를 구분하는 업무를 할 경우, select는 무조건 forward를  사용해야하고 결제수단 관련은 무조건 redirect를 사용해야한다. 사용자에게 데이터베이스의 내용을 무조건 가지고 와야할 경우는 forward, 아닌경우는 redirect인 것인데 이렇게 특별한 상황이 아니고선 실무에서 forward와 redirect의 구분이 명확하지 않은 경우가 많다.

'국비필기노트 > jsp' 카테고리의 다른 글

jsp_MVC패턴  (0) 2022.06.03
jsp_jsp태그  (0) 2022.06.01
jsp_attribute scope  (0) 2022.06.01
Application, Cookie, Session 저장공간  (0) 2022.05.27
jsp_Servlet, Filter  (0) 2022.05.26