JSP 기본 04

이정우·2021년 10월 25일
1

JSP

목록 보기
6/10

jsp:include 액션 태그

모든 페이지에 기본적으로 존재하여야 하는 header나 footer를 추가할 때 < jsp:include page = '위치'>로 추가가 가능하다. include 지시자와는 기능은 비슷하나 jsp에서는 변수 공유를 하지 못 하는데 그냥 include 지시자는 footer등의 변수와 본문 내용의 변수가 공유 가능하다는 내부적인 차이점이 존재한다. + 부트스트랩같은 링크들도 header등에 모아서 관리하기 편해진다.

프로토콜

http, ftp등의 여러 웹 서비스는 일정한 규칙을 준수해야하는데 이 규칙을 프로콜(표준 인터넷 규약)이라고 한다.

http

http는 비 연결 지향형 통신 프로콜이다. 클라이언트가 서버에 정보를 원하면 정보를 전달해주고 그대로 연결을 끊는다. 또한 매번 정보를 요청받고 줄때마다 새로운 페이지를 만들어서 주는것이기 때문에 이전 페이지의 정보를 기억하지 못 한다. 보통은 이러한 방법으로도 문제 없이 사용 가능하며 서버의 자원 낭비 또한 최소한 할 수 있다. 허나, 여러 쇼핑몰의 장바구니 같이 이전 페이지의 정보가 필요한 기능이 주를 이루는 서비스의 경우에는 http의 한계가 존재. 이럴때 사용하는게 쿠키. 단순히 서버에 장바구니 정보같은걸 저장하면 저장은 가능하나 서버에 불필요한 부하를 걸어 서버 속도를 저하시키는 원인이 된다. 쿠키는 서버가 아닌 클라이언트 컴퓨터의 하드디스크에 사용자의 정보를 저장하기 때문에 서버에 부하를 주지 않으면서 사용자의 정보를 적절하게 사용할 수 있다. 쿠키의 경우 적은 용량의 정보만 저장하기 때문에 이미지의 경우 경로만 저장한다.

쿠키

쿠키 추가 절차
1.쿠키 객체를 생성한다.
2.쿠키의 속성 값을 설정한다.
3.response 객체의 addCoolkie() 메소드를 사용하여 쿠키를 추가한다.

response 객체로 저장 후 request 객체로 정보를 불러옴.

쿠키 MaxAge

쿠키객체.setMaxAge(3652460*60); //쿠키의 유효 기간을 1년 단위로 설정.
그후 response 객체의 addCookie를 통해 쿠키 정보를 클라이언트 측에 저장해놔야지 제대로 환경 변경이 끝남.

쿠키를 설정하고 설정한 내용을 클라이언트 컴퓨터에 보내서 셋팅을 한 후에 기본적인 내용을 쿠키로 저장시켜보는 작업
<body> 
<%
//1.Cookie 객체 생성
Cookie c = new Cookie("id", "lee");
//2.유효기간 설정.
c.setMaxAge(365*24*60*60);
//3.클라이언트에 쿠키 전송(객체의 환경 설정 정보 보내주기)
response.addCookie(c);
//4. 쿠키를 생성하여 클라이언트에 전송
response.addCookie(new Cookie("pwd", "1234"));
response.addCookie(new Cookie("age", "27"));
%>
</body>

쿠키 데이터 읽어오기

클라이언트로부터 쿠키 데이터 얻어오기.

<body>
<%
Cookie[] cookies = request.getCookies();
for (Cookie c : cookies) {
	out.println(c.getName() +" : " + c.getValue() + "<br>"); 
}
%>
</body>

쿠키 삭제하기

쿠키의 유효기간을 0으로 만들어서 쿠키를 삭제할 수 있다.

<body>
<%
Cookie cookie = new Cookie("id","");
cookie.setMaxAge(0); //쿠키의 유효기간을 만료시킴
response.addCookie(cookie);
%>
<h3> id 쿠키가 삭제되었습니다</h3>
<a href = "02_getCookies.jsp">
쿠키 삭제를 확인하려면 클릭하세요.
</a>
</body>

세션(session)

쿠키는 다른 페이지로 이동할 경우 정보가 유지되어야 할 때 사용하는 기법이었다. 여기서 쿠키는 pc방처럼 다른 사람과 pc를 공유하는 환경에서는 쿠키 저장 위치만 알 수 있다면 보안 유지가 되지 않는다는 단점과 데이터 저장 크기가 1.2mb라는 한계가 존재한다. 이러한 단점을 보안한게 세션이다.
세션은 jsp(서버)에서만 접근 가능하므로 보안성이 좋고 저장 데이터에 한계가 없다.
세션은 브루아저당 한 개씩 존재하는 객체로써 브라우저를 닫기 전까지는 페이지를 이동하더라도 사용자의 정보를 잃지 않고 서버에 보관할 수 있다. 대표적으로는 로그인창에 사용된다. 세션은 웹 브라우저 하나당 한 개씩 존재하기에 1번 웹 브라우저에서 로그인을 해도 다른 웹 브라우저를 키면 로그인 정보가 저장되지 않는 것을 볼 수 있다.

세션 값 설정 및 불러오기

세션 값 저장하기

session.setAttribute(String, Object value)

<body>
<%
session.setAttribute("id", "lee");
session.setAttribute("pwd", "123");
session.setAttribute("age", "11");
%>
</body>

세션 값 불러오기

<body>
<%
String id = (String) session.getAttribute("id");
String pwd = (String) session.getAttribute("pwd");
Integer age = (Integer) session.getAttribute("age");
%>
id : <%= id %> <br>
pwd : <%= pwd %> <br>
age : <%= age %> <br> 
</body>

세션의 모든 값 불러오기

<%@page import="java.util.Enumeration"%>
...

<body>
	<h3>세션에 설정된 모든 값 얻어오기</h3>
	<%
		Enumeration<String> names = session.getAttributeNames();
		while (names.hasMoreElements()) {
			String name = names.nextElement().toString();
			String value = session.getAttribute(name).toString();
			out.println(name + " : " + value + "<br>");
		}
	%>
</body>

저장할 때 알 수 있듯이 저장 값은 Object이기에 어떠한 자료 형태라도 저장이 가능하다.

jsp는 세션이 내장 객체이므로 따로 객체를 불러오지 않지만
서블릿에서 사용하고자 하면 HttpSession session = request.getSession(); 을 통해 세션 객체를 얻어와야지 사용 가능하다.

세션 시간 및 여러 메서드 정보

세션의 getId()는 세션의 고유 id를 알 수 잇다

getCreationTime()메서드를 사용하면 세션이 만들어진 시간을 알려준다.

getLastAccessedTime() 메서드는 새로운 웹 페이지를 띄우지 않고 원래의 웹 브라이저에서 다른 페이지로만 이동했다가 돌아올 경우 떠날 당시의 시간을 long타입으로 반환해준다.

isNew()메서드는 처음 만들어진 세션이면 true, 그게 아니라면 false값이 나온다. 예를 들어 처음 브라우저를 키면 true고 다른 페이지에 갔다가 다시 돌아오면 false가 된다.

getMaxInactiveInterval()메서드는 세션의 유효기간을 얻는다. 기본 적으로는 사용자의 마지막 요청(request)로부터 30분으로 설정되어 있다.

시간을 변경하고자 한다면 setMaxInactiveInterval()메서드를 사용하면 된다.

여러 메서드 사용 방법.

<body>
	<h3>세션 정보를 얻어오는 메소드를 사용하기</h3>
	<%
		String id_str = session.getId();
		long lasttime = session.getLastAccessedTime();
		long createdtime = session.getCreationTime();
		long time_used = (lasttime - createdtime) / 60000;
		int inactive = session.getMaxInactiveInterval() / 60;
		boolean b_new = session.isNew();
	%>
	[1] 세션 ID[
	<%=session.getId()%>] 입니다.
	<br>
	<hr>
	[2] 당신이 웹 사이트에 머문 시간은
	<%=time_used%>
	분입니다.
	<br>
	<hr>
	[3] 세션의 유효 시간은
	<%=inactive%>
	분입니다.
	<br>
	<hr>
	[4] 세션이 새로 만들어졌나요?
	<br>
	<%
		if (b_new)
			out.print(" 예! 새로운 세션을 만들었습니다.");
		else
			out.print(" 아니오! 새로운 세션을 만들지 않았습니다.");
	%>
</body>

시간을 기반으로 로그인하고 몇 분 후에 자동 로그아웃 기능등을 만들 수 있다. 혹은 개인이 공공장소에서 실수로 컴퓨터를 끄지 않고 갔다면 세션으로 자동 로그아웃을 만들어주지 않는다면 계속 로그인되어 있겠지만 자동 로그아웃을 만들어준다면 30분 후 자동 로그아웃을 해줘서 보안성에서도 좋은 효과를 얻을 수 있다.

세션 제거하기.

로그아웃 이후에는 세션을 삭제해줘야 로그인 전용 페이지에 접근을 막을 수 있다.

특정 세션 삭제

session.removeAttribute("삭제 세션");

모든 세션 삭제

session.invalidate();

isRequestedSessionIdValid = true or false.
세션 id가 유효하면 true를 , 그게 아니면 false를 반환. 세션이 삭제 잘 됐는지 확인할 때 사용.

출처 : 국비 교육

profile
프로그래밍 공부 중!

0개의 댓글