전체 글439 48. 데이터 보관소 (4) 3. HttpSession의 활용 - 로그인 정보 사용 LogInServlet 클래스에서 HttpSession 보관소에 저장한 Member 객체를 Header.jsp에서 꺼내 본다. 로그인 정보 사용 시나리오는 다음과 같다(그림 1). ① 로그인 성공일 때, 서버로부터 리다이렉트 응답을 받는다. 즉시 웹 브라우저는 톰캣 서버에 리다이렉트 URL(/member/list)을 요청한다. ② MemberListServlet 클래스는 데이터베이스에서 회원 목록을 가져온 후, MemberList.jsp에게 화면 출력 작업을 위임한다. ③ MemberList.jsp는 화면 상단의 내용을 출력하기 위해 Header.jsp를 인클루딩 한다. ④ Header.jsp는 HttpSession 객체에 보관된 로그인 회원의 정보.. 2022. 6. 19. 47. 데이터 보관소 (3) 2. HttpSession의 활용 - 로그인 HttpSession 객체는 클라이언트 당 한개가 생성된다. 웹 브라우저로부터 요청이 들어오면, 그 웹 브라우저를 위한 HttpSession 객체가 있는지 검사하고, 없다면 새로 HttpSession 객체를 만든다. 이렇게 생성된 HttpSession 객체는 그 웹 브라우저로부터 일정 시간 동안 Timeout 요청이 없으면, 삭제된다. 따라서 로그인되어 있는 동안 지속적으로 사용할 데이터를 HttpSession 객체에 저장한다. HttpSession 객체를 활용하는 상황을 실습한다. 다음 그림은 로그인을 수행하는 시나리오다(그림 1). ① 웹 브라우저에서 '/auth/login' 서블릿을 요청한다. ② LogInServlet 클래스는 LogInForm.jsp로.. 2022. 6. 18. 46. 데이터 보관소 (2) - 서블릿 배치와 태그 AppInitServlet 클래스의 배치 정보를 작성한다. DD파일(web.xml)에 다음과 같이 AppInitServlet 클래스의 배치 정보를 추가한다. AppInitServlet spms.servlets.AppInitServlet 1 컨텍스트 매개변수 태그 아래에 서블릿을 선언하는 태그를 추가했다. 여기서 주목할 사항은 태그이다. 1 서블릿 객체는 클라이언트의 최초 요청시 생성된다. 클라이언트가 단 한 번도 요청하지 않으면 그 서블릿은 생성되지 않는다. 그러나 AppInitServlet 클래스처럼 다른 서블릿이 생성되기 전에 미리 준비 작업을 해야 하는 서블릿이라면, 클라이언트 요청이 없더라도 생성되어야 한다. 태그는 바로 그런 용도의 서블릿을 배치할 때 사용한다. 서블릿을 .. 2022. 6. 16. 45. 데이터 보관소 (1) 서블릿들이 서로 협력하여 작업을 수행할 때, 데이터를 공유하는 방법을 알아본다. 서블릿 기술은 데이터를 공유하기 위한 방안으로 4가지 종류의 데이터 보관소를 제공한다. 각각의 데이터 보관소는 공유 범위를 기준으로 구분된다(그림 1). ① ServletContext 보관소는 웹 애플리케이션이 시작될 때 생성되어 웹 애플리케이션이 종료될 때까지 유지된다. 이 보관소에 데이터를 보관하면 웹 애플리케이션이 실행되는 동안에는 모든 서블릿이 사용할 수 있다. JSP에서는 application 변수를 통해 이 보관소를 참조할 수 있다. ② HttpSession 보관소는 클라이언트의 최초 요청 시 생성되어 브라우저를 닫을 때까지 유지된다. 보통 로그인할 때 이 보관소를 초기화하고, 로그아웃하면 이 보관소에 저장된 값들.. 2022. 6. 15. 44. 포워딩과 인클루딩 (2) 2. 포워딩 현재 MemberListServlet 클래스의 소스를 보면, 데이터베이스와 연동하여 작업하다가 문제가 발생했을 때, ServletException 객체를 던지게 되어 있다. } catch (Exception e) { throw new ServletException(e); } 톰캣 서버가 서블릿을 호출하는 것이기 때문에, 서블릿이 던진 ServletException 객체는 톰캣 서버가 받는다. - 예외 발생 테스트 서블릿에서 예외가 발생했을 때 톰캣 서버가 어떻게 처리하는지 확인하기 위해 임의적으로 예외를 발생시켜 본다. 먼저 MySQL 데이터베이스를 정지시킨다(그림 1). 이후 웹 브라우저에서 http://localhost:9999/web05/member/list의 실행을 요청한다. 그러면 .. 2022. 6. 14. 43. 포워딩과 인클루딩 (1) 서블릿끼리 작업을 위임하는 방법에는 포워딩(Forwarding)과 인클루딩(Including)이 있다. 포워드 방식은 작업을 한 번 위임하면 다시 이전 서블릿으로 제어권이 돌아오지 않는다(그림 1). ① 웹 브라우저가 '서블릿A'를 요청하면, '서블릿A'는 작업을 수행한다. ② '서블릿A'에서 '서블릿B'로 실행을 위임한다. ③ '서블릿B'는 작업을 수행하고 나서 응답을 완료한다. '서블릿A'로 제어권이 돌아가지 않는다. 인클루드 방식은 다른 서블릿으로 작업을 위임한 후, 그 서블릿의 실행이 끝나면 다시 이전 서블릿으로 제어권이 넘어온다(그림 2). ① 웹 브라우저가 '서블릿A'를 요청하면, '서블릿A'는 작업을 수행한다. ② '서블릿A'에서 '서블릿B'로 실행을 위임한다. ③ '서블릿B'는 작업을 수행.. 2022. 6. 13. 42. 서블릿에서 뷰 분리하기 (3) 5. 뷰 컴포넌트 만들기 MemberListServlet 클래스로부터 받은 회원 목록 데이터를 가지고 화면을 생성하는 JSP를 web05 프로젝트에서 webapp폴더 아래에 member 폴더를 만들고 MemberList.jsp를 생성한다. 회원목록 신규 회원 , , , [삭제] page 지시자의 import 속성은 JSP 엔진이 서블릿 소스 MemberList_jsp.java를 생성할 때 다음과 같이 import 코드를 만든다. C:\javaide\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\web05\org\apache\jsp\member/MemberList_jsp.java import spms.. 2022. 6. 12. 41. 서블릿에서 뷰 분리하기 (2) 4. 서블릿에서 뷰 관련 코드 제거 web04 프로젝트의 src/main/java의 spms.servlets 패키지에서 MemberListServlet.java 파일을 복사하여 web05 프로젝트의 src/main/java에 spms.servlets 패키지를 만들어 복사한다. 이후 다음과 같이 MemberListServlet 클래스를 수정한다. package spms.servlets; import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.Statement; import java... 2022. 6. 11. 늦은 2021 회고록, 프로젝트 회고록 2021년은 첫 개발자로 전직을 하게 된 시작의 해다. - 국비학원에서 개발자로 2021년 1월, 진로에 대한 고민과 함께 취업을 준비하던 시기였다. 모든 일의 근본이 영업이라고 생각하며 취업 준비를 했지만 스펙이 없는 문과출신이었기에 걱정이 컸다. 하지만 가민히 있을 수는 없었기에 면접이라도 열심히 준비했다. 그러면서 개발자인 친구의 조언을 얻어 개발자의 직업에 대해 생각하며 국비학원에 상담 신청도 하였다. 그 때 면접 준비한 것과 또 운이 좋았는지 중소기업 영업직에 합격 통보를 받게 되어 선택의 갈림길에 놓이게 되었다. 영업직으로 들어간다 해도 자신이 없었고 미래에 대해 불확실 했기 때문에 과감하게 국비지원 학원을 들어가기로 마음먹었고, 2021년 1월 21일 시작하여 2021년 7월 2일까지 학원 .. 2022. 6. 9. 이전 1 ··· 40 41 42 43 44 45 46 ··· 49 다음