교재 실습283 49. 데이터 보관소 (5) 5. ServletRequest의 활용 ServletRequest 객체에 데이터를 보관하면 포워딩이나 인클루딩을 통해 협업하는 서블릿(JSP 포함)끼리 데이터를 공유할 수 있다. 그 이유는 request와 response를 같이 사용하기 때문이다. //LogInServlet 클래스의 doGet() 메서드 @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //로그인 페이지로 포워딩 RequestDispatcher rd = request.getRequestDispatcher("/auth/LogInForm.jsp"); rd.forwa.. 2022. 6. 20. 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. 이전 1 ··· 24 25 26 27 28 29 30 ··· 32 다음