톰캣으로 서블릿 관리중: 톰캣은 서블릿 컨테이너. 톰캣은 서블릿의 lifecycle을 관리하는 관리자역할을 함
service나 do를 이용해 콜백메서드를 호출함. 즉 우리가 하는게 아니고 톰캣 서버가 호출하는 메서드들임 (p.33)
JSP(Java Server Page)
: 자바, 템플릿기반의 스크립트 코드 형태를 가진 스펙(.tmpl 역할/ 진짜 소스가 아니라 템플릿 기반)
MVC
- Model: row data 가져와서 가공
- View: UI
- Controller: business로 연결된 모델과 뷰를 연결
<JSP 소스 구성 요소 (MVC 중 View 제작에 특화)>
1. 정적 텍스트: HTML, CSS, JavaScript, 일반 텍스트
2. scriptlet
1) Directive(지시자) <%@ 지시자명 속성="값" %> : JSP 페이지에 대한 환경설정 혹은 전 처리
-page: 설정 정보(metadata, 로직에 영향 끼치진 않음)
-include: 동적 내포
-taglib: custom tag library 로딩에 사용
p.36
session: 중프때는 LoginSession만들어썼는데 얘는 직접 세션을 담을수있는 클래스 구현한거지만 was에서는 session 정보를 캡슐화해놓은 객체 자체가 별도로 구현되어있어서 걍 쓰기만 하면됨 (page 디렉티브에서 기본값 true로 설정되어있음)
buffer: 0과1집합으로 스트림 옮길때 넘 느리니까 버퍼라는 공간에 그 응답데이터들 담아놓고 한꺼번에 flush 시킨다. 전송효율 높이기 (기본적으로 jsp에선 8kb 버퍼 사용) (한글 1글자- 2byte -> 8kb면 4000개의 한글문자 담을 수 있음)
4000문자 넘으면 buffer overflow -> IOException 뜸 그래서 그전에 autoFlush
최프때부턴 Exception 잘 고려하면서 짜기
중프때는 standalone 지가깔아서 지가 썼지만 이제는 웹 app이니까 클라이언트 여러명이고 exception 하나뜨면 모두한테 뜸. 조심하기!
*call by value
- 메서드의 파라미터 primitive일 때
*call by reference
- 메서드의 파라미터가 객체 참조형일 때 / 여러개를 한번에 리턴하고 싶을 때. 콜바레의 경우 객체의 주소값을 넘기기 때문에 객체의 상태를 바꿀 수 있다. 실제로 return 문보다 콜바레를 많이 쓴다.
e.g) !10= 10* 9* 8* 7* 6* 5* 4* 3* 2* 1 = 3628800 이런 거 동적으로 띄우고 싶을 때
trimDirectiveWhitespaces="true" : 응답데이터 위 공백 지워주는건데 text/html에선 별로 상관없지만 만약 2진 데이터로 나가는 이미지일 경우 이미지 깨짐
2) Scriptlet<% 자바코드 %>
- String test="Text"; // 이안에다 쓰는건 지역화(in method: _jspService) 다 지역변수가된다
-그래서 전역변수 쓰고싶을때 declaration쓴다
3) Expression (표현식) <%="출력하고 싶은 값이나 변수" %>, <%= "scriptlet 안에 있는 변수사용가능"%>
4) Declaration (선언) <%! %>
<%! String sample="전역변수" %> ---- 여기다가 쓰면 전역변수 됨 (근데 이래봤자 실제 변수가 만들어지는건 WAS에 따라 다르고 어떤 변수명일지도 몰라서 doesn't work
--메서드 선언하고 싶으면 여기다 해야함
jsp의 진짜 자바 코드는 톰캣이 만들고 그 객체의 관리권한도 톰캣한테 있..????
전역변수의 목적 : 서로 다른 메서드간 하나의 변수를 공유하고싶을 때
스테틱을 붙이는 목적 : 서로 다른 객체에서 동일한 하나의 변수를 공유하기위해서
사실 이 선언부는 필요가 없음 왜냐 얘 인스턴스변수도 못받고 클래스명도 모르니까 저 위의 데이터 공유들 다 불가능
그래서 쓰이는게 scope(각 데이터가 사용 범위가 제한되어있어 그거에 맞춰 데이터 공유)
JSP 도 서블렛이라 서블렛의 메서드인 init, destroy (lifecycle 콜백) / service(request 콜백) 가지고있음.
**********
jsp는 곧 서블렛- 싱글톤인데 (싱글톤에서 전역변수를 쓰는 것은 굉장히 위험)
<%! int number 이런식으로 하면모든 클라이언트가 사용하는 변수의 값이 다 똑같아져버림
5) Comment (주석) <%-- --%>
Client-side comments: HTML, CSS, JavaScript
- 클라이언트 사이드 주석 남발하면 응답데이터 용량 커짐
- 클라이언트한테도 다 보임. 보안에 취약
Server-side Comments: Java, JSP
- 왠만하면 이거 쓰자
3. 기본객체
4. Action tag
5. EL(Expression Language)
6. JSTL(Tag Library)
이거를 html안에서 만들고 있는데 클라이언트 사이드니까 무조건 context root(webStudy01)부터 나와야함. 근데 이걸 하드코딩하면 안되겠져?? 그러니까 진짜servlet(_jsService)에서 보내주는 request를 쓴다.
ampersand를 기준으로 파라미터 하나: section이라고 부른다.
minDan+maxDan = 섹션 2개
함수를 직접 만들어서 사용해보기
근데 내가 느끼기로는 자바스크립트에선 객체 중간중간 추가하는게 가능하니까 왠만한 데이터는 객체 {}로 만들어서 쓰는게 좋은듯여.
'WEB Application' 카테고리의 다른 글
20/09/05 웹 프로그래밍 (기본 객체, 세션, 쿠키) (0) | 2020.09.07 |
---|---|
20/09/04 웹 프로그래밍 기초 (model2, request dispatch , redirect) (0) | 2020.09.04 |
20/09/02 웹 프로그래밍 기초 (언어별 객체 선언 차, 마샬링, 예외) (0) | 2020.09.03 |
20/08/31 웹 프로그래밍 기초 (절대경로 상대경로, 서블릿 콜백, java with resource) (0) | 2020.08.31 |
2020/08/26 웹 프로그래밍 기초 (2) | 2020.08.26 |