포워드 액션 태그 사용하기
서블릿에서 다른 서블릿으로 포워딩하는 방법에 RequestDispatcher를 이용하는 방법이 있습니다. 하지만, 포워드 액션 태그를 사용하면 자바 코드 없이도 포워딩할 수 있습니다. 또한 포워딩 시 다른 서블릿이나 JSP로 값을 전달할 수도 있습니다.
포워드 액션 태그의 형식은 다음과 같습니다.
<jsp:forward page="포워딩할 JSP 페이지">
..
</jsp:forward>
그럼 포워드 액션 태그를 다음 예제를 통해 실습해 보겠습니다.
1. 다음과 같이 실습 파일 login.jsp, result.jsp를 생성합니다.

2. 로그인창에서 ID와 비밀번호를 입력한 후 action의 result.jsp로 전달하도록 login.jsp를 작성합니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인창</title>
</head>
<body>
<h1>아이디를 입력하지 않았습니다. 아이디를 입력해 주세요.</h1>
<form action="result.jsp" method="post">
아이디: <input type="text" name="userID"/><br>
비밀번호: <input type="password" name="userPw" /><br />
<input type="submit" value="로그인"/>
<input type="reset" value="다시입력" />
</form>
</body>
</html>
3. ID를 입력하지 않은 경우 자바의 RequestDispatche를 사용하지 않고 포워드 액션 태그를 사용해 다시 로그인창으로 이동하도록 result.jsp를 작성합니다.
<%@ 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>
<%
String userID = request.getParameter("userID");
if (userID.length() == 0) {
/*
RequestDispatcher dispatch = request.getRequestDispatcher("login.jsp");
dispatch.forward(request, response);
*/
%>
<jsp:forward page="login.jsp" />
<%
}
%>
<h1> 환영합니다. <%=userID %>님!! </h1>
</body>
</html>
4. http://localhost:8090/pro13/login.jsp로 요청하여 ID와 비밀번호를 입력하고 로그인합니다.

5. ID를 입력하면 정상적인 메시지를 출력합니다.

6. 하지만 ID를 입력하지 않고 로그인을 시도하면 로그인창으로 포워딩하여 다음과 같은 메시지를 출력합니다.

그런데 이 로그인 예제는 약간의 문제가 있습니다. 최초 login.jsp로 접속하면 로그인창에 오류 메시지("아이디를 입력하지 않았습니다. 아이디를 입력해 주세요.")가 나타난다는 것입니다. 페이지를 처음 접속할 때는 ID와 비밀번호 입력창만 나타나게 하고, 오류 시에만 오류 메시지를 나타나게 하는 것이 사용자에게 더 익숙하겠지요?
이 과정을 <jsp:forward> 태그 안에 param 액션 태그를 이용해서 처리해 보겠습니다.
7. login2.jsp와 result2.jsp 파일을 새로 만듭니다.

8. login2.jsp를 다음과 같이 작성합니다. 로그인창에 접속 시에는 getParameter() 메서드를 이용해 msg 값을 가져와서 표시하도록 구현합니다. 최초 요청 시에는 msg 값이 null이므로 아무것도 표시되지 않습니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인창</title>
</head>
<body>
<%
String msg = request.getParameter("msg");
if (msg != null) {
%>
<h1> <%= msg %></h1>
<%
}
%>
<form action="result.jsp" method="post">
아이디: <input type="text" name="userID"/><br>
비밀번호: <input type="password" name="userPw" /><br />
<input type="submit" value="로그인"/>
<input type="reset" value="다시입력" />
</form>
</body>
</html>
9. ID를 입력하지 않았을 경우 다시 로그인 창으로 포워딩하면서 이번에는 <jsp:param> 태그를 이용해 msg 값을 전달합니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
request.setCharacterEncoding("utf-8");
%>
<%!
String msg = "아이디를 입력하지 않았습니다. 아이디를 입력해 주세요.";
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>결과창</title>
</head>
<body>
<%
String userID = request.getParameter("userID");
if (userID.length() == 0) {
%>
<jsp:forward page = "login2.jsp">
<jsp:param name="msg" value="<%= msg %>" />
<%
}
%>
<h1>환영합니다. <%=userID %></h1>
</body>
</html>
10. http://localhost:8090/pro13/login2.jsp로 요청합니다. 최초 로그인창 접속 시 앞에서와는 달리 어떤 메시지라도 나타나지 않습니다.

11. ID를 입력하지 않고 로그인하면 로그인창으로 다시 포워딩되면서 오류 메시지가 나타납니다.

'프로그래밍 언어 > 자바 웹' 카테고리의 다른 글
| 유즈빈 액션 태그를 이용한 회원 정보 조회 실습 (0) | 2025.12.03 |
|---|---|
| 자바 빈을 이용한 회원 정보 조회 실습 (0) | 2025.11.30 |
| JSP 페이지에 이미지 포함 실습 (0) | 2025.11.24 |
| 인클루드 액션 태그 사용하기 (0) | 2025.11.18 |
| 스크립트 요소 이용해 회원 정보 조회하기 (0) | 2025.11.15 |