WEB Application

20/09/01 웹 프로그래밍 기초 (call by reference, JSP 구성요소)

Tech Signal 2020. 9. 2. 09:05

톰캣으로 서블릿 관리중: 톰캣은 서블릿 컨테이너. 톰캣은 서블릿의 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

Directive - page

       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를 쓴다.

 

요청파라미터를 넣어 query string으로 만든다.

ampersand를 기준으로 파라미터 하나: section이라고 부른다.

minDan+maxDan = 섹션 2개


test()라는 함수는 한번에 css를 적용할 수 있게 해주는 놈임

함수를 직접 만들어서 사용해보기

근데 내가 느끼기로는 자바스크립트에선 객체 중간중간 추가하는게 가능하니까 왠만한 데이터는 객체 {}로 만들어서 쓰는게 좋은듯여.