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를 생성

변수를 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>

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

입력한 값을 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

JSTL과 EL
[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값

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>
'Learn > KH정보교육원' 카테고리의 다른 글
[KH정보교육원 당산] 35일차 (검색기능을 통하여 리스트 출력) (0) | 2021.04.27 |
---|---|
[KH정보교육원 당산] 34일차 (JSTL 실습, Servlet) (0) | 2021.04.26 |
[KH정보교육원 당산] 32일차 ( forward 예제 풀이, Action Tag) (0) | 2021.04.22 |
[KH정보교육원 당산] 31일차 (JSP실습) (0) | 2021.04.21 |
[JavaScript] history 객체 (0) | 2021.04.20 |