MVC 모델 2 - 0926

Yung·2022년 9월 26일
0

Java223bitcamp

목록 보기
9/26

061. MVC 모델 1

Controller :
요청을 처리하기 위해 요청 정보를 가공하여 적절한(서비스객체/DAO객체)를 실행
응답을 처리하기 위해 응답 데이터를 가공하여 출력을 담당하는 객체를 실행한다.

View :
Controller가 준비한 데이터를 가지고 출력 UI 생성

Model :
요청/응답에 필요한 작업을 수행

062. MVC 모델 2

Servlet은 클라이언트 요청을 받아서 적절히 가공해서 DAO/Service를 실행해서 출력할 데이터를 준비하고 JSP는 출력에만 집중하는 MVC 모델2

Requestdispatcher - include / forward

@WebServlet("/board/list")
public class BoardListController extends HttpServlet {
  private static final long serialVersionUID = 1L;

  BoardDao boardDao;

  @Override
  public void init() {
    boardDao = (BoardDao) this.getServletContext().getAttribute("boardDao");
  }

  @Override
  protected void doGet(HttpServletRequest req, HttpServletResponse resp)
      throws ServletException, IOException {

    try {
      List<Board> boards = boardDao.findAll();
      // 정상적으로 실행했다면 JSP가 사용할 수 있도록 ServletRequest 보관소에 저장한다.
      req.setAttribute("boards", boards);

      // JSP에게 UI 생성을 위임한다.
      resp.setContentType("text/html;charset=UTF-8"); // JSP가 출력할 콘텐트의 MIME 타입 설정
      RequestDispatcher 요청배달자 = req.getRequestDispatcher("/board/list.jsp");
      요청배달자.include(req, resp); // JSP를 실행한 후 리턴된다.

    } catch (Exception e) {
      // 예외가 발생하면 예외를 처리하는 JSP에게 UI 생성을 위임한다.
      RequestDispatcher 요청배달자 = req.getRequestDispatcher("/error.jsp");
      //JSP를 실행하기 전에 ServletRequest 보관소에 오류 정보를 담는다.
      req.setAttribute("exception", e);

      //forward():
      // - 예외가 발생하면 기존의 출력 내용을 모두 버린다.
      // - JSP에게 처음부터 새로 출력하게 전권을 위임한다.
      요청배달자.forward(req, resp); // JSP를 실행한 후 리턴된다.;
    }
  }
}

게시글 목록 조회 : MVC 모델 2

게시글 목록 조회 : MVC 모델 2 (오류 발생)

JSP Built-in 객체

JSP 파일을 가지고 서블릿 자바코드를 생성할 때 기본으로 준비하는 객체 -> 객체의 이름은 명세서에 정해져 있다.

JSP파일을 JSP엔진이 변환할때
_jspService(HttpServletRequest request, HttpServletResponse response) {}
request, response Built-in 변수(내장 변수) 명세서에 이름이 정해져있다.
JSP 엔진 마음데로 이름을 바꿀수 없다.

PageContext pageContext;
HttpSession session;
ServletContext application;
ServletConfig config;
JspWriter out;
Object page;
Throwable Exception;

Refresh 와 Redirect

  1. Refresh

  2. Redirect

EL(Expression Language)

EL -> OGNL 표기법을 사용하여 객체의 프로퍼티 값을 조회한다.
OGNL : Object Graph Navigation Language(객체 연결점을 따라 이동하면서 값을 조회하는 문법)
JSP에서 java코드를 퇴출

필드와 프로퍼티

Class Board {
	String tle; // Field
    void setTitle(String title) { // Property, setter
    	this.tle = title;
    }
    
    String getTitle() {	// Property, getter
	    return this.tle;
    }
}

필드명 : tle
프로퍼티명 : title
setTitle() {}이 있으면 set을 제거하고 첫번째 알파벳을 소문자로한 title이 프로퍼티명이된다.
getTitle() {}이 있으면 get 제거하고 첫번째 알파벳을 소문자로한 title이 프로퍼티명이된다.
${객체.프로퍼티.프로퍼티.프로퍼티...}
${board.title}

EL의 기본 객체

  • applictaionScope(ServletContext 보관소)
    application.getAttribute("board) => ${applicationScope.board}
  • SessionScope(HttpSession 보관소)
    session.getAttribute("board") => ${sessionScope.board}
  • requestScope(ServletRequest 보관소)
    request.getAttribute("board") => ${requestScope.board}
  • pageScope(PageContext(JspContext) 보관소)
    pageContext.getAttribute("board") => ${pageScope.board}

${requestScope.board.title} => ${board.title} scope을 생략하게되면 scope 보관소에 순서대로 찾아보다가 찾으면 값을 리턴

063. EL 문법 도입 : 객체 프로퍼티 값 추출을 더 쉽고 간결하게

<%
Board board = (Board) request.getAttribute("board");
%>
<%=board.title%>

=> ${requestScope.title}

프로퍼티 getter setter를 가리키는 용어다.

0개의 댓글