일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- heroku
- 수학
- Easy
- input
- 자바입력
- 카데인 알고리즘
- JAVA11
- 자바 thread 실행 순서 제어
- R
- 자바 스레드 실행 순서 제어
- SpringBoot 2
- hash table
- scanner
- Kadane's Algorithm
- 사칙연산
- array
- Today
- Total
DeFacto-Standard IT
MVC Architecture를 사용한 Servlet과 JSP의 Integrating 본문
MVC Architecture를 사용한 Servlet과 JSP의 Integrating
defacto standard 2017. 11. 10. 21:57MVC Architecture
Model, View, Controller를 분리한 디자인 패턴.
Model - 어플리케이션의 state(data)를 표현. Java Beans가 해당됨
View - data를 보여주는 presentation 역할. JSP가 해당됨
Controller - view와 model사이의 인터페이스 역할. 유저의 input을 받고, Model/View를 조작하여 적절한 변화를 수행한다. Servlet이 해당됨
1. browser는 servlet에 request를 보냄
2. servlet은 DB로부터 정보를 읽어 Java bean을 인스턴스화 함
3. servlet은 JSP 페이지와 커뮤니케이션
4. JSP 페이지는 java bean과 커뮤니케이션
5. JSP 페이지는 browser에게 응답함
MVC Control Flow 1
MVC Control Flow 2(Annotated)
RequestDispatcher로 MVC 구현
1. 결과 data를 보여주기 위해 beans 정의
보통 Java classes는 최소 1개의 getter메서드가 있음
2. request를 핸들링 하기 위해 servlet 사용
Servlet은 request parameters를 읽고, 필요한 데이터가 빠지지는 않았는지, 데이터의 형식이 잘못된 것은 아닌지 체크한 후 비즈니스 로직을 호출한다.
3. 비즈니스 로직 수행과 결과를 포함한 bean을 얻음
servlet은 결과를 얻기 위해 비즈니스 로직(application-specific code)또는 data-access code을 invoke.
4. bean을 request, session 또는 servlet context 안에 저장
servlet은 request의 결과를 표현하는 bean의 레퍼런스를 저장하기 위해 request, session 또는 servlet context 객체의 setAttribute()를 호출.
5. request를 JSP page로 포워딩
servlet은 어떤 JSP페이지가 상황에 따라 적절한지 결정하고, 전송제어를 하기 위해 RequestDispatcher의 forward method를 사용한다.
6. beans로부터 data를 추출
- JSP 1.2(옛날 버전)
JSP 페이지는 jsp:useBean을 통해 4번과 동일한 스코프의 beans에 접근한다. 그리고 jsp:getProperty를 사용하여 bean properties를 출력한다.
- JSP 2.0(선호) : Expression Language
JSP 페이지는 ${nameFromServlet.property}와 같은 EL을 사용하여 bean properties를 출력한다.
- 위 두가지 경우 모두, JSP 페이지는 bean을 만들거나 수정하지 않는다. servlet이 만든 data를 추출하여 보여준다.
JSP Expression Language
JSP 2.0의 주요 컴포넌트는 EL이라고 불리는 Expression Language이다.
EL은 JavaBeans 컴포넌트에 저장된 application data를 쉽게 접근할 수 있게 해준다.
${name}은 간단한 변수의 접근을,
${name.bar}는 property의 접근을 제공한다.
Scopes
"scope"란 bean이 저장된 장소를 의미한다. 이 장소에 따라서 얼마나 bean이 오래 존재하는지가 결정된다.
3가지 scope가 존재한다.
- Request
request에 저장된 데이터는 servlet과, 이 servlet이 forwarding한 JSP 페이지에서만 접근이 가능하다. 따라서 다른 JSP페이지에서는 참조할 수 없다. 가장 일반적으로 쓰는 Scope이다.
- Session
session에 저장된 데이터는 servlet과, 이 servlet이 forwarding한 JSP페이지에서도 접근이 가능하며, 추가적으로 이후 다른 JSP페이지에서도 접근이 가능하다. 단, 같은 유저만이 허용된다. 다른 유저의 경우 Servlet이 스레드로서 실행되기 때문에, 자신이 실행한 Servlet으로부터 다른 JSP를 제공받으므로 접근이 불가하다.
- Application (Servlet Context)
servlet context에 저장된 데이터는 Application 내의 모든 유저와 모든 페이지에 대해 공유된다. 거의 쓰이지 않는다.
Request기반 데이터 공유
- Servlet
Customer myCustomer = Lookup.findCustomer(request.getParameter("customerID"));
request.setAttribute("customer", myCustomer);
RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/SomePage.jsp");
dispatcher.forward(request, response);
- JSP 2.0
${customer.firstName}
- JSP 1.2
<jsp:useBean id = "customer" type="somePackage.Customer" scope="request"/>
<jsp:getProperty name="customer" property="firstName"/>
Beans
Java Classes는 다음 규칙을 따른다.
- 반드시 zero-argument constructor를 가져야 한다.
명시적, 암시적 생성자 모두 가능
- public instance를 가지고 있으면 안된다.
- Persistent 값은 반드시 getter/setter를 통해서 접근해야한다.
Example : StringBean
Beans 접근
- JSP EL
${customer.firstName}
- JSP Action Tag
<jsp:useBean id="customer" type="somePackage.Customer" scope="request"/>
<jsp:getProperty name="customer" property="firstName"/>
요약
MVC Approach
- servlet은 original request에 답을한다.
- Servlet은 비즈니스 로직을 호출하고, beans의 결과를 저장한다. Beans는 HttpServletRequest, HttpSession 또는 ServletContext클래스의 인스턴스에 저장되어있다.
- Servlet은 RequestDispatcher.forward를 통해 JSP 페이지를 호출한다
- JSP페이지는 beans로부터 데이터를 읽는다. 가장 최근 방식은 ${beanName.propertyName}이며, JSP 1.2버전은 이제 거의 쓰이지 않는다.
JSP with JSTL
JSTL은 많은 JSP로 구성된 Application에서 사용하는 기능을 압축한, 유용한 JSP 태그의 컬렉션이다. 많은 JSP가 사용하는 핵심 기능을 가지고 있다. JSP에 자바코드를 적게 넣기 위해 소개되었다.
JSTL을 사용하기 위해선 pom.xml에 다음을 추가해야 한다.
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
JSLT core lib 정의
<%@ taglib uri=http://java.sun.com/jsp/jstl/core" prefix="c" %>
JSP Scriptlet vs JSTL
JSTL tag library group은 다음과 같다.
- Core
- Formatting tags
- SQL tags
- XML tags
- JSTL Functions
'View Template > JSP' 카테고리의 다른 글
JSP, Servlet, Java, Javascript 차이 (0) | 2017.11.16 |
---|---|
JSP 개론 (0) | 2017.11.02 |