요르딩딩

Servlet&JSP 프로그래밍 (26강 ~ 35강) 본문

[강의]/[서블릿 JSP 강의] (뉴렉처)

Servlet&JSP 프로그래밍 (26강 ~ 35강)

요르딩딩 2024. 8. 9. 13:45
728x90
반응형
[26. Application 객체와 그것을 사용한 상태 값 저장]

# 웹서버 -> 서블릿 context
# 서블릿 = 문맥 
# form태그에 endpoint가 동작한다.
# 서블릿은 호출하고 사용되면, 다시 메모리로 돌아간다.
# 1개의 화면에서 1개의 입력창에 숫자들을 반복적으로 입력하여 계산을 하는 경우,
   매번 입력된 수를 기억하고 있어야한다. 이럴때 서블릿을 사용한다.
   ServletContext application = request.getServletContext();
   application.setAttribute("key", value); 를 통해 저장소에 값을 저장하여 유지할 수 있다.
   application.getAttribute("key");를 통해 저장소의 값을 불러온다.
ServletContext application = request.getServletContext();

...

int x = (Integer)application.getAttribute("value"); // 중요!! 앞서저장된 저장소를 활용하여 값을 불러온다.
int y = v;
String operator = (String)applicatoin.getAttribute("op");

...

application.setAttribute("value", v); // 중요!! 저장소에 값이 담긴다.
application.setAttribute("op", op);


[27. Session 객체로 상태값 저장하기 (그리고 Application 객체와의 차이점)]

# application 객체대신 session로 대체
# application 객체는 application 범주내에서 사용가능
# session 객체는 session 범중내에서 사용가능 (현재 접속한 사용자를 위한것)
  브라우저가 다르면, 세션이 다르게 됩니다. (크롬, 파이어폭스 등등)
  브라우저가 같으면, 세션이 같게 됩니다. (크롬, 크롬) -> 스레드 개념으로 나눠같은 구조입니다.
ServletContext application = request.getServletContext();
HttpSession session = request.getSession();

...

// int x = (Integer)application.getAttribute("value"); 
   int x = (Integer)session.getAttribute("value");

...

int y = v;
// String operator = (String)applicatoin.getAttribute("op");
   String operator = (String)session.getAttribute("op");

...

// application.setAttribute("value", v);
// application.setAttribute("op", op);
   session.setAttribute("value", v); // 중요!! 저장소에 값이 담긴다.
   session.setAttribute("op", op);​
[28. 웹서버가 현재 사용자 (session)을 구분하는 방법]

# WAS (application 공간, 사용자마다 session공간, servlet 공간)
# 사용자 요청 Add(SID없음) > Servlet(Add) > application > Servlet >  사용자 (SID: 107) : Session에 107 생성
   다음요청시 : 사용자 요청 Add(SID: 107) > Servlet(Add) > application/ Session > Servlet >  사용자 (SID: 107) 
# 다른 브라우저를 열때마다 : 사용자 요청 Add(SID없음) 이다.
# 세션값 확인 : 개발자도구 > 네트워크 >  Cookie = JSESSIONID=B71~
# 마이크로 소프트는 세션정보가 매번 바뀌고, 다른곳들은 저마다의 방식으로 관리한다.

# 세션 메소드
   1. void setAttribute(String name, Object value) : 지정된 이름으로 객체를 설정
   2. Object getAttribute(String name) : 지정한 이름의 객체를 반환.
   3. void invalidate() : 세션에서 사용되는 객체들을 바로 해제
   4. void setMaxInactiveInterval(int interval) : 세션 타임아웃을 정수(초)로 설정 (기본 : 30 min)
      (타임아웃은 톰캣 등 was설정에서 확인 가능)  
   등등
[29. cookie를 이용해 상태값 유지하기]

# 예시) session 캐비넷, cookie는 가지고 다니는 물건
 - 서버쪽 저장소 : application, session
 - 사용자쪽 저장소 : cookie

# 헤더설정(cookie) -> request.getHeader(),  request.getCookie(); ---> 쿠키심기 :response.addCookie()
# 데이터설정 -> getParameter()

# 쿠키는 문자형만 저장이 가능합니다.

// 쿠키 저장하기
Cookie cookie = new Cookie("c", String.valueOf(result));
response.addCookie(cookie);

// 쿠키 읽기
Cookie[] cookies = request.getCookies();
String _c = "";

if(cookie != null){
	for(Cookie cookie : cookies)
    	if("c".equals(cookie.getName()))
        	_c = cookie.getValue();


[30. Cookie의 Path 옵션]

# 쿠키를 특정 서블릿에게서만 가져오도록 적용할 수 있다.
   (특정 url 호출시에만 쿠키가 동작하도록 설정 가능)

# cookie.setPath("/notice"); // 특정 url 호출시에만 쿠키가 동작하도록 설정 가능

...

[35. 처음이자 마지막으로 동적인 페이지 서블릿으로 직접 만들기]

# 아래처럼 하는 이유는 기존 html은 동적인 데이터 적용이 불가능 했으나
   서블릿에는 동적인 데이터값을 사용할 수 있기 떄문이다.

# 번거로움을 경험해보라
   - 각 줄에 out.writer(""); 작성
   - 쌍따옴표 앞에 역슬레시 적용 /" 
@WebServlet
...
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();

// html태그를 java단에 작성 
out.write("<!DOCTYPE html>");
out.write("<html>");
out.write("<head>");
out.write("<meta charset=\"UTF-8\">");  //따옴표 적용시 역슬레시 추가
...​


728x90
반응형
Comments