<<<<<<<<<<<<<<<<<<<<< JSP(Java Server Pages)>>>>>>>>>>>>>>>>>>>
1. 장점
(1) 서블릿보다 만들기 쉽고, 빠르다
(2) 디자인(HTML/JS/CSS)과 로직(JAVA)을 분리시킬 수 있다. 즉, 디자이너와 프로그래머의 일을 분업화할 수 있다.
(3) 프로그래머가 직접 코딩한 Servlet 보다 최적화된 Servlet을 생성시켜 효율적인 코드를 생산한다.
(4) Java Beans 사용이 쉽다.
(5) 웹 어플리케이션상에서 변수의 유효범위(scope) 설정이 간편
2. JSP를 이루는 구성인자
(1) 지시어 (directive)
<1> 형태 : <%@ 지시어 %>
<2> 종류 : page, include, taglib ...
[1] page - contentType(내용물 형식 MIME Type 입력)
"text/html; charset=euc-kr"
- import(자바 import 동일) "java.sql.*, java.io.*"
- errorPage(익셉션 발생시 갈 페이지 지정)
"/error/error.jsp"
- isErrorPage (현재 jsp를 에러페이지 지정)
false(기본값)| true(exception 사용가능)
[2] include (한 페이지에 다른 페이지를 포함)
[3] taglib (커스텀 태그를 사용시)
(2) 스크립팅 원소
<1> 기능 : JSP 페이지에서 자바코드를 직접 사용할 수 있게 해주는 기능 제공
<2> 종류 및 형태
[1] 선언(declaration) <%! 자바코드 %> : 메소드,멤버변수 선언
[2] 스크립트릿(scriptlet) <% 자바코드 %> : 자바코드 실행
[3] 식(expression) <%= 자바코드 %> : 화면에 문자를 표시
(3) JSP 액션 (JSP 태그)
<1> 정의 : JSP에서 표준으로 정의된 태그
<2> 형태 : <jsp:태그명>
<3> 종류 : useBean, setProperty, getProperty, include, forward ...
[1] useBean : Bean 객체를 생성해서 특정 영역에서 사용
- id : 변수명이자 scope(영역)에서 저장될때 이름
- class : 실제 만들어질 클래스의 명 ex) dept.DeptService
- scope : 객체가 영향을 끼치는 범위 page < request < session < application
참고) useBean 태그 바디부(<jsp:useBean>바디</jsp:useBean>에 있는 내용은 Bean 객체가
처음으로 만들어질때만 실행된다
[2] setProperty : Bean 객체에 특정 프로퍼티에 값을 세팅
- name(*) : 변수명(useBean의 id)
- property(*) : Bean 객체 안의 프로퍼티명(멤버변수명)
- param : html의 input 태그 이름같은것들(파라미터명)
- value : 직접 값을 세팅
[3] getProperty : Bean 객체에서 프로퍼티의 값을 가져온다.
- name(*)
- property(*)
c.f.) <%=bean.getProperty()%> 와 같다
[4] forward : 특정 페이지로 요청을 전달(다른 페이지로 이동)
- page : 웹어플리케이션내의 특정 자원의 주소
[5] include : 특정 페이지를 현재 페이지에 포함
(참고) 변수의 범위 설정 (scope 설정)
- page : 하나의 jsp 페이지내에서만 유효
- request : 하나의 요청에 대한 응답 jsp 페이지(들)에 유효
- session : 사용자에 대해 유효(웹브라우져 단위)
- application : 하나의 웹 어플리케이션 전체 유효
3. Java Beans
(1) Beans 의 정의
- 넓은 의미 : 자바 컴포넌트(기능덩어리)
- 좁은 의미 : 자바 컴포넌트 중에서 Beans 규약에 맞는 컴포넌트
(2) Beans 규약
<1> 기본 생성자 (default constructor) 존재해야한다.
<2> 속성(property)을 지정(private)
- 속성이름은 html의 <input> 태그의 이름과 같아야 한다.
<3> 속성을 세팅하거나 접근할 수 있는 get/set메소드(public)
- 첫번째 문자는 대문자로 ex) getName, setName
(3) 종류
<1> 비주얼 컴포넌트 빈즈(JSP와 상관없음) ex) TextField, Button
<2> 데이터 빈즈 (Data Beans) : 데이터를 담아두는 객체를 만드는 컴포넌트
<3> 서비스 빈즈 (연산이나 서비스 기능 Beans, Worker 빈즈)
4. JSP 디폴트 객체 (9개)
(1) 정의 : 객체를 따로 생성하지 않고 스크립트릿(<%%>) 사이에서 사용 가능한 객체들을 의미
(2) 종류
<1> application -- ServletContext
-> Web Application 전체의 정보를 가지는 객체
<2> config -- ServletConfig
-> 서블릿/JSP의 구성정보를 가지는 객체
<3> session -- HttpSession
-> 현재 사용자의 세션정보를 가지는 객체
<4> request -- HttpServletRequest
-> 클라이언트의 요청정보를 가지는 객체
<5> response -- HttpServletResponse
-> 클라이언트에게 줄 응답정보를 가지는 객체
<6> page -- Object(this)
-> JSP 현재 페이지 자신을 의미하는 객체
<7> pageContext -- PageContext(Custom Tag에서 봅니다)
-> 다른 디폴트 객체들을 자바단에서 접근할 수 있는 방법을 가지는 객체
<8> out -- JspWriter
-> 클라이언트의 브라우져에 연결된 출력 객체
<9> exception -- JspException
-> 에러처리 관련 객체
5. JSP의 라이프 사이클
jspInit() --> _jspService() --> jspDestroy()
6. EL (Expression Language)
(1) 스크립팅을 전혀 쓰지 않을 수 있는 최신 기술
(2) 내장객체 ${map.name}
<1> pageScope
<2> requestScope
<3> sessionScope
<4> applicationScope
<5> param HTTP의 파라미터들 Map
<6> paramValues 하나의(name이 같은) 파라미터의 값들 Map
<7> header 헤더정보들 Map
<8> headerValues 하나의 헤더의 정보들 Map
<9> cookie 쿠키들 Map
<10> initParam 컨텍스트의 초기화 파라미터들 Map
<11> pageContext jsp 내장객체 (Map 아니다)
(3) 도트(.) 연산자 사용의 특징
<1> .의 왼쪽은 Map 이나 Beans 타입이어야 한다.
<2> .의 오른쪽 항상 Map 의 키값이나 Beans 의 프로퍼티명이다.
(4) [] 연산자 사용의 특징 (${list["value"]})
<1> []의 왼쪽은 Map, Beans, 배열, List 타입이 올 수 있다.
<2> []안의 값은 문자열일 경우 키값, 프로퍼티명, 인덱스가 온다.
<3> []안의 값이 숫자인 경우는 그냥 인덱스로 인식되는데, 문자여도 숫자형식이면 괜찮다.
<4> []안은 계속해서 중첩이 가능하다. ${list[list2[0]]}
(5) EL은 연산자들을 사용할 수 있다.
<1> 산술연산자 : + - * /(div) %(mod)
<2> 논리연산자 : &&(and) ||(or) !(not)
<3> 관계연산자 : ==(eq) !=(ne) <(lt) >(gt) <=(le) >=(ge)
(6) 예약어들 : true, false, null, instanceof(향후 사용 예정), empty(null 혹은 "" 비었는지 체크)
7. JSTL (JSP Standard Tag Library)
(1) 설치 : apache -> jakarta -> taglib 에서 다운로드 standard
<1> jstl.jar, standard.jar 파일을 톰캣의 lib 폴더나 쓰고싶은 어플리케이션의 WEB-INF/lib 폴더에 넣어준다.
<2> (1.0) *.tld 파일들을 WEB-INF/tld 폴더에 넣는다.
<3> (1.0) web.xml에 설정을 잡는다.
<taglib>
<taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri>
<taglib-location>/WEB-INF/tld/c.tld</taglib-location>
</taglib>
<taglib>
<taglib-uri>http://java.sun.com/jsp/jstl/fmt</taglib-uri>
<taglib-location>/WEB-INF/tld/fmt.tld</taglib-location>
</taglib>
</jsp-config>
x, sql 도 있다.
(2) 코어 라이브러리
<1> 수식 : catch, out, remove, set
<2> 제어흐름 : choose, when, otherwise, forEach, forTokens, if
<3> URL 관리 : import, param, redirect, url
8. 보안
(1) 보안의 4요소
<1> 인증(Authentication) : ID와 패스워드를 확인하여 인증된 사용자인지 검증하는 작업
<2> 인가(Authorization) : 접근 가능한 자원인지를 판단하고 확인하는 작업
<3> 비밀보장(Confidentiality) : 인증된 사용자만이 특정한 자원에 접근할 수 있다는 개념
<4> 데이터무결성(Data Integrity) : 전송되는 데이터가 안전하다는 개념(암호화된 데이터 전송)
(2) 실제 Tomcat 에서 적용방식 (web.xml, server.xml)
<1> Authentication (인증 : 사용자 검증)
a. BASIC : 기본적인 인증방식, 데이터를 BASE64 인코딩화
b. DIGEST : 전송 데이터의 암호화
c. FORM : jsp 의 form 을 통해서 인증하도록 설정
<input type="text" name="j_username" />
<input type="password" name="j_password" />
</form>
d. CLIENT-CERT : 클라이언트 컴퓨터의 인증서로 인증하는 방식 ex) web.xml
<auth-method>BASIC</auth-method>
</login-config>
<2> Authorization (인가 : 인증된 사용자만 자원에 접근 가능)
<auth-constraint> 를 이용해서 role 정보를 추가해주면 해당 role의 유저만 resource 에 접근할 수 있게 된다.
web.xml security-constraint 태그 참조
<3> 데이터 무결성과 비밀보장
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
web.xml 에 설정을 잡고, 서버별 SSL(Secure Socket Layer)
관련 설정을 잡아줘야 하고, 인증키를 가지고 있어야 한다.
인증키에는 JKS(Java KeyStore), PKCS11 or PKCS12(인터넷 표준 혹은 Microsoft key-manager) 가 쓰인다.