Learn/KH정보교육원

[KH정보교육원 당산] 33일차 (Cookie, Session, JavaBeans, EL , JSTL)

Dahoon06 2021. 4. 23. 11:20
728x90
반응형

Cookie / Session : 임시 저장소

 

Cookie

: 웹 브라우저에 저장(탭간의 공유가능)

 

쿠기 객체 생성)

Cookie c = new Cookie("이름","값");

 

쿠기 나이 설정) - 생성한 객체를 통하여

c.setMaxAge(시간); // 시간은 초단위

 

** 쿠키의 생명을 지정해 주지않으면 브라우저가 꺼질때까지 쿠기는 살아있게 된다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>웹 브라우저에 쿠키 전송</title>
</head>

<body>
	<%	
		//쿠키 생성
		Cookie c = new Cookie("Name","Value");
	
		//쿠키 수명 설정 ( 초단위 )
		c.setMaxAge(60);
		
		//쿠키를 브라우저에 전송
		response.addCookie(c);
		
		//객체생성하자마자 바로 전송
		//쿠기 시간을 설정 안했기 때문에 웹브라우저가 종료되야 종료
		response.addCookie(new Cookie("pw","1234"));
		response.addCookie(new Cookie("age","22"));
	%>
</body>
</html>

 

 

 

쿠기를 브라우저에 내보내기

response.addCookie(c);

 

 

 

생성된 쿠키(웹브라우저 - 개발자도구 - 소스탭)

 

** 접속 했던 웹 주소 : localhost:9000 (도메인)
                             127.0.0.1:9000 ( ip )    

쿠키는 도메인으로 접속 했을때 ip로 접속했을때 쿠키명이 달라진다.

( 즉 같은 웹브라우저라도 접속 방식에 따라 쿠키명이 달라진다.)

 

 

도메인 주소로 실행  //  아이피 주소로 실행

 

같은 값이 들어있는 쿠키 일지라도 실행방법에 따라 생성된 쿠기명이 달라지게된다.

 

 

값을 꺼낼때는 쿠키'들'을 꺼내는 것이기 때문에 배열로 받아야한다

 

<%	//쿠키들 이기 때문에 배열로 받아와야한다.
		Cookie[] cookies = request.getCookies();
	
		for(Cookie c : cookies){
			out.println(c.getName() + " : " +c.getValue()+"<br /");
		}
	
	%>

 

쿠키의 기본값

이 값은 웹브라우저에서 설정해주는 값

내가 설정한 값은 나이를 설정 해줬기 때문에 사라졌다.

 

그 후에 생성한 쿠기

 

 


 

Session

: 웹 서버 내부에 저장 ( 어플리케이션 쪽 )

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>웹서버의 어플리케이션 영역의 임시저장소</title>
</head>

<body>
JSP는 세션객체 미리 설정되어 있다.(내장 객체) <br />
<%
 session.setAttribute("name","value"); // => 실제 저장값은 Object로 저장된다,
 session.setAttribute("age",10);   // 그래서 값을 추출할때는 형변환이 필요!!
%>
</body>
</html>

cookie는 저장될때 문자열로 저장되지만 session은 정수형으로도 저장이 가능하다.

 

단, 어떤 값이 저장 되더라도 Object 타입으로 저장 되기 때문에 값을 꺼낼때는 그에 맞게 형 변환이 필요하다.

 

값 추출

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>session 저장소의 값 추출</title>
</head>

<body>
	<h2>세션 값 추출</h2>
	<%
	 String id = (String)session.getAttribute("name");
	 int age = (int)session.getAttribute("age");
	 session.removeAttribute("id");
	%>
	
	아이디 : <%= id %>
	<br />
	나이 : <%= age %>
</body>
</html>

 

형변환 해서 값을 꺼내준다.

 

 

 

 

설정한 value값과 10이라는 숫자가 정상적으로 출력됨

 

 

쿠키는 생명주기를 줘야만 값이 지워지지만 session은 메소드를 활용하여 값을 지울 수 있다.

session은 값을 지울때 session이 가지고 있는 removeAttrubute()메소드를 통해 값을 지운다.

 

 

 

 

세션 이름을 모를때 값을 확인 하기위한 

getAttributeNames();

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.util.Enumeration" %>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>session에 있는 모든 값들 추출</title>
</head>

<body>
	<%
	Enumeration<String> names = session.getAttributeNames();
	
	while(names.hasMoreElements()){
		String name = names.nextElement().toString(); 		 // 세션 이름 추출
		String value = session.getAttribute(name).toString();//세션 값 추출
		out.print(name + " : " + value +"<br / >");
	}
	%>

</body>
</html>

 

 

<%@ page import="java.util.Enumeration" %> 임포트 필요

 

 

추출

 

 

 

session에 관련된 메소드

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title>세션 정보 얻기</title>
</head>

<body>
	<h3>세션 정보를 얻어내어 출력</h3>
	<%
		String id_str = session.getId(); // 세션 아이디
		long lastTime = session.getLastAccessedTime(); // 최종 접속 시간
		
		long createTime = session.getCreationTime();   //최초 접속 시간
		long time_used = (lastTime - createTime)/60000;
		
		int inactive = session.getMaxInactiveInterval()/60; // 세션의 기본 수명
		
		boolean n = session.isNew(); // 새로운 세션이 있는지 확인
	%>
	1. 세션 아이디 <%= id_str %> <br />
	2. 현 페이지에 머문 시간 <%= time_used %> <br />
	3. 세션의 유효시간 <%= inactive %><br />
	4. 새로운 세션 여부 :
	<%
	if(n){
		out.print("새로운 세션 존재");
	} else {
		out.print("새로운 세션 없음");
	}
	%>
	
</body>
</html>

 

 

 

 

새로고침 시에 머문 시간이 올라간다.


간단한 로그인 기능

 

로그인 창(loginFomr.jsp) 에서 입력한 값을 testLogin.jsp로 넘겨서 값을 확인!!

loginFomr.jsp ->  testLogin.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	String userID = "admin";
	String userPW = "1234";
	String userName = "관리자";
	
	request.setCharacterEncoding("UTF-8");
	
	String id = request.getParameter("id");
	String pw = request.getParameter("pw");
	
	if(userID.equals(id) && userPW.equals(pw)){
		session.setAttribute("loginUser", userName);
		response.sendRedirect("main.jsp");
	} else {
		response.sendRedirect("loginForm.jsp");
	}
%>

 

넘어온 값이 맞다면 세션 관리를 위해

session.setAttribute();를 통해 세션에 값을 추가해준다.

 

값이 맞다면 main.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>
<%
 if(session.getAttribute("loginUser") == null){
	 response.sendRedirect("loginForm.jsp");
 } else {
%>
	<%= session.getAttribute("loginUser") %> 님 안녕하세요 <br />
	<form action="logout.jsp" method="post">
		<input type = "submit" value="로그아웃" />
	</form>
	
	<% } %>
</body>
</html>

 

마찬가지로 세션 관리 코드가 들어간다.

 

세션에 값이 저장되어있다면 메인 페이지를 출력해주지만 만약 값이 없다면 다시 로그인 폼으로 이동

main.jsp -> 로그아웃 버튼을 통하여 -> logout.jsp로 이동

 

logout.jsp

<body>
	<%
	 session.invalidate(); // 세션 자체를 삭제
	%>
	<script>
		alert("로그아웃 되었습니다.");
		document.location.href="loginForm.jsp";
	</script>
</body>

 

로그아웃 페이지를 실행이 되면 먼저 세션에 들어있는 값을 먼저 삭제한다. 

 

** JavaScript의 alert 이 사용되었는데 alert이 종료될때까지 그 아래 있는 코드는 실행되지 않는다.


JavaBeans

<jsp:useBean id="생성될 bean 객체명" class="사용할 자바빈이 있는 클래스위치" scope="영역" />

 

* 자바에서의 MemberBean bean = new MemberBean(); 과 값은 의미

 

** 클래스 (객체를 생하기위한 클래스와 그 클래스가 위치한 경로(즉 패키지))

값을 가져와서 id값(객체를 저장받을 변수) 에 저장하여 사용

조건

  • 반드시 생성자 필요
  • private으로 생성했기 때문에 반드시 getter,setter필요
  • 모든 변수는 반드시 private

 

 

 

 

 

 

 

     Java Resources -> src에 자바빈즈를 만들기 위한 class를 생성

 

 

 

 

 

 

 

자바빈즈로 사용될 MemberBean.java

 

변수를 private으로 설정하여 각 getter와 setter 생성

 

 

1. 태그를 사용하지 않고 값을 출력

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>


<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<title></title>
</head>

<body>
	<jsp:useBean id="member" class="com.jdh.MemberBean"></jsp:useBean>
	<h2>생성된 자바빈(member)의 현재 변수값 출력</h2>
	<br /><br />
	이름 : <%= member.getUserName() %><br />
	아이디 : <%= member.getUserID() %><br />
	<br />
	<h2>자바빈의 멤버 변수에 값을 설정</h2>
	<%
		member.setUserName("꽃가루 알레르기 싫다..");
		member.setUserID("콧물이 안멈춘다..");
	%>
	
	<h2>설정된 값을 출력</h2>
	이름 : <%= member.getUserName() %><br />
	아이디 : <%= member.getUserID() %><br />
</body>
</html>

 

처음에는 값을 넣지않아서 null값

 

그 다음은 set을 통해 값을 넣었기 때문에 입력한 값이 출력되었다.

 

 

 

2.태그(Property)를 이용하여 값을 입,출력

 

값 추가(set) : <jsp:setProperty property="변수명" name="객체명" value="date" />

=> m.setName("data"); 의미

 

값 꺼냄(get) : <jsp:getProperty property="변수명" name="객체명" />

 

<%@ 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>
	생성된 자바빈(member)에 태그를 사용하여 값을 설정
	<jsp:useBean id="member" class="com.jdh.MemberBean"></jsp:useBean>
	<jsp:setProperty property="userName" name="member" value="이름" />
	<jsp:setProperty property="userID" name="member" value="아이디" />
	<hr/>
	설정된 값 추출
	<br />
	이름 : <jsp:getProperty property="userName" name="member" /><br />
	아이디 : <jsp:getProperty property="userID" name="member"/><br />

</body>
</html>

 

 

 

출력 화면

 

 


실습을 위한 간단한 회원가입 폼

 

03_addMemberForm.jsp

 

입력한 값을 04_addMember.jsp 으로 전달

 

<%@ 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.setCharacterEncoding("UTF-8");
%>
	<jsp:useBean id="member" class="com.jdh.MemberBean" />
	<jsp:setProperty property="*" name="member" />
	
	이름 : <jsp:getProperty property="userName" name="member"/>

</body>
</html>

POST방식으로 보내주기에 인코딩 설정

 

자바 빈즈는 아까 사용했던  MemberBean.java를 사용했다.

 

<jsp:setProperty property="*" name="member" />

=> property="*"  *로 지정했는데 입력된 값이 알아서 저장된다.(단, 꺼낼때 파라미터명과 value명이 같아야한다.!!)

 

이름을 자바빈즈에서 userName으로 설정했기 때문에 꺼낼때도(get) userName

 

출력

 

 


 

JSTLEL

 

[JSP] EL 표현식

EL ( Expression Language ) : 자바빈의 프로퍼티, 값을 JSP의 표현식 <%= %>이나 액션 태그 를 사용하는것 보다 쉽고 간결하게 꺼낼수 있게 하는 기술 ** jstl.jar 라이브러리와 standard.jar 라이브러리 필..

june-17.tistory.com

 

[JSP] JSTL (JSP Standard Tag Library)

JSP 개발을 단순화하기위한 태그 library ** jstl.jar 라이브러리와 standard.jar 라이브러리 필요 지시자 선언 <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> : prefix="아무거나" prefix..

june-17.tistory.com

 

 

JSTL 실습에서 사용된 예제에서는 기능이 같다.

 

if 태그는 조건을 검색하기 위한 태그

test=를 사용하여 이 안에 조건값을 넣고 닫는 태그 안쪽에다가 조건이 맞을 때의 출력값을 입력한다.

 

	<c:if test="${param.color == 1 }" >
		<span style="color:red;">빨간색</span>
	</c:if>
	<c:if test="${param.color == 2 }" >
		<span style="color:green;">초록색</span>
	</c:if>
	<c:if test="${param.color == 3 }" >
		<span style="color:blue;">파란색</span>
	</c:if>

 

 

fruitSelectForm.jsp -> fruitSelect.jsp

 

<select>태그가 처음 사용되었다.

파라미터명 => select태그에 선언한 name값

파라미터값 = option 태그에 선언한 value값

 

fruitSelectForm.jsp

 

 

choose 태그는 switch~case 라고 생각하면 될거 같다.

choose 태그 안쪽에 c:when test 조건 을 걸어 그 해당값에 따라 입력한 값이 출력

 

<c:choose>
		<c:when test="${param.fruit == 1 }">
			<span style="color:pink">사과</span>
		</c:when>
		<c:when test="${param.fruit == 2 }">
			<span style="color:yellow">바나나</span>
		</c:when>
		<c:when test="${param.fruit == 3 }">
			<span style="color:red">딸기</span>
		</c:when>
		<c:when test="${param.fruit == 4 }">
			<span style="color:purple">포도</span>
		</c:when>
		<c:when test="${param.fruit == 5 }">
			<span style="color:green">수박</span>
		</c:when>
	</c:choose>

 

 


 

728x90
반응형