3) session
HTTP 프로토콜은 요청/응답 구조로 되어 있어 서버가 요청에 대한 응답을 전송하고 나면 연결이 끊어지게 됨.
따라서 클라이언트의 정보가 유지되어야 할 필요가 있는 경우를 위해 가상 연결이라는 개념의 세션이 등장.
클라이언트의 세션 정보(연결정보)를 저장한 객체 → 연결이 되어 있으면 페이지 상관없이 값이 유지
세션 기억장소가 삭제되는 경우
- 사용자가 사용하는 브라우저를 모두 닫았을 경우 - 사용자가 세션 ID를 잃어버림
- 사용자가 서버에 접근을 세션 유지 시간에 의해 30분동안 하지 않았을 경우
- 사용자가 로그아웃(세션삭제명령) - 세션 기억 장소 삭제
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jsp1/session.jsp</title>
</head>
<body>
<h1>jsp1/session.jsp</h1>
<%
//클라이언트의 세션 정보(연결정보)를 저장한 객체 → 연결만 되어있으면 페이지 상관없이 값이 유지
//세션 기억장소 삭제가 되는 경우
//사용자가 사용하는 브라우저를 모두 닫았을 때 - 사용자가 세션ID를 잃어버림
//사용자가 서버에 접근을 30분동안 하지 않았을 때 - 세션 기억 장소 삭제
//사용자가 로그아웃(세션삭제명령) - 세션 기억장소 삭제
%>
세션 ID : <%=session.getId() %><br> <!--통행증. 기억장소가 새로만들어지지 않는 이상 유지됨 -->
세션 만든 시간 : <%=session.getCreationTime() %><br> <!-- 유지됨 -->
세션 마지막 접근 시간 : <%=session.getLastAccessedTime() %><br> <!-- 시간이 지남에 따라 변동됨 -->
세션 유지 시간 : <%=session.getMaxInactiveInterval() %>초<br> <!-- 단위 초,sec -->
<%
//세션 유지 시간 변경:
session.setMaxInactiveInterval(3600);
%><br>
세션 유지 시간 변경 : <%=session.getMaxInactiveInterval() %><br>
<%
// 사용자가 로그 아웃(세션기억장소 전체 삭제 명령)
//session.invalidate();
//세션 영역에 속성을 생성(저장)
session.setAttribute("sessionName","sessionValue");
%><br>
세션 값 가져오기 : <%=session.getAttribute("sessionName") %><br>
</body>
</html>
로그인 원리 이해
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jsp1/login.jsp</title>
</head>
<body>
<h1>jsp1/login.jsp</h1>
<form action="loginPro.jsp" method="get">
아이디 : <input type="text" name="id"><br>
비밀번호 : <input type="password" name="pw"><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>jsp1/loginPro.jsp</title>
</head>
<body>
<h1>jsp1/loginPro.jsp</h1>
<%
//사용자가 입력한 id,pw값을 http가 loginPro.jsp 요청하여 서버에 전달
//→ 서버가 정보를 전달 받아서 request, response 기억장소를 만듦
//→ request에 id,pw 파라미터값을 저장
//→ 가져 온 정보를 변수에 저장
String sid = request.getParameter("id");
String spw = request.getParameter("pw");
// 변수값 파라미터값
//request는 String을 사용
%>
폼에서 입력한 ID : <%=sid %><br>
폼에서 입력한 PW : <%=spw %><br>
<%
//DB 접속하기를 배우지 않았기 때문에 임의로 DB에 저장된 사용자 dbId="admin" dbPw="p123" 정하기
String dbId="admin";
String dbPw="p123";
%>
DB에 저장된 ID : <%=dbId %><br>
DB에 저장된 PW : <%=dbPw %><br>
<%
//폼에서 입력한 ID와 DBID 비교 and 폼에서 입력한 PW와 DBPW 비교
//둘 다 일치하면 "ID, PW 일치"
//틀리면 "ID, PW 불일치"
//문자열 비교 변수값.equals(변수값)
// if(sid.equals(dbId)){
// out.println("ID 일치");
// if(spw.equals(dbPw)){
// out.println("ID, PW 일치");
//
// } else {
// out.println("PW 불일치");
// }
// } else {
// out.println("ID 불일치");
// if (spw.equals(dbPw)){
// out.println("PW 일치");
// }else {
// out.println("PW 불일치");
// }
// }
if(sid.equals(dbId) && spw.equals(dbPw)){
out.println("ID, PW 일치");
//ID, PW 일치 시 로그인 표시 설정(서버-클라이언트 연결되어 있는 동안페이지 상관없이 값을 유지)
session.setAttribute("ID", sid);
//세션에 로그인 표시 저장("세션에 로그인 표시이름",값)
//ID값은 고유하고, ID기준값으로 다른 정보를 가져올 수 있기 때문에 ID로 하는것이 바람직함. PW는 동일한 사용자가 있을 수 있음.
response.sendRedirect("loginMain.jsp");
//login.Main.jsp 이동(하이퍼링크 기능)
}else{
out.println("ID, PW 불일치");
response.sendRedirect("login.jsp");
//login.jsp 이동(하이퍼링크 기능)
}
%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jsp1/loginMain.jsp</title>
</head>
<body>
<h1>jsp1/loginMain.jsp</h1>
<%=session.getAttribute("ID") %>님이 로그인 하셨습니다.
<a href="logout.jsp">로그아웃</a>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jsp1/logout.jsp</title>
</head>
<body>
<h1>jsp1/logout.jsp</h1>
<%
session.invalidate();
//세션 → 연결정보를 저장하는 기억장소 삭제
response.sendRedirect("login.jsp");
//login.jsp 이동
%>
</body>
</html>
4) application
ServletContext 자바내장객체 서버 정보를 저장한 객체
→서버가 시작되면(start) application 내장객체가 기억장소에 할당. 서버에 하나만 할당. 서버가 stop 되면 기억장소 삭제. 서버의 자원 공유 ex)방문자 수
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jsp1/application.jsp</title>
</head>
<body>
<h1>jsp1/application.jsp</h1>
서버 정보 : <%=application.getServerInfo() %><br>
서버 물리적인 경로 : <%=application.getRealPath("/") %><br>
</body>
</html>
5) out
응답 페이지를 전송하기 위한 출력 스프림(출력 정보 저장) 객체
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jsp1/out.jsp</title>
</head>
<body>
<h1>jsp1/out.jsp</h1>
<%
out.println("출력정보저장<br>");
%>
출력 버퍼의 크기 : <%=out.getBufferSize() %>byte<br>
출력 버퍼의 남은 크기 : <%=out.getRemaining() %>byte<br>
<%
out.close();
//출력을 종료
out.println("종료 후 출력<br>");
//나타나지 않고 에러 메세지 IOException
%>
</body>
</html>
6) 나머지 내장객체
pageContext
페이지 실행에 필요한 컨텍스트 정보(프로젝트 한 페이지 정보)를 저장한 객체.
페이지가 바뀌면 새로운 페이지 정보로 내장 객체를 생성하고, 기존 내장객체가 사라짐
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>jsp1/otherIO.jsp</title>
</head>
<body>
<h1>jsp1/other.jsp</h1>
현 페이지 request 정보 : <%=pageContext.getRequest() %><br>
현 페이지 session 정보 : <%=pageContext.getSession() %><br>
</body>
</html>
config
서블릿 클래스로 변환되어 서블릿 인스턴스가 생성될 때 참조해야 할 초기 설정 정보들을 저장해 놓은 객체
page
서블릿 인스턴스 자체를 나타내는 객체
exception
예외가 발생하였을 경우 그 예외를 처리할 에러 페이지를 사용자가 지정한 경우에 해당 에러 페이지에 전달되는 객체
'KDT > WEB' 카테고리의 다른 글
231207 WEB - JSP7(쿠키) (0) | 2023.12.07 |
---|---|
231205 WEB - JSP6(객체 범위, 액션태그, 쿠키) (0) | 2023.12.05 |
231130 WEB - JSP4(내장객체) (0) | 2023.11.30 |
231128 WEB - JSP3(웹 서버 동작 과정, %, 내장객체) (0) | 2023.11.28 |
231127 WEB - JSP2(웹 서버 동작 원리, 주석, %) (0) | 2023.11.27 |