갈림길 이정표

[JSP] Redirect / Forward test 2 (feat. WEB-INF) 본문

Programming Language/Servlet & JSP

[JSP] Redirect / Forward test 2 (feat. WEB-INF)

이몽뇽 2020. 8. 26. 19:15

<a href="WEB-INF/kbs.jsp">kbs</a>처럼 WEB-INF 폴더 안의 파일은 직접 호출 불가

[jsp2call.html]

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
Redirect / Forward test
<br>
<form action="jsp2called.jsp" method="post">
자료 입력: <input type="text" name="data" value="james">
<input type="submit">
</form>
<br>
WEB-INF 안에 있는 파일을 클라이언트에서 호출 시도
<br>
<a href="WEB-INF/kbs.jsp">kbs</a>	<!-- 클라이언트 통해 직접 부를 수 없음! -->
</body>
</html>
[jsp2called.jsp]

<%@page import="java.util.ArrayList"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
//현재 jsp파일은 서버에서만 운영할 파일: business logic을 담당 (때문에 html 시작 tag가 필요없음)
String data = request.getParameter("data");

/*넘어온 자료로 이런 저런 작업을 하다가....*/

String msg = "Mr. " + data;

//1. redirect 방식
/*response.sendRedirect("jsp2called2.jsp?data=" + msg);	//data라는 key, msg라는 value*/

//2. Forward 방식
request.setAttribute("data", msg);
ArrayList<String> list = new ArrayList<String>();	//새로운 ArrayList객체 생성 (소.괄.호 중요)
list.add("oscar");
list.add("john");
list.add("alex");
list.add("osee");
request.setAttribute("friend", list);	//이정보들은 현재 jsp파일에서만 유효하기때문에

/*request.getRequestDispatcher("jsp2called2.jsp").forward(request, response);*/	//forward 방식으로 넘겨주면 됨
%>

<jsp:forward page="jsp2called2.jsp"></jsp:forward>	 <!--action tag로 부르는 방법 -->

<!--<jsp:forward page="WEB-INF/kbs.jsp"></jsp:forward>-->
<!--href와 달리 이건 가능한 이유가 서버에서 서버로 호출하는 forward방식이기 때문 (action tag: forward 는 하나만 가능?)-->
[jsp2called2.jsp]

<%@page import="java.util.ArrayList"%>
<%@ 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>
<h2>서버가 넘겨준 자료 출력</h2>
<%
//1. redirect
request.setCharacterEncoding("utf-8");
String data = request.getParameter("data");	//data key 안에 msg value 들어 있음
out.println("자료는 " + data);		//value인 msg 출력 될 것임 (http://localhost/web_pro4/jsp2called2.jsp?data=Mr.%20james)

//2. forward
String data2 = (String)request.getAttribute("data");//object로 넘어오므로
out.println("data2: " + data2);

ArrayList<String> myarr = (ArrayList<String>)request.getAttribute("friend");
out.println("<br> myarr: ");
for(String f:myarr){	//향상된 for 문
	out.println(f + " ");
}													//http://localhost/web_pro4/jsp2called.jsp
//													서버에서 서버를 불렀기 때문에 jsp2called (jsp2called2 X)
%>
</body>
</html>

'Programming Language > Servlet & JSP' 카테고리의 다른 글

[JSP] javaBeans *개념 미완성*  (0) 2020.08.26
[JSP] Session test  (0) 2020.08.26
[JSP] Redirect / Forward 방식  (0) 2020.08.26
[JSP] 9개 내장객체  (0) 2020.08.26
[JSP] 인클루드(Include) 지시어  (0) 2020.08.26
Comments