포워드 액션 태그의 특징
서블릿에서 다른 서블릿으로 포워딩하는 방법에 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로 요청 후 결과 확인
최초 로그인창 접속 시 아무 메시지도 출력되지 않고 입력창만 출력된다.
ID를 입력하지 않고 로그인하면 로그인창으로 다시 포워딩되면서 오류 메시지가 나타난다.
'웹 개발 기초 > 자바 웹을 다루는 기술' 카테고리의 다른 글
유즈빈 액션 태그를 이용한 회원 정보 조회 실습 (0) | 2023.03.01 |
---|---|
자바 빈을 이용한 회원 정보 조회 실습 (0) | 2023.03.01 |
인클루드 액션 태그 사용하기 (0) | 2023.02.28 |
스크립트 요소 이용해 회원 정보 조회하기 (1) | 2023.02.28 |
JSP welcome 파일 지정하기 (0) | 2023.02.28 |