[jsp] 포워드 액션 태그

hoonak·2023년 6월 24일
0

JSP

목록 보기
5/12

서블릿에서 다른 서블릿으로 포워딩 하는 방법에 RequestDispatcher를 이용하는 방법이 있음. 하지만 포워드 액션 태그를 사용하면 자바코드 없이도 포워딩 할 수 있음. 또한 포워딩 시 다른 서블릿이나 jsp로 값을 전달할 수 있음.

포워드 액션 태그 형식

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

예 1) 로그인

  • login.jsp

로그인창에서 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>Insert title here</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>
  • result.jsp

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

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%
	response.setContentType("text/html; charset = 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"); // RequestDispatcher를 사용해 포워딩 하지 않아도 됩니다.
			dispatch.forward(request, response);
			*/
			
	%>	<!-- id를 입력하지 않았으면 다시 다시 <jsp:forward> 태그를 사용해 로그인창으로 포워딩 함. -->
		 <jsp:forward page = "login.jsp" /> 
	<%
		}
	%>
		<h1> 환영합니다. <%= userID %> 님.</h1>
</body>
</html>




하지만 id를 입력하지 않고 로그인을 시도하면 로그인창으로 포워딩하여 이와 같은 메시지를 출력함.

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

  • 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>Insert title here</title>
</head>
<body>

	<%
	// 브라우저 접속 시에는 msg 값을 가져와서 표시하고 최초 접속 시에는 null이므로 아무것도 표시하지 않음.
		String msg = request.getParameter("msg"); 
		if(msg != null) {
	%>
		<h1> <%= msg %></h1>
	<% 		
		}
	%>
	
	<form action = 'result2.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>
  • result2.jsp

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

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

<%!
	//login.jsp로 전달할 오류 메시지를 선언합니다.
	String msg = "아이디를 입력하지 않았습니다. 아이디를 입력해 주세요."; 
%>
    
<!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">
			<jsp:param name = "msg" value = "<%= msg %>"/>
		</jsp:forward>
	<% 		
		}
	%>
		<h1>환영합니다. <%= userID %> 님.</h1>
</body>
</html>


최초 로그인창 접속 시 앞에서와는 달리 어떤 메시지도 나타나지 않음.


id를 입력하지 않고 로그인하면 로그인차응로 다시 포워딩되면서 오류 메시지가 나타남.

profile
Hello World!

0개의 댓글