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