JSP spec : 0224
- N-Tier : c(클라이언트) / s(서버) 구조에서 중간에 있어서 Middle Tier라고도 부른다. Tomcat
정적인 서버와 동적인 서버 구분해주어야 한다. >> ws/was >> model2
w"a"s >> allication
- 일하는 순서
1. 요청을 받는다.
2-1. row 데이터 확보 2-2.imformation 가공 2-3.scope통해서 담는다. >> 또 쪼개지는 것은 일이 많다는 것....
↓↓
2번들을 다시 쪼갠다.
2-1을 하는 객체를 따로 만든다. (db에서 row데이터 확보 ) : DAO(data access object) = Persistence layer
==> 날것.
2-2 가공, 로직을 운영하는 객체 : service(가장중요한 일을 함.)
service---(의존관계)-->dao
information <----------- row data
contents => mime 타입에 따라 json, html ... 모양이 변한다.
ws(요청받음) ---(의존관계)--> service(info의뢰받음) ---(의존관계)--> dao(data의뢰받음)
setAttribute로 scope담기 information <--(가공)-- row data<----------- row data
ㅣ
getAttribute, 응답데이터
컨트롤러 프레젠테이션
==> 레이어드 아키텍쳐
==> 효과적으로 사용하려면 service를 잘 사용해야함
레코드는 엔터티/릴레이션으로 이루어져있음
자바에서는 오브젝트로 담아와야함
엔터티를 오브젝트로 가져오는 것이 VO
VO : 도메인 레이어
==> 5Layer구조
0223 => controller 분해해봄.
최프때는 12레이어쯤.... 플로어를 놓치지 말아라..!!
앞으로는?
레이어쪼개기
수업은
1. 클라이언트와 컨트롤러 사이 : http 프로토콜 => servlet/jsp
2. dao와 db사이 : 프로토콜이 없으니까 => jdbc
3. 프레임웍 : 우리가짜야하는 코드를 대신 만들어놓은 것
db쪽 도와주는 mybatis / 쪽 자바빈규약프레임웍 / client쪽 쪽 , 객체를 검증하는 프레임웍/
view쪽 지원하는 컴포짓뷰 프레임웍/ controller지원하는 스프링 프레임웍
service, 로직은 나만의 특수성, 여기는 프레임웍이 존재하지 않는다.
jsp spec
서블릿 스펙 기반의 스크립트 형태로 동작하는 템플릿 엔진
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%> : 서버사이드
jsp는 템플릿 엔진. 진짜소스가 아니다.
(web.xml이 있는 톰캣또한 웹 어플리케이션이다.)
이 맵핑 정보를 지우면 jsp는 servlet으로서의 역할을 전혀 할 수 없다. 동적이 안됨.
==> 서블릿 기반.
jsp는 컴파일하지 않는 인터프리터 언어 방식의 js처럼 사용하지만 사실은...
work 폴더 타고 들어가면 진짜소스인 java와 class소스가 있다.
누가 컴파일햇는가? 톰캣
jsp container로서의 톰캣
1. 소스요청받고 2. 컴파일 함 ==> 톰캣은 jsp의 존재를 알고 있었다. 맵핑 필요? no
컨테이너인 톰캣이 어떤 역할을 하느냐에 따라 달라지는 jsp와 서블릿의 차이를 다시 볼 수 있다.
JSP ? 서블릿 스펙 기반의 스크립트 형태로 동작하는 템플릿 엔진
JSP 컨테이너의 역할
1. 현재 요청을 처리할 수 있는 Jsp 검색 (싱글턴 인스턴스 검색)
2-1. 검색됐다면, callback 메소드를 호출해 응답 전송
2-2. 검색에 실패한 경우,
3. jsp 템플릿을 대상으로 서블릿 소스 생성 (work)
4. 컴파일
5. 싱글턴 인스턴스 생성
6. callback 메소드 호출해 응답 전송
Servlet 컨테이너의 역할
1. 현재 요청을 처리할 서블릿의 인스턴스 검색
2-1. 검색됐다면, callback 메소드를 호출해 응답 전송
2-2. 검색에 실패한 경우,
3. jsp 템플릿을 대상으로 서블릿 소스 생성 (work)4. 컴파일
5. 싱글턴 인스턴스 생성
6. callback 메소드 호출해 응답 전송
jsp 소스의 표준 구성 요소
1. 정적 텍스트 (Front-end) : 텍스트, HTML, JS, CSS
2. 동적 요소(Back-end)
1) 스크립트 요소
- scriptlet(지역코드화, _JSPService) : <%
//java code, 지역변수
int currentYear = Calendar.getInstance().get(Calendar.YEAR);
%>
- expression : <%= "출력값" %>, <%=currentYear%>, <%=txt1 %>
- directive : <%@ page buffer="16kb" %> : 현재 Jsp 페이지의 환경 설정, 속성으로 설정.
(실행에 영향을 미치지는 않음.동작은 함. 일종의 전처리 구문. java의 import와 비슷)
page(required)
include(option) : 정적 내포
taglib(option) : custom tag library 로딩
- declaration(전역코드화) :
<%!
private static String txt1 = "텍스트1";
private String txt2 = "텍스트2";
public void test(){}
%>
- comment : <%-- jsp comment --%>
client side comment : HTML, JS, CSS
<!-- HTML comment -->
<script type="text/javascript">
// JS comment
</script>
<style type="text/css">
/* css comment */
</style>
server side comment : java comment, jsp comment
<% // java comment %>
<%-- jsp comment --%>
2) EL(expression language)
3) jsp 액션 태그
4) JSTL(jsp standard tag library)
전역변수를 private으로만 거의 선언한다. 왜?
public : 이 객체의 상태에 접근하겠다...>데이터 공유에 목적이 있다. > servlet, jsp에서는 데이터 공유가 필요가 없다.
>> 싱글톤으로 톰캣이 관리하기 때문에 그 인스턴스를 얻어올 수 없다. (참조주소를 못받아온다. 래퍼런스가 없다.)
>> static을 소유한 클래스명을 알 수가 없다. 톰캣만 알고 있다. public이 쓸데가 없다.
↓↓
Attribute로 데이터를 주고 받음
그냥 필기
사용범위
블록변수 < 지역변수 <인스턴트 전역변수 < 스테틱 전역변수
>> 저장할 때마다 다시 컴파일 했을 톰캣... 고생했다 ㅠ
스크립트 언어라면 이런 형태의 구조 불가능=> 선언후에 사용할 수 있음
컴파일 언어여야 가능
comment : client 사이드에서 주석을 달면 크기가 무거워진다.
Throwable : 모든 이셉션의 최상위
/*
table 태그 한 단이 한 로우
행은 8
열은 9개 2*2=4
*/
2*1=2 | 2*2=4 | |||||||
3*1=3 | ||||||||
컨테이너
resource
🚩각각의 리소스의 차이는 어떤지?
🚩웹 리소스를 접근할 때 사용하는 url의 표현방식