Servlet/JSP 복습하기

bitna's study note·2022년 6월 17일

Servlet/JSP

목록 보기
12/21

6월 18일 복습하기

1.세션 트랙킹
HTTP프로토콜은 서버-클라이언트 통신시 stateless 방식으로 통신
브라우져에서 새웹페이지를 열면 기존의 웹 페이지나 서블릿에 관한 어떤 연결 정보도 알수 없음.
따라서 '세션 트랙킹'을 이용해서 웹페이지 간의 연결 기능을 구현함.

(1)태그와 URL ReWriting
태그는 보이지 않지만 값을 저장하고 있어 다음페이지로 넘겨줌.
URL ReWriting은 URL을 연결로 이전페이지 값을 넘겨줌
위에 두가지 방법은 Get방식으로 전송해서

(2)쿠키 와 세션

2.쿠키
웹 페이지들 사이의 공유 정보를 클라이언트 pc에 저장해 놓고 필요할때 마다 사용함.

쿠키의 특징
(1)정보를 클라이언트 pc에 저장
(2)저장용량(4kb)로 제한됨
(3)보안이 취약
(4)클라이언트 브라우져에서 사용유/무 결정
(5)도메인당 쿠키가 만들어짐

3.쿠키원리
(1)브라우져로 접속
(2)서버는 정보를 저장하는 쿠키를 생성한다.
(3)생성된 쿠키를 브라우저로 전송한다.
(4)브라우저는 서버로 부터 받은 쿠키정보를 쿠키파일에 저장한다.
(5)브라우저에 다시접속했을때 쿠키유/무를 파악하고 있다면 정보를 요청한다.
(6)브라우저는 저장된 쿠키정보를 서버에 넘겨준다.

*쿠키 설정하기!!!

package study_0618;

@WebServlet("/setCookie")
public class setCookie extends HttpServlet {

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8"); //클라이언트에 전송할 데이터 종류(MIME-TYPE)를 지정함.
		PrintWriter out =response.getWriter(); //출력 객체생성
		Date d= new Date(); //현재시간 객체생성
		Cookie c =new Cookie("CookieTest", URLEncoder.encode("JSP프로그래밍 입니다.","utf-8")); //쿠키객체생성
		c.setMaxAge(24*60*60); //유효기간설정
		response.addCookie(c); //생성된 쿠키를 브라우져에 전송
		out.println("현재시간" +d+"<br>");
		out.println("문자열을 Cookie에 저장 합니다."+"<br>");
	}
}

*쿠키 가져오기!!!

@WebServlet("/getCookie")
public class getCookie extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8"); //클라이언트에 전송할 데이터 종류(MIME-TYPE)를 지정함.
		PrintWriter out =response.getWriter(); 
		Cookie[] allValues=request.getCookies(); //요청해서 가져온 쿠키를 allValues 배열에 넣음
		for(int i=0;i<allValues.length;i++) {
			if(allValues[i].getName().equals("CookieTest")); //배열에 저장한 쿠키를 이름을 꺼내와서 CookieTest와 이름이 같으면
			out.print("쿠키값 가져오기:"+URLDecoder.decode( //URLDecoder:암호화된 URLencoding을 텍스트화
					allValues[i].getValue(),"utf-8")); //배열에 있는 쿠키의 값을 읽어가지고 와라
		}	
	}
}

4.세션
웹페이지들 사이의 공유 정보를 서버의 메모리에 저장해 놓고 사용하는 방법
세션의 특징
(1)정보가 서버의 메모리에 저장됨
(2)브라우저 세션 연동은 세션 쿠키(브라우저가 사용하는 메모리에 저장하는 Session쿠키)를 이용함
(3)쿠키보다 보안에 유리
(4)서버에부하를 줄수 있음
(5)브라우져(사용자)당 한개의 세션이 생성됨
(6)세션은 유효시간을 가짐
(7)서버에 무리를 주므로 자주사용하는 정보 (예, 로그인상태유지 및 장바구니)에 사용하는게 적절하다.

5.세션의 실행원리
(1)서버는 접속한 브라우져에 대한 세션 객체를 생성한다.
(2)서버는 생성된 세션 id를 클라이언트 브라우저에 응답한다.
(3)응답 받은 브라우저는 서버로부터 받은 세션id를 브라우저가 사용하는 메모리의 세션쿠키에 저장한다.
(4)브라우져가 재접속하면 세션쿠키에 저장된 세션id를 서버에 전달한다. (5)서버는 브라우져로부터 받은 세션id를 세션에 접근하여 작업을 수행.
*각 브라우저(사용자)당 하나의 세션이 생성됨!!!매우중요!!!
6.세션은 HttpSession클래스 객체를 생성해서 사용함

package study_0618;

@WebServlet("/SessionTest")
public class SessionTest extends HttpServlet {
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setContentType("text/html;charset=utf-8");
		PrintWriter out =response.getWriter();
		HttpSession session=request.getSession(); //세션객체 생성
		
		out.print("세션아이디: "+session.getId()+"<br>");
		out.print("최초 세션 생성시각: "+new Date(session.getCreationTime())+"<br>");//Date객체 생성과 동시에 매개변수로 session메서드 넣음
		out.print("최근 세션 접근시각: "+new Date(session.getLastAccessedTime())+"<br>"); //Date객체 생성과 동시에 매개변수로 session메서드 넣음
		out.print("세션 유효시간: "+(session.getMaxInactiveInterval())/60+"분<br>"); //세션유효시간을 따로 지정 안했으면 기본 30분으로 설정
		
		if(session.isNew()) {
			out.print("새 세션이 만들어 졌습니다.");//최초생성된 세션인지 판별하는데 사용
		}
		
	}

}
  1. 세션을 이용해서 로그인 정보 바인딩하기 바인딩이란? 서블릿에서 다른 서블릿 또는 jsp로 대량의 데이터를 공유하거나 전달 하고 싶을때 묶어서 정보를 보낸는 기능을 의미함.
    사용자와 관련된 정보를 바인딩해서 사용할 때는 세션을 이용하는 것이 편리하다.
    세션은 사용자당 한개씩 생성되기 때문 ```
    package study_0618;

@WebServlet("/SessionTest01")
public class SessionTest01 extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
	doHandle(request,response);
}


private void doHandle(HttpServletRequest request, HttpServletResponse response) throws IOException {
	request.setCharacterEncoding("utf-8"); 
	response.setContentType("text/html;charset=utf-8");
	PrintWriter out = response.getWriter();
	HttpSession session=request.getSession(); //세션객체 생성
	String id=request.getParameter("id"); // 로그인페이지 아이디 가져와서 변수에 저장
	String pw=request.getParameter("pw"); // 로그인페이지 비번을 가져와서 변수에 저장
	
	if(session.isNew()) { //세션이 새로 생성이 되었다면
		if(id!=null) { //id가 null이 아닐때,
			session.setAttribute("id",id); //id를 세션에 정보를 설정해줌
			session.setAttribute("pw",pw); //id를 세션에 정보를 설정해줌
		}else { //null 이라면
			out.print("다시로그인 하세요");
			session.invalidate(); //현재 생성한 세션을 소멸시킴
		}
	}else { //세션이 새로 생성된게 아니라면
		id=(String)session.getAttribute("id"); //기존에 있던 세션 정보(id)를 가져와죠
		pw=(String)session.getAttribute("pw"); //기존에 있던 세션 정보(pw)를 가져와죠
		
		if(id!=null && id.length()!=0) { //id가 null이 아니거나,id의 길이가0이 아니라면
			out.print(id+"님 반갑습니다.");
			out.print("비번은"+pw+"입니다.");
			
		}else {
			out.print("다시로그인 하세요");
			session.invalidate(); //현재 생성한 세션을 소멸시킴
		}
	}
                                            
profile
좋은개발자가 되기위한 삽질기록 노트

0개의 댓글