플레이데이터 24-25일차 - MiniProject(feat. Servlet & JSP & MVC)

Kim Hyen Su·2023년 8월 3일

MiniProject

  • title : 방명록 작성 페이지
  • Tech_stack : JAVA, MAVEN, H2 DataBase
  • Duration : 2023.08.03 ~
  • url : GitHub

프로젝트 진행하면서 새롭게 공부한 개념!

👉 SQL

  • VARCHAR 기본 크기 : 255자

👉 try-with-resources란?

try-catch-finally

  • Java7 이전의 try-catch-finally의 경우, 사용 후 반납해줘야 하는 자원들은 Closable 인터페이스를 구현하고 있으며, 사용 후에 close() 메서드를 호출해줘야 했다.
  • finally 구문 안에 NULL 검사 및 close()를 직접 호출해줘야 했다.
  • 단점
    1. 자원 반납에 의해 코드가 복잡
    2. 작업이 번거롭고 실수로 자원을 반납하지 않는 경우가 발생하여 자원 낭비가 발생한다.
    3. 에러로 자원을 반납하지 못하는 경우가 발생한다.
    4. 에러 스택 트레이스가 누락되어 디버깅이 어렵다.

try-with-resources

  • try-catch-finally 구문의 단점을 보완하고자 try-with-resources 구문이 Java7부터 지원.
    - Java는 AutoClosable 인터페이스를 구현하고 있는 클래스에 대해 try-with-resources를 적용이 가능하도록 함.

  • AutoClosable과 Closable 간의 관계
    - 상속관계

  • try-with-resources 구문을 사용하는 이유
    1. 에러 스택 트레이스에 오류가 누락되는 경우 발생.
    2. 에러 발생으로 인한 자원 반납이 누락되는 경우 발생.

👉 Statement구문과 PreparedStatement(pstmt)

  • 기존의 Statement 구문은 보안에 취약하다.
  • 대안으로 Pstmt를 사용한다.
  • 쿼리문에 ? 키워드를 사용한 다음 set자료형 메서드를 사용하여 값을 대입해준다.

👉 ServletContext

  • 웹 애플리케이션 단위로 정보를 서버쪽에 유지할 수 있는 방법.
  • 서블릿 컨테이너와 통신하기 위해서 사용되는 메서드를 지원하는 인터페이스.
  • 서블릿 컨테이너가 시작 시 웹서버에 등록된 웹 애플리케이션 단위로 하나의 ServletContext 객체가 자동 생성됨.
  • 웹 애플리케이션 서비스 중지 시 소멸.
  • WAS에 등록된 웹 애플리케이션 단위로 컨텍스트가 생성되는 이유
    - 서블릿 컨테이너가 웹 애플리케이션 단위로 모든 자원을 관리할 수 있게 하기 위함. 즉, 웹 애플리케이션 내에 있는 모든 서블릿 그리고 JSP 간에 정보 공유가 가능하고, 서블릿 컨테이너에 대한 정보를 추출할 수 있게 하는 기술.
  • 웹 애플리케이션 서비스가 시작 시 생성된 ServletContext 객체를 추출하는 방법은 ServletConfig의 getServletContext() 메서드를 사용하는 것이다.
  • 서블릿 실행 시 최초의 요청이면 ServletConfig 객체가 생성되며 init() 메서드의 인자값으로 전달도니다. ServletConfig

👉 자바 리플렉션 메서드 호출

  • 자바 리플렉션을 이용해 action으로 전달된 이름의 메서드를 자동으로 호출
  • 동적으로 메서드를 호출해주는 것.

👉 RequestDispatchr

  • 클라이언트로부터 최초에 들어온 요청을 JSP/Servlet 내에서 원하는 자원으로 요청을 넘기는(포워딩_forward(), include()) 역할을 한다.
  • 특정 자원에 처리를 요청하고 처리 결과를 얻어오는 기능을 수행하는 클래스.
  • 즉, 요청들어온 url 내에서 RequestDispatcher를 사용하여 다른 페이지 처리 결과를 응답.
  • forward() 사용 시 주의할 점
    - forward()는 제어를 다른 페이지로 넘기기 전에 출력 버퍼를 비우기 때문에 원래 페이지에서 다른 페이지 호출 시 현재 페이지에서 어떤 내용을 버퍼에 출력했더라도 무시되며 제어가 넘어간 다른 페이지 출력 내용만 브라우저에 전달된다.

👉 톰캣 설정 개요

  • 기본적으로 웹을 통해 접근할 수 있는 디렉토리 경로는 Document root 즉, [webapp] 폴더 아래가 된다.
  • 따라서 업로드되는 파일 역시 html에서 참조 가능한 경로에 있어야 한다.
  • 이때 하나의 디렉토리 아래 img 폴더를 만들고 파일을 업로드 하면 문제가 발생한다.
  • 따라서 이미지 업로드 경로는 다른 곳으로 지정하는 것이 좋다.
    - 해당 폴더는 웹으로 접근가능하도록 톰캣에 설정을 추가해줘야 한다.
    - [Servers] → [Tomcat9.0] → server.xml 파일 열기.
    <Context docBase="절데경로" path="/img" reloadable="true"></Context>

👉 ServletContext log()

  • log 개념
    - 개발 시 오류 처리 작업용(디버깅)
    - 실시간 개발 관점에서 무슨일이 일어났는지 확인하고자 할 때 참고
    - 서버 관리자 관점에서 client의 실행 정보 조회

👉 포워딩과 리다이렉트

  • JSP에서 다른 페이지로 전환하는 방식
    - 포워딩
    - 리다이렉트

  • 포워딩
    - 웹 컨테이너 차원에서 요청한 페이지가 아닌 포워딩한 페이지를 출력해주는 방식.
    - 서버 내부적으로 페이지를 출력하기 때문에 URL이 변경되지 않음.
    - 즉, 클라이언트 측에서는 페이지가 변경되었는지 확인이 불가능하다.

    • 현재 페이지와 포워딩에 의해서 호출된 페이지는 request, response 객체를 공유하기 때문에 사용자가 최초로 요청한 요청정보는 다음 URL에서도 유효하다.
  • 리다이렉트
    - response 객체를 주체로 한 리다이렉트 방식은 포워딩 방식과 다르게 페이지 전환/ 이동 시 request, response 객체를 새로 생성한다.
    - 또한 sendRedirect 명령에는 브라우저가 웹 컨테이너의 응답을 받은 후 다시 요청을 보낼 새로운 URL을 요청정보가 초기화되기 때문에 웹브라우저의 URL이 명시된 주소로 바뀐다.
    - 요청정보가 초기화되기 때문에 이전에 요청한 정보가 소멸된다.

☹️JSTL - <c:forEach>

  • 동일한 작업을 특정횟수 만큼 반복 시 사용.
  • items 속성으로 list(목록)를 입력 받아서 목록의 갯수만큼 반복하는 반복문.
  • var 속성은 list 내 객체를 사용할 변수명을 통해 가져온다.
  • var와 items 속성은 필수 속성이며, 이 두 속성만 정의하면 forEach 구문을 사용할 수 있다.
profile
백엔드 서버 엔지니어

0개의 댓글