본문 바로가기

전체 글434

35. 뷰 컴포넌트와 JSP (1) MVC 아키텍처에서 뷰 컴포넌트를 만들 때 보통 JSP를 사용한다. 뷰 컴포넌트의 역할은 웹 브라우저가 출력할 화면을 만드는 일이다. JSP가 어떤 기술이기에 뷰 컴포넌트를 만들 때 사용하는지 알아본다. 이전 예제에서는 웹 브라우저에 보낼 화면을 만들고자 출력 메서드를 호출하였다. @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html; charset=UTF-8"); PrintWriter out = response.getWriter(); out.println(""); ou.. 2022. 2. 1.
34. MVC 이해하기 실무에서 다년간 다양한 업무 시스템에 적용되고 검증되어 좋다고 증명된 방법을 최선의 관행(best practice)이라고 한다. 실무 웹 애플리케이션 개발에 있어 최선의 관행으로 알려진 'MVC 아키텍처(Architecture)'에 대해 알아보며, 서블릿의 단점을 보완하기 위해 등장한 JSP(JavaServer Page)라는 기술도 함께 배운다. 먼저 MVC 아키텍처의 구성요소인 모델(model), 뷰(view), 컨트롤러(controller)의 역할과 구동원리를 알아본다. 이전까지의 예제에서는 클라이언트의 요청 처리를 서블릿 홀로 담당하는 올인원(All-in-one)방식이었다(그림 1). 글로벌 환경에서의 기업들은 더 짧은 주기로 제품이나 서비스를 제공하는데, 이를 위해서는 조직이나 업무 프로세스가 자.. 2022. 1. 31.
33. 필터 사용하기 (2) Filter 인터페이스에 선언된 세 개의 메서드인 init(), doFilter(), destroy()는 필터의 생명주기와 관련된 메서드다. 이 메서드들이 언제 호출되는지 순서를 살펴본다. 서블릿 컨테이너는 웹 애플리케이션을 시작할 때 배치기술서(web.xml)에 등록된 필터의 인스턴스를 생성하며 필터에 대해 준비작업을 하도록 init()를 한 번 호출한다. 클라이언트의 요청이 들어오면 그 요청에 해당하는 필터의 doFilter()를 호출하고, doFilter()에서는 필터로서 해야 할 작업을 실행한 뒤 다음 필터의 doFilter()를 호출한다. 마지막 필터까지 이 과정을 반복한다. 마지막 필터는 내부적으로 서블릿의 service()를 호출한다. 서블릿의 service() 호출이 끝나면 service(.. 2022. 1. 30.
32. 필터 사용하기 (1) 필터는 서블릿 실행 전후에 어떤 작업을 하고자 할 때 사용하는 기술이다. 예를 들면 클라이언트가 보낸 데이터의 암호를 해제하거나, 서블릿이 실행되기 전 필요한 자원을 미리 준비하거나, 서블릿이 실행될 때마다 로그를 남기는 등의 작업을 필터를 통해 처리할 수 있다. 만약 이런 작업들을 서블릿에 담는다면 서블릿마다 해당 코드를 삽입해야 하고, 필요가 없어지면 그 코드를 삽입한 서블릿을 모두 찾아서 제거해야 하므로 관리하기가 매우 번거로울 것이다. 필터에서 POST 요청으로 넘어온 매개변수의 문자 집합을 설정하는 것을 알아본다. POST 요청인 경우 서버로 보내는 데이터는 메시지 바디에 있는데 서블릿에서 이 데이터를 꺼내려면 getParameter()를 호출한다. 만약 메시지 바디에 한글과 같은 멀티바이트 문.. 2022. 1. 29.
31. 컨텍스트 초기화 매개변수 서블릿 초기화 매개변수는 그 매개변수가 선언된 서블릿에서만 사용될 수 있고 다른 서블릿은 참조할 수 없다. 따라서 JDBC 드라이버와 데이터베이스 연결 정보에 대한 초기화 매개변수를 각 서블릿마다 별도로 설정해야 해서 매우 번거롭고 낭비적이다. 이런 경우 컨텍스트 초기화 매개변수(같은 웹 애플리케이션에 소속된 서블릿들이 공유하는 매개변수)를 사용한다. web.xml에 컨텍스트 초기화 매개변수를 선언한다. web04 driver com.mysql.jdbc.Driver url jdbc:mysql://localhost/studydb username study password study ... MemberUpdateServlet 클래스의 doGet()에서 서블릿 초기화 매개변수를 사용하는 코드를 컨텍스트 초기화.. 2022. 1. 28.
30. 서블릿 초기화 매개변수 (2) @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { ... //회원 상세 정보 출력 stmt = conn.createStatement(); rs = stmt.executeQuery( "SELECT MNO,EMAIL,MNAME,CRE_DATE FROM MEMBERS" + " WHERE MNO=" + request.getParameter("no")); rs.next(); response.setContentType("text/html; charset=UTF-8"); PrintWriter out = response.getWri.. 2022. 1. 26.
29. 서블릿 초기화 매개변수 (1) 서블릿 초기화 매개변수란 서블릿을 생성하고 초기화할 때, 즉 init()를 호출할 때 서블릿 컨테이너가 전달하는 데이터다. 보통 데이터베이스 연결 정보와 같은 정적인 데이터를 서블릿에 전달할 때 사용한다. 서블릿 초기화 매개변수는 DD파일(web.xml)의 서블릿 배치 정보에 설정할 수 있고, 어노테이션을 사용하여 서블릿 소스 코드에 설정할 수 있다. 가능한 소스 코드에서 분리해 외부 파일에 두는 것을 추천하는데 이는 외부 파일에 두면 변경하기 쉽기 때문이다. 실무에서도 데이터베이스 정보와 같은 시스템 환경과 관련된 정보는 외부 파일에 두어 관리한다. 회원 상세 정보를 조회하고 값을 변경하는 서블릿을 작성하고, 서블릿 초기화 매개변수를 이용하여 소스 코드에 있던 데이터베이스 연결 정보를 web.xml 파.. 2022. 1. 25.
28. 리다이렉트 회원정보를 등록 후 그 결과를 출력하지 않고 즉시 회원 목록 화면으로 이동하게 하는 방법을 리다이렉트(Redirect)라고 한다. 리다이렉트 정보는 응답 헤더에 설정한다. @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ... //SQL문 서버에 보냄 stmt.executeUpdate(); /* 리다이렉트는 HTML을 출력하지 않음. 즉, 웹 브라우저로 본문을 보내지 않음. response.setContentType("text/html; charset=UTF-8"); PrintWriter out = response.getWr.. 2022. 1. 24.
27. 리프래시 일정 시간이 지나고 나서 자동으로 서버에 요청을 보내는 '리프래시(Refresh)' 즉, 새로고침을 알아본다. MemberAddServlet 클래스에서 회원 등록 결과를 웹 브라우저로 보낼 때 리프래시 정보를 함께 보내는 원리이다. - 응답 헤더를 이용한 리프래시 응답 헤더를 이용하여 리프래시 정보를 보낸다. MemberAddServlet 클래스의 doPost()에서 응답 헤더에 리프래시 정보를 추가한다. @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ... response.setContentType("text/html; .. 2022. 1. 23.