<JSP 정리>

Web/JSP 정리 2010. 2. 18. 13:55

<<<<<<<<<<<<<<<<<<<<< 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에 설정을 잡는다.

 <jsp-config>
     <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 을 통해서 인증하도록 설정

<form method="post" action="j_security_check">
     <input type="text" name="j_username" />
     <input type="password" name="j_password" />
</form>

             d. CLIENT-CERT : 클라이언트 컴퓨터의 인증서로 인증하는 방식   ex) web.xml

<login-config>
     <auth-method>BASIC</auth-method>
</login-config>

      <2> Authorization (인가 : 인증된 사용자만 자원에 접근 가능)
             <auth-constraint> 를 이용해서 role 정보를 추가해주면 해당 role의 유저만 resource 에 접근할 수 있게 된다.
             web.xml security-constraint 태그 참조
      <3> 데이터 무결성과 비밀보장

  <user-data-constraint>
   <transport-guarantee>CONFIDENTIAL</transport-guarantee>
  </user-data-constraint>

  web.xml 에 설정을 잡고, 서버별 SSL(Secure Socket Layer)
  관련 설정을 잡아줘야 하고, 인증키를 가지고 있어야 한다.
  인증키에는 JKS(Java KeyStore), PKCS11 or PKCS12(인터넷 표준 혹은 Microsoft key-manager) 가 쓰인다.

Posted by 미스터네오
,