back-end/JSP&Servlet

(Servlet)MVC1패턴

doheun 2023. 3. 21. 17:47
반응형

Servlet

디자인 패턴

MVC1

Model-View-Controller

Model

  • 애플리케이션의 비즈니스 로직과 데이터를 처리하는 부분
  • 데이터베이스(저장,검색,변경,삭제), 파일, 외부API 처리
  • Controller나 뷰에서 요청받아 처리한 후 결과 반환
  • 독립적 개발, 여러 컨트롤러나 뷰에서 재사용

View

  • 사용자에 데이터 표시하는 역할
  • 데이터 검색,표시에 대한 형식 지정
  • 컨트롤러에 의존

Controller

  • 모델과 뷰 사이의 중개자 역할
  • 사용자로부터 입력을 받고 응용프로그램의 적절한 부분으로 안내
  • 요청처리, 데이터 쿼리문, 모델의 상태 수정과 같은 작업 결정
  • 작업결정 후 모델에 대한 모든 변경 사항을 반영하도록 뷰 업데이트

사용 개념

  1. Scope
    객체전달범위, 공통메서드
  • page : 현재 페이지에서 객체를 전달(현재페이지에서 객체 유지)
  • request : 현재 페이지에서 요청한 다음 페이지까지만 객체를 전달(현재페이지에서 요청한 다음페이지까지 객체유지)
  • session : 상태유지, 한 사람이 한 브라우저를 이용해 한 context를 돌아 다닐 떄 자기 session에 있는 모든 객체를 사용할 수 있다(여러페이지에서 객체 유지)
    • invalidate() : 사용자 세션을 종료하는데 사용되는 메서드
    • getSession() : 사용자 세션의 고유 식별자를 검색하는데 사용되는 메서드
  • application : 한 context내에서 모든 객체를 누구나 공유 가능, webXML에서도 사용가능(여러페이지에서 객체 유지)

  • out : 웹 브라우져에 데이터를 전송하는 출력 스트림
    out기본 객체의 출력 메서드
    println() : 데이터를 출력한다.
    print() : 데이터를 출력하고, \r, \n을 출력한다.
    newLine() : \r, \n을 출력한다.   
  • config : 해당 JSP의 환경(설정)정보
  • exception : 예외처리용
  • page : 한페이지(자신이 속한 페이지)만 쓸 수 있다

전체 흐름

  1. DB 설계
  2. 화면설계
  3. 구현
    1. DB생성
    2. 프로젝트 템플릿(전체적인 페이지의 화면구성)
    3. DTO(테이블의 컬럼들에 대한 멤버필드,생성자(오버로딩)
    4. DAO(DB 쿼리문과 관련된 수정,삭제,조회,입력) 기능 생성
코드

기타참고

  1. 용어
  • request : 클라이언트의 요청
  • response : 클라이언트의 요청에 대한 응답
  • parsing : 엔진과 자바 사이의 용어 해석
  • synch : 요청 후 응답이 올때까지 browser는 대기 (화면 전체 로딩)
  • asynch : 요청 후 응답이 올때까지 browser는 다른 일함
  • stateless : 응답 완료 후 연결 해제 (HTTP)
  • statefull : 응답 완료 후 연결 유지(DB)
  • get : 모든 주소정보 노출, header를 통해 전달
  • post : 내부변수로 존재 ,노출되지 않음, body를 통해 전달
  1. jsp구성요소

흐름제어

  • forward
  • response.sendRedirect

커스텀태그 : JSP를 확장시켜주는 기능

  • EL(expression language)
  • JSTL(JSP Standard Tag Library) : 커스텀태그 표준화

액션 태그
⁠ (1) useBean : dao와 같은 역할, java bean
⁠ -스코프 객체 생성, 사용
⁠ - request.getParameter(“age”)제거
⁠ - Integer.parseInt(request.getParameter(“age”))파싱 제거
⁠ (2) setProperty : useBean에서 데이터를 저장할 때 사용
⁠ (3) getProperty : useBean에서 데이터를 가져올 때 사용
⁠ (4) include -> 특정한 페이지를 현재 위치에 포함시킬 때 사용(모듈화)
⁠ (5) forward -> 다른 페이지로 이동할때 사용(흐름제어: 제어권이 이동된 페이지로 넘어간다)
⁠ (6) param -> 모듈화, 흐름제어에서 파라메터 보내기

  1. form태그
    form 태그 내부의 값들은 input이나 button으로 처리하며 전달 형태는 input의 key(name) : value(value)형태
    button은 onclick형태로 자바스크립트에서 따로 함수를 지정해 location.href="Controller.jsp?command=컨트롤러에서 처리할 기능형태로 다음
    action: 양식 데이터가 제출될 때 처리할 페이지 또는 스크립트의 URL을 지정
    method : get/post
    onsubmit : form이 제출될 때 실행될 자바스크립트 함수를 지정하는데 사용. 이 속성은 서버로 전송되기 전에 사용자가 입력한 양식 데이터의 유효성을 검사하는데 사용하는데 유효하지 않은 onsubmit함수는 true또는 false를 반환하여 제출 동작을 방지할 수 있음
  2. JDBC구현 (6단계)
    1. 드라이버로딩-Class.forName("org.mariadb.jdbc.Driver")
    2. DB연결 - DriverManager.getConnection
    3. 쿼리준비 sql,conn,psmt
    4. 쿼리실행 executeUpdate,executeQuery
    5. 쿼리결과받기 while(rs.next())
    6. DB닫기 close
  3. Controller (7단계)
    1. command값 받기(request.getParameter("command"))
    2. DAO객체 생성(DB연결,작업)
    3. command분기
    4. 전달된 파라미터받기(.equals(파라미터))
    5. DAO실행
    6. 스코프객체 담기
    7. 페이지이동
  4. pageContext.forward() vs response.sendRedirect()
    pageContext.forward()와 response.sendRedirect()는 모두 사용자를 다른 페이지로 리디렉션
    주요 차이점은 브라우저와 서버에서 리디렉션을 처리하는 방법
  • pageContext.forward() 내부 서버 측 리디렉션을 수행합니다. 이는 브라우저가 관여하지 않고 요청이 새 URL로 직접 전송됨을 의미합니다. 브라우저는 리디렉션을 인식하지 못하고 주소 표시줄의 URL을 변경하지 않습니다.
  • response.sendRedirect() 외부 리디렉션을 수행합니다. 즉, 서버가 새 URL을 포함하는 클라이언트에 응답을 보냅니다. 그런 다음 브라우저는 새 URL에 대한 새 요청을 만들고 주소 표시줄에 새 URL이 표시됩니다.
  • pageContext.forward()를 사용하면 새 페이지에서 요청 속성을 사용할 수 있는 반면 response.sendRedirect()를 사용하면 속성이 손실된다는 것입니다.
  • pageContext.forward()는 일반적으로 동일한 웹 애플리케이션 내의 다른 리소스(예: 다른 JSP 페이지 또는 서블릿)로 요청을 전달하는 데 사용됩니다.
  • response.sendRedirect()는 일반적으로 사용자를 다른 웹사이트 또는 다른 웹 애플리케이션으로 리디렉션하는 데 사용됩니다.
  • response.sendRedirect()를 사용하면 모든 URL로 리디렉션할 수 있는 반면 pageContext.forward()를 사용하면 동일한 웹 애플리케이션 내에 있는 리소스로만 전달할 수 있습니다.

요약하면 pageContext.forward()는 동일한 웹 애플리케이션 내에서 내부 서버 측 리디렉션에 사용되는 반면 response.sendRedirect()는 다른 URL에 대한 외부 리디렉션에 사용됩니다.

반응형

'back-end > JSP&Servlet' 카테고리의 다른 글

(Servlet)WebServlet어노테이션  (0) 2023.03.24