웹 개발 기초/자바 웹을 다루는 기술

포워드 액션 태그 사용하기

sungw00 2023. 2. 28. 23:14
728x90

포워드 액션 태그의 특징

서블릿에서 다른 서블릿으로 포워딩하는 방법에 RequestDispatcher를 이용하는 방법이 있다.

하지만 포워드 액션 태그를 이용하면 자바 코드 없이도 포워딩할 수 있다. 또한 포워딩 시 다른 서블릿이나 JSP로 값을 전달할 수도 있다.

 

포워드 액션 태그의 형식

<jsp:forward page="포워딩할 JSP 페이지" >
	...
</jsp:forward>

포워드 액션 태그 실습하기

1. login.jsp, 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>

로그인창에서 ID와 비밀번호를 입력한 후 action의 result.jsp로 전달하도록 login.jsp를 작성한다.

 

<%-- result.jsp --%>
<%@ 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 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>

ID를 입력하지 않은 경우 자바의 RequestDispatcher를 사용하지 않고 포워드 액션 태그를 사용해 다시 로그인창으로 이동하도록 login.jsp를 작성한다.

 

3. http://localhost:8090/pro13/login.jsp로 요청하여 로그인 시도

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

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

그런데 이 로그인 방법에는 문제가 있는데, 최초로 login.jsp로 접속하면 로그인창에 오류 메시지가 나타난다는 것이다.

페이지에 처음 접속했을 때는 ID와 비밀번호 입력창만 나타나게 하고, 오류 시에만 오류 메시지를 나타나게 하는 것이 사용자에게 더 익숙할 것이다.

 

이 과정을 <jsp:forward> 태그 안에 param 액션 태그를 이용해서 처리해보자.


1. login2.jsp, result2.jsp 파일 작성

<%-- login2.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>
<%	
	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>

로그인창에 접속시에는 getParameter( ) 메서드를 이용해 msg 값을 가져와서 표시하도록 구현한다.

최초 요청 시에는 msg 값이 null이므로 아무것도 표시하지 않게된다.

 

<%-- result2.jsp --%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	request.setCharacterEncoding("utf-8");
%>

<%!
	String msg = "아이디를 입력하지 않았습니다. 아이디를 입력해 주세요."; <%-- login.jsp로 전달할 오류 메시지를 선언한다. --%>
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>결과창</title>
</head>
<body>
<%
	String userID = request.getParameter("userID"); <%-- 로그인 시 입력한 이름을 가져옴 --%>
    <%-- 이름을 입력하지 않았을 경우 <jsp:param> 액션 태그를 이용해 오류 메시지를 login.jsp로 전달 --%>
	if(userID.length()==0) {
%>
	<jsp:forward page="login2.jsp">
<%
	}
%>
	<h1>환영합니다 <%= userID %>님!! </h1>
</body>
</html>

ID를 입력하지 않았을 경우 다시 로그인창으로 포워딩하면서 이번에는 <jsp:param> 태그를 이용해 msg 값을 전달하게 된다.

 

2. http://localhost:8090/pro13/login2.jsp로 요청 후 결과 확인

http://localhost:8090/pro13/login2.jsp로 요청한 결과

최초 로그인창 접속 시 아무 메시지도 출력되지 않고 입력창만 출력된다.

 

ID를 입력하지 않고 로그인 한 후 나타난 결과창

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

728x90