jsp 에서 사용하는 기본 문법 forwar, sendRedirect [day 38]

stan·2023년 6월 28일
0

jsp

목록 보기
7/15

JSP에서 사용하는 기본 문법

데이터를 유지해야 하면 forward
유지 안해도 되면 sendRedirect

A -> B페이지로 옮기고 C페이지로 가야 할때
유지가 되어야 하면 forward
각각 상관 없을때 sendRedirect

sendRedirect로 화면에 보여줄게 없기 때문에 html이 필요 없다

Test01

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" isErrorPage="true" %>
    					 <!-- 별도 선언없이 사용 가능 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>에러페이지</title>
</head>
<body>
<!-- 자바영역에 exception 보여줘; exception객체 선언 되어 있지않앙! -->
<h1> <%= exception %> </h1> 



</body>
</html>

Test02

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" errorPage="test01.jsp" %>
    							<!-- 에러발생했을때 여기로 가 -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>일부러만드는에러</title>
</head>
<body>

<%
	String str="apple";
	int i=Integer.parseInt(str);
%>


</body>
</html>

Test03

<%@ 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>


									<!-- 여러개를 보내기위해서 post사용 -->
	<form action = "test04.jsp" method="post">
		선택상자 <select name="box">
				<option value="apple">사과</option>
				<option value="banana">바나나</option>
				<option value="kiwi">키위</option>
				</select>

		<br>								<!-- 체크박스 오른쪽의 영화 라는 애는 단순텍스트라서
											value를 통해 영화라는 것을 알려줘야함 -->
		체크박스 <input type = "checkbox" name = "fav" value="영화">영화
				<input type = "checkbox" name = "fav" value="드라마">드라마
				<input type = "checkbox" name = "fav" value="애니메이션">애니메이션
			<br>
			<input type="submit" value="데이터 전송">

	</form>


</body>
</html>

Test04

<%@ 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>

	선택상자 <%= request.getParameter("box") %> <br>
	체크박스(는 여러개니까 리스트로 출력) 자바로 하면 좋앙
	<ul>
	<%
	String[] datas=request.getParameterValues("fav"); //parametervalues를 이용하면 체크박스의 값들을 여러개 받아올 수 있음
		for(int i=0; i<datas.length; i++){//전달받은데이터개수만큼
			out.println("<li>"+datas[i]+"</li>");
		}
	%>
	</ul>
	 
</body>
</html>

Test05

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>시작페이지</title>
</head>
<body>

<form action="test06.jsp" method="post">
	forward 액션으로 데이터를 전송하기 <br>
	<input type = "text" name="msg">
	<input type = "submit" name="전송">
	
</form>

<hr>

<form action="test07.jsp" method="post">
	response.sendRedirect()액션으로 데이터를 전송하기 <br>
	<input type = "text" name="msg">
	<input type = "submit" name="전송">
</form>



</body>
</html>

Test06

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>forward 액션</title>
</head>
<body>

<!-- 액션태그 -->
	<jsp:forward page="test08.jsp">
		<jsp:param value="12345" name="test"/>
	</jsp:forward>
	<%-- 
	http://localhost:8080/day38/test06.jsp <<== url이 test06인 상태
	forward 액션 태그를 활용하면
	처음에  요청했던(전송했던) 데이터드링 유지 가능 
	URL이 변경되지 않음 
		== 진짜로 새로운 요청이 된것이 아니라, 새로운 요청이 (추가된 요청이) 처리된 것 처럼 동작--%>

</body>
</html>

Test07

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>response.sendRedirect()</title>
</head>
<body>




<%
//내장객체를 활용하기 때문에 자바영역 필요
	response.sendRedirect("test08.jsp");
	// 처음에 전송한(요청한) 데이터가 유지 xxxxx
	// URL이 변경됨
	//	== 새로운 요청이 처리됨 
	//데이터를 유지 하지 않아도 되면 sendRedirect를 활용
	
%>

</body>
</html>

Test08

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>결과페이지</title>
</head>
<body>

<h1> msg : <%= request.getParameter("msg") %> </h1>
<h1> test : <%= request.getParameter("test") %></h1>

</body>
</html>

Test09

<%@ 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>

<h1>로그인</h1>
<form action="test10.jsp" method="post">

	아이디 <input type="text" name="mid"> <br>
	비밀번호 <input type="password" name="mpw"> <br>
	<input type="submit" value="쇼핑시작!">

</form>

</body>
</html>

Test10

<%@ 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>

<%
	
	//request객체의 멤버변수 parameter의 getter로 		스트링타입의 member변수에 할당 
	String member=request.getParameter("mid");
	if(session.getAttribute("member")==null){ //혹시 첫 로그인이야? 그때만 세팅 해  
		session.setAttribute("member", member); //멤버등록 해 줘야 하니까 처음꺼에 "member"
	}
%>

<h1><%=session.getAttribute("member")%>님, 안녕하세요!:D</h1>
<form action="test11.jsp">
	상품 <select name = "product"> 
	<option>티셔츠</option>
	<option>목도리</option>
	<option>청바지</option>
	<option>운동화</option>
	<option>가방</option>
	</select>
	<input type="submit" value="장바구니에 추가하기">
</form>

<hr>
<a href="test12.jsp">최종결제</a>

</body>
</html>

Test11

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8" import="java.util.ArrayList"%>
<!-- 화면에 보여줄 예정이 전혀 없음 html 필요 없음 -->
<%
//★★★★★★★★★★★
//장바구니, 로그인 유지 여부, 광고 띄우지않기 설정 등
//서버가 변경되어도 '브라우저가 유지되고있었다면 설정이 유지되어야하는 상태'에 있는 데이터들을
//"세션(session)"으로 관리!!!!
//일정 시간이 흐르면 연결이 해제됨
//★★★★★★★★★★★

request.setCharacterEncoding("UTF-8");

//session 내장객체야, 너가 가지고 있는 것 중에 장바구니 좀 줘라
//처음보는 메서드를 활용 할 떄에는 output을 확인 해 줘야 함
//output String 이니까 형변환
//session에는 오브젝트로 저장되어 있으니까 꺼내서 쓸때마다 다운캐스팅 해줘야 한다
//attribute는 session의 멤버변수
//Parameter는 단발성; 다른 페이지로 가면 바로 드랍됨 

ArrayList<String> datas = (ArrayList<String>)session.getAttribute("datas");
//세션이라는 객체의 멤버변수 attribute로 '"datas"'라는 이름의 String을 불러와
//datas라는 String타입의 어레이리스트(장바구니)를 선언하고 거기에 대입
//근데 session은 타입이 obj라서 ArrayList<String> 타입으로 다운캐스팅을 할거얌

String product=request.getParameter("product"); 
//String타입의 product라는 변수에 request라는 객체의 parameter라는 멤버변수로 String타입의 "product"를 불러와서 대입해
//"product"는 test10에 상품 <select name = "product">로 5개의 상품있어

if(datas==null){ //혹시 datas(장바구니)가 비어있어? 즉, 첫번째 상품이니?
		datas = new ArrayList<String>();
		//그럼 이전에 선언한 스트링타입 어레이리스트의 datas(장바구니)에 새로운 어레이리스트 객체를 생성해서 대입해 
		
		session.setAttribute("datas",datas); //[장바구니를 session에 저장 하는거임]
		//그리고 세션이라는 객체의 멤버변수 attribute를 "datas"라는 이름의 식별자(key)로 참조할 수 있게 지정하고 
		//datas라는 이름으로 ArrayList<String>객체를 session에 저장해
}	
datas.add(product);//그리고 datas라는 스트링타입 어레이리스트에 위서에 불러온 product를 추가해 



//사용자가 product라는 이름의 파라미터를 전송할 예정
//전달받은 상품을 "장바구니"에 추가
//현재 한글 데이터 전송중 -> 인코딩 필수

// 장바구니를 맨 처음 만드는 경우에는 새로 new
// 기존 장바구니가 있는 경우에는 .add()

//서버가 바뀌더라도 브라우져가 유지 되고 있었다면 장바구니도 유지가 되어야 함

//추가 완료되면 다시 test10.jsp로 이동

%>

<script>
	alert('<%=product%>이(가) 장바구니에 추가되었습니다! :D');
	history.go(-1); //현재에서 이전 페이지로 이동 js의 history 객체를 이용

</script>

Test12

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8" import = "java.util.ArrayList" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>최종결제</title>
</head>
<body>

<h1>결제 페이지</h1>

	
	<%--세션이라는 객체의 멤버변수 attribute를 이용해서 String 타입의ㅊ"member"를 불러와	 --%>
	<!-- 그럼  -->
<h1><%=session.getAttribute("member")%>님이 결제하신 상품목록입니다. </h1> 
<!-- 브라우저가 그대로면 세션도 그대로임 
datas를 다시 null로 만드는 로직을 쓰면 다른 로그인 할때 마다 다른 장바구니-->

<ul>
	<%
		//ArrayList는 장바구니 
		ArrayList<String> datas = (ArrayList<String>)session.getAttribute("datas");
		if(datas==null){ //null 이면 아직 상품을 하나도 구매 안한거임 
			out.println("장바구니가 비어있습니다!");
		}
		else{
		for(String v:datas){
			out.println("<li>"+v+"</li>");
		}
		}
	%>
	<li></li>
</ul>

</body>
</html>
profile
이진 입니다

0개의 댓글