Controller
:
요청을 처리하기 위해 요청 정보를 가공하여 적절한(서비스객체/DAO객체)를 실행
응답을 처리하기 위해 응답 데이터를 가공하여 출력을 담당하는 객체를 실행한다.
View
:
Controller가 준비한 데이터를 가지고 출력 UI 생성
Model
:
요청/응답에 필요한 작업을 수행
Servlet은 클라이언트 요청을 받아서 적절히 가공해서 DAO/Service를 실행해서 출력할 데이터를 준비하고 JSP는 출력에만 집중하는 MVC 모델2
@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를 실행한 후 리턴된다.;
}
}
}
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
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}
application.getAttribute("board)
=> ${applicationScope.board}
session.getAttribute("board")
=> ${sessionScope.board}
request.getAttribute("board")
=> ${requestScope.board}
pageContext.getAttribute("board")
=> ${pageScope.board}
${requestScope.board.title}
=> ${board.title}
scope을 생략하게되면 scope 보관소에 순서대로 찾아보다가 찾으면 값을 리턴
<%
Board board = (Board) request.getAttribute("board");
%>
<%=board.title%>
=> ${requestScope.title}
프로퍼티 getter setter를 가리키는 용어다.