본문 바로가기

교재 실습262

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.
40. 서블릿에서 뷰 분리하기 (1) 본격적으로 MVC 아키텍처를 경험하기 위한 첫 작업으로 기존 서블릿으로부터 뷰(View) 역할을 분리한다. 클라이언트로부터 요청이 들어오면 서블릿은 데이터를 준비(모델 역할)하여 JSP에 전달(컨트롤러 역할)한다. JSP는 서블릿이 준비한 데이터를 가지고 웹 브라우저로 출력할 화면을 만든다(그림 1). 1. 값 객체(VO) = 데이터 수송 객체(DTO) 데이터베이스에서 가져온 정보를 JSP페이지에 전달하려면 그 정보를 담은 객체가 필요한데, 이렇게 값을 담는 용도로 사용하는 객치를 '값 객체(value object)'라고 부른다. 값 객체는 계층 간 또는 객체 간에 데이터를 전달하는데 이용하여 '데이터 수송 객체(data transfer object)'라고도 부른다. 또한, 값 객체는 업무영역(busin.. 2022. 6. 9.
39. JSP의 주요 구성 요소 (3) - JSP 내장 객체 JSP 페이지에서 스크립트릿 이나 표현식 을 작성할 때 별도의 선언 없이 사용하는 자바 객체가 있다. 이런 객체를 JSP 내장 객체(Implicit Objects)라 한다. Calculator.jsp에 작성된 스크립트릿 태그의 일부 내용이다. request 객체가 바로 내장 객체에 해당한다. JSP 기술 사양서에는 스크립트릿이나 표현식에서 JSP 내장 객체의 사용을 보장한다고 되어 있으므로 객체를 선언하지 않고 바로 사용할 수 있다. 이것이 가능한 이유를 JSP 엔진이 만든 서블릿 파일의 _jspService()에 선언된 변수들을 확인한다. C:\javaide\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Ca.. 2022. 2. 5.
38. JSP의 주요 구성 요소 (2) - JSP 전용 태그 : 지시자 는 JSP 전용 태그로 '지시자(Directives)나 '속성'에 따라 특별한 자바 코드를 생성한다. JSP 지시자에는 page, taglib, include가 있다. page 지시자는 JSP 페이지와 관련된 속성을 정의할 때 사용하는 태그다. 2022. 2. 4.