BackEnd 정리

LeeJ·2023년 3월 30일
0

MVC패턴 이해 및 동작의 이해

MVC 패턴

소프트웨어의 디자인 패턴

모델

어떠한 동작을 수행하는 코드들, 즉, 비즈니스 로직 및 데이터 처리 담당

  • Model의 상태에 변화가 있을 때 Controller와 View에 이를 통보
    • 이를 통해 View는 최신의 결과를, Controller는 해당 상태에 따른 명령(CRUD)을 제공

수행된 모델의 결과를 사용자에게 보여줌

컨트롤러 (Servlet)

사용자로 하여금 모델의 상태에 변화를 줄수 있게 해줌

  1. 웹 브라우저에서 컨트롤러에 요청
  2. 컨트롤러가 모델을 호출
  3. 모델은 결과를 컨트롤러에 반환
  4. 컨트롤러는 뷰에 화면을 요청
  5. 뷰는 컨트롤러에 결과화면을 반환
  6. 컨트롤러는 웹 브라우저에 결과화면을 반환

Servlet관련 객체 및 주요 메서드

Interface Servlet

  • void init(ServletConfig config);
    • 서블릿이 생성된 후 초기화하는 메서드
  • ServletConfig getServletConfig();
    • 서블릿 초기화에 이용된 ServletConfig를 반환
  • void service(ServletRequest request, ServletResponse response);
    • 파라미터로 들어온 request에 대해 response를 생성
  • String getServletInfo();
    • 해당 서블릿에 대한 정보를 반환
  • void destroy();
  • Servlet Container가 종료 시 생성된 모든 서블릿에 대해 실행하여 GC에 의해 정리되는 메서드

Interface ServletConfig

  • String getServletName();
    • 서블릿의 이름을 반환
  • ServletContext getServletContext();
    • 실행중인 caller가 참조하는 ServletContext를 반환
  • String getInitParameter(String name);
    • 초기화에 사용될 파라미터 이름 'name'에 해당하는 값을 반환 / 없다면 null
  • Enumeration<String> getInitParameterNames();
    • 초기화 할 파라미터들의 이름에 대한 Enumeration을 가져옴

Interface ServletContext

  • 하나의 서블릿이 서블릿 컨테이너가 정의하고 관리하는 자원을 사용하기 위한 메서드들을 가지고 있는 Interface
  • getAttribute, getContext, setAttribute등이 여기에

GenericServlet

  • void init()
    • 서블릿의 객체가 생성될 때 호출되는 메서드
  • void destroy()
    • 서블릿의 객체가 메모리에서 사라질 때 호출되는 메서드
  • void service(request, response)
    • 서블릿의 요청이 있을 때 호출되는 메서드 (doGet, doPost모두)

HttpServlet

  • void doGet(request, response)
    • form의 method가 get일때 호출되는 메서드
  • void doPost(request, response)
    • form의 method가 post일때 호출되는 메서드

HttpServletRequest

  • Enumeration<String> getParameterNames()
    • 현재 요청에 포함된 매개변수 이름을 열거 형태로 넘겨줌
  • String getParameter(String name)
    • 문자열 name과 같은 이름을 가진 매개변수 값을 가져옴
  • String[] getParameterValues(name)
    • 문자열 name과 같은 이름을 가진 매개변수 값을 배열 형태로 가져옴
  • Cookie[] getCookies()
    • 모든 쿠키 값을 javax.servlet.http.Cookie의 배열 형태로 가져옴

HttpServletResponse

  • void addCookie(Cookie cookie)
    • response에 Cookie를 추가
  • void setContentType(String type) // (ServletResponse)
    • 문자열 형태의 type에 지정된 MIME Type으로 Content Type을 지정

HttpSession

  • getAttribute, setAttribute

Servlet URL Mapping

  • 서블릿의 @WebServlet("/URL") 어노테이션을 사용한 매핑
  • web.xml을 통한 매핑
  • 보안상 문제로 경로 노출을 방지하기 위해 사용

EX )


HttpServlet Life Cycle

  1. 클라이언트로부터 요청이 오면 Serlvet클래스가 로딩되어 Servlet객체가 생성
  2. init()메서드 호출, Servlet초기화
  3. service()메서드 호출, Servlet이 요청 처리
  4. service()메서드는 특정 http 요청을 처리하는메서드 호출 (doGet, doPost)
  5. destroy()메서드 호출, Servlet 제거

Page이동 관련 객체 및 메서드

Forwarding

ServletRequest.getRequestDispatcher(path)

  • path에 상대경로만 입력 가능

ServletContext.getRequestDispatcher(path);

  • path에 절대경로만 입력 가능

Redirect

  • 응답하면서 방향을 틀기 때문에 response에 있음
  • 웹브라우저의 header의 방향을 차즌 것이므로 ServletResponse에는 없음
  • sendRedirect() 메소드는 HttpServletResponse에 있음. ServletResponse로부터 상속받은 것 아니고 http에 특화된 기능.

뭔차이?

Forward

  • 요청이 들어왔을 때 서버상에서 바로 다른 컴포넌트, 다른 자원으로(서블릿->JSP) 이동하는 것(브라우저 안 거침)
  • 포워드는 같은 서버사이드에서만 이동할 수 있음.

Redirect

  • 요청이 들어왔을 때 일단 응답하고 다시 요청. 브라우저 거치고 가는 것. 브라우저를 거치면 어떤 서버사이드이든 다 연결될 수 있음.
  • 리다이렉트는 다른 서버사이드로도 이동할 수 있음. 컨테이너가 달라도 이동 가능. 완전히 다른 서버사이드의 리소스에 접근 가능.

거의 대부분의 페이지가 포워딩을 씀. 그렇다면 신경 써야 할 부분은 언제 리다이렉트를 하는가?

  • 정적인 문서로 가야 하는 경우 : 포워딩은 컨테이너 안에서 이루어짐. 동적인 프로그램만 해당된다! 정적인 문서로 이동할 때는 컨테이너 안에서 갈 수 없음. 컨테이너 밖에 있는 웹 서버로 가야 함!! 즉, 브라우저를 거쳐야 하는 경우 == 정적인 문서로 가야 하는 경우.
  • 에러 페이지 404 : 에러 페이지 핸들링은 리다이렉트로 해야 함. 에러 페이지는 전부 다 정적인 문서이기 때문

JSP구성 요소별 기능 및 사용 방법

  1. 스크립트(Script) 요소
  2. 지시어 (디렉티브:directive)
  3. 내장객체 (Implicit Object)
  4. 액션태그(Action Tag)
  5. 표현언어 (Expression Language)
  6. 사용자 정의 태그, JSTL

스크립트(script)요소

  • 스크립트릿 : <% .. %>
    • JSP 페이지 내부에 자바(JAVA) 소스코드를 삽입한다.
  • 표현식 : <%= ... %>
    • 출력결과(HTML 요소내) 에 값(value) 를 넣기위해 사용한다.
  • 선언 : <%! ... %>
    • JSP 페이지 내부에 자바 메소드 (JAVA method) 를 선언한다

지시어(디렉티브:directive)

  • <%@ page ... %>
    • 스크립트언어 , 에러페이지 지정, 버퍼 설정 등 을 정의한다.
  • <%@ include ... %>
    • 번역단계에서 다른문서를 포함시킨다.
  • <%@ tablib ... %>
    • 태그 라이브러리 를 선언한다.

내장객체(Implicit Object)

  • request
    • 클라이언트에서 서버로 보내지는 요청과 관련된 객체
  • response
    • 서버에서 클라이언트로 보내지는 응답과 관련된 객체
  • out
    • 출력을 클라이언트로 보내는 객체
  • session
    • 서버측 웹컨테이너 에 사용자의 상태를 관리하는 객체
  • application
    • 어플리케이션 전반에 걸친 정보를 관리하는 객체
  • config
    • 페이지와 관련된 서블릿 설정 (servlet config) 객체
  • pageContext
    • 현재 페이지의 내용을 저장하고 있는 객체
  • page
    • 페이지에 대한 실제 인스턴스 (자바클래스) 를 저장하고 있는 객체
  • Exception
    • 이전 페이지의 에러를 저장하고 있는 객체

액션태그 (Action Tag)

  • jsp:include
    • 페이지가 요청될때 해당 태그가 위치한 곳에 파일을 포함시킨다.
  • jsp:useBean
    • javaBean 을 찾고 인스턴스화 한다.
  • jsp:setProperty
    • javaBean 의 프로퍼티를 설정한다.
  • jsp:getProperty
    • javaBean 의 프로퍼티를 가져온다.
  • jsp:forward
    • 하나의 jsp 페이지 에서 다른 jsp 페이지 로 강제이동 시킨다.
  • jsp:plugin
    • javaBean 또는 Applet 을 현재 jsp 페이지 에 포함시킬때 사용한다.
  • jsp:element
    • XML 태그를 동적으로 정의한다.
  • jsp:attribute
    • 동적으로 정의된 XML 태그의 속성을 정의한다.
  • jsp:body
    • 동적으로 정의된 XML 태그의 본문을 정의한다.
  • jsp:text
    • JSP 페이지와 문서에 템플릿 텍스트를 쓰는데 사용한다.

표현언어(Expression Language, EL)

스크립트 요소의 사용없이 JSP 페이지에 값을 표현할수 있는 태그 기반의 새로운 언어이다.

기본문법은 ${expr} 이며 표현언어의 포현식에는 정수, 부동수소점 수 , 문자열, 부울값,에 대한 참거짓, 내장null을 사용할수있다.

사용자 정의 태그 , JSTL

  • JSP 가 제공해주는 태그 외에 사용자가 별도로 정의하여 사용할수 있는 태그이며 JSTL 또한 사용자 정의 태그에 속한다.
  • JSTL (JSP Standard Tag Libary) 는 자바언어의 조건문, 반복문과 같은 프로그래밍 요소를 태그로 구현할수 있게 해준다.

선언 : <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

  • <c:out>
    • <%= .. %> 와 유사하며 표현식에 사용된다.
  • <c:set>
    • JSP 에 사용될 변수를 지정하며 범위를 설정할 수 있다.
  • <c:remove>
    • 변수를 제거한다. ( 범위를 설정한 경우 해당 범위내의 변수를 제거 )
  • <c:catch>
    • 에러 (Exception) 를 캐치하고 이를 처리한다.
  • <c:if>
    • 조건이 참일 경우 본문 포함된다.
  • <c:choose>
    • 조건태그 이며 배타적인 조건부 연산에 사용된다.
  • <c:when>
    • choose 태그가 사실일경우 본문에 포함된다.
  • <c:otherwise>
    • choose 태그가 거짓일경우 본문에 포함된다.
  • <c:import>
    • 설정된 url 의 자원을 삽입한다.
  • <c:forEach>
    • 컬렉션 또는 Map 과 같은 유형을 허용하고 이를 반복처리한다.
  • <c:forTokens>
    • 설정한 구분자로 분리된 토큰을 반복한다.
  • <c:param>
    • import 태그에 설정된 url 에 파라미터를 추가한다.
  • <c:redirect>
    • 새로운 url 로 리다이렉트 시킨다.
  • <c:url>
    • URL 를 재생성한다.
profile
헤응

0개의 댓글