JSP에서 사용하는 기본 문법
데이터를 유지해야 하면 forward
유지 안해도 되면 sendRedirect
A -> B페이지로 옮기고 C페이지로 가야 할때
유지가 되어야 하면 forward
각각 상관 없을때 sendRedirect
sendRedirect로 화면에 보여줄게 없기 때문에 html이 필요 없다
<%@ 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>
<%@ 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>
<%@ 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>
<%@ 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>
<%@ 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>
<%@ 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>
<%@ 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>
<%@ 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>
<%@ 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>
<%@ 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>
<%@ 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>
<%@ 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>