85일차 JSP2

쿠우·2022년 7월 28일
0
  • Web Application 의 예외처리 방법 3가지 *
    방법1: page directive의 "isErrorPage"와 "errorPage" 속성을 이용한
    예외처리 (방금 우리가 한 방법)
    - "JSP 전용" 예외처리 방식

    아래 방법2,3은 Web Application "공통" 예외처리 방식
    방법2: web.xml 에 예외처리 설정하는 방식(HTTP status code기반)
    방법3: web.xml 에 예외처리 설정하는 방식(예외타입 기반)


  • 내장객체의 사용과 동일한 장점
    1) 표준 액션 태그
    2) 커스텀태그 -> 후에 JSTL로 연결된다.

-표준액션태그

  • JSP 컨테이너에서 제공하고 있는 기본 태그
  • 태그 라이브러리 이름
    => 같은 이름의 태그들의 경우 모호성을 없애기 위해 관련 있는 태그들을 하나로 묶고, 묶은 단위로 이름을 부여한다.
    => 표준 액션태그는 jsp로 이미 정해져있다.
    => <jsp:~~> 이런식으로 사용

    <jsp:useBean /> : 자바빈(JavaBeans) 컴포넌트를 사용하기 위한 액션태그
    <jsp:setProperty /> : 자바빈 인스턴스에 데이터를 저장하기 위한 액션태그
    <jsp:getProperty /> : 자바빈 인스턴스에서 데이터를 얻기 위한 액션태그
    <jsp:include /> : 제공된 JSP파일을 삽입하기 위한 액션태그
    <jsp:forward /> : 제공된 JSP파일로 forward하기 위한 액션태그
    <jsp:param /> : include 및 forward할 때 요청 파라미터를 추가하기 위한 태

-JSP 자바빈즈란

  • JSP의 표준 액션태그로 접근할 수 있는 자바 클래스
  • 하나의 JSP 페이지에 종속적으로 사용이 아닌 여러 JSP 페이지에서 사용된다.

장점
1 .폼데이터 처리 용이
-클라이언트 데이터를 태그 한번으로 추출해서 다른 페이지에서 참조할 수 있게 한다.
2. 자바빈즈 활용 확장용이
-HTTP 프로토콣 무상태 특성때문에 상태정보 유지기술이 필요하다 바로 그것이 자바빈즈
3. 컴포넌트 기반 구현가능

  • 비즈니스 로직을 컴포넌트로 만들어 재활용 가능, 효과적 구성 가능

규약

  • 패키지화 되어있어야함 (기본패키지에 있으면 안된다. )
    1) public 지정자가 아닌 멤버 변수를 갖는다. 일반적으로 private으로 지정해서 사용하고 프로퍼티(property)라고 부른다.
    2) getter 메소드와 setter 메소드를 갖는다.
    3) 인자없는 생성자가 반드시 존재해야 된다.
    4) 직렬화 객체이어야 된다. ( implements Serializable )
    (객체 직렬화란 기본형 데이터와 같이 입출력할 수 있도록 객체의 멤버들을 바이트 형태로 변환하여 입출력)

자바빈즈의 사용

  1. 생성
생성: new 연산자 처럼 새로운 객체를 생성한다.
id = 객체의 저장 변수명 / class = FQCN / type = 접근할 부모타입 / scope = 영역값 기본은 page
<jsp:useBean class ="org.zerock.myapp.HelloBean" id="hello" scope="request" >
  1. 가져오기
getter: 속성값을 얻어내기 
 property=속성명을 적는다 / name= 생성된 객체의 변수명을 적는다. useBean의 id
<jsp:getProperty  property="number" name="hello" />
  1. 수정하기
setter: 속성값 수정하기 
나머지는 get이랑 같고 value와 param 부분만  다르다. value 자유결정 param 참조결정 으로 생각하면 된다. 
<jsp:setProperty name="hello“ property="number”  value="값“ or param="다른 속성명" />

참고 : setter 부분에서 property = "*" 와일드 카드 사용은 매우 강력한 초기화 방법

-EL

  • EL은 데이터를 출력하기 위한 언어로서 문법이 직관적으로 사용하기 쉽게 구성
  • JSP에서는 변수를 출력할 때 변수선언과 초기화가 반드시 필요하지만 EL은 그러한 과정 없이 바로 사용이 가능하고 null값 처리가 쉽다
  • 다양한 형태로 저장된 데이터를 효율적으로 처리할 수 있는 장점(Map형식, List 형식, 배열 형식, 자바빈(JavaBeans)등)
  • ${ 객체명.속성명 } 이런형태로 쓰는 표현식
  • EL표현식에서 문자로 사용가능한 타입은 논리,숫자, 문자열, null 데이터타입
  • 연산자나 예약어는 검색해서 사용해라 (기본적으로 어떤 것이 있다는 것만 알고)

EL의 내장객체 (다 이름과 값을 저장하는 map 객체로 되어있음)

  • JSP처럼 내장객체를 지원하므로 필요한 객체는 내장객체의 참조변수이름으로 곧바로 사용가능
  • 어떤 정보를 추출할지 생각하고 내장객체를 사용하면 정보추출이 용이해진다!!!
  • 동일명의 변수를 가진 영역별 내장객체에 대해 실행 순서는 request - session - application 객체순서이다.


-커스텀 태그

  • taglib 지시어
    taglib 지시어는 JSP에서 외부 라이브러리로 만든 태그(tag)를 지정할 때 사용하는 방법이
    다. 대표적으로 JSTL(JSP Standard Tag Library)이 제공된다. 기본적인 문법은 다음과 같으며 외부 라이브러리의 설정 정보를 가진 uri속성과 태그의 네임스페이스를 가진 prefix 속성을 갖는다.

-JSTL

  • 자주 사용하는 커스텀태그들을 묶어서 만든 표준 라이브러리
  • JSTL은 servlet과 JSP 에 따라 버젼이 나눠져 있음.
  • http://jakarta.apache.org 여기서 왼쪽메뉴 Taglibs 에서 알맞은 버젼을 선택하여 다운하고 WEB-INF/lib에 위치시키면 자동인식

- JSTL 라이브러리

  • JSTL 라이브러리를 사용하기 위해서는 반드시 다음과 같이 taglib 지정자를 이용하
    여 uri 속성값과 prefix 속성값을 설정해야 된다.
    <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

주로 사용하는 라이브러리 위주로 보면

1)JSTL Core 라이브러리

-JSTL에서 기본적이고 핵심적인 기능들을 구현해 놓은 라이브러리

-기본액션

(1)<c:set> 태그

  • JSP 페이지에서 사용하는 변수를 설정하는 태그

<c:set var="변수명" value="변수값" target="객체" property="객체의 프라퍼티" scope="scope값" />

  • 변수의 값(value)을 EL 형태로 지정가능
  • scope 속성의 기본 값은 page

(2) <c:out> 태그

  • JSP페이지에 데이터를 출력하기 위해 사용하는 태그
    <c:out value="출력값“ default="value 없을 때 기본값” escapeXml="true|false“ />
    escapeXml: ture일때 <, >, &, ‘ , “ 같은 특수문자들을 특수문자 코드(" 이런식)로 변환한다.

(3)<c:remove> 태그

  • <c:set> 태그로 정의한 변수를 삭제하는 태그
    <c:remove var="변수명“ scope="scope값” />
  • scope가 일치하지 않으면 제거되지 않는다

(4) <c:catch> 태그

  • JSP 페이지 내에 발생한 오류를 처리하는 태그
    <c:catch var="e"> 실행문 </c:catch>
    e = 실행문 사이에서 발생한 Exception 객체가 저장되는 변수

-조건액션

(1)<c:if> 태그

  • if문장을 처리하기 위한 태그
    <c:if test="조건식" var="변수명" scope="scope값"> 문장 </c:if>
  • test속성에는 EL표기법을 사용
  • var 속성에는 조건처리한 결과가 저장된다.

(2) <c:choose> , <c:when> , <c:otherwise> 태그

<c:choose> = 조건식을 여러개를 처리 할 때 감싸준다.
<c:when> = 자바 문법에서 switch ~case 또는 if ~else 와 같은 기능을 함
<c:otherwise> = switch 문에서 default 또는 if-else문에서 마지막 else 의 기능을 하는 태그

<c:choose> 
 <c:when test="조건“>문장<c:when>
 <c:when test="조건“>문장<c:when>
 <c:otherwise>문장</c:otherwise>
</c:choose>

-반복액션

(1)<c:forEach> 태그

  • 반복 처리시 사용하는 태그로서 자바의 for문과 비슷함

  • 객체들의 collection을 수행할 경우 ( items="객체명")

<c:forEach items="객체명" begin="시작 인덱스" end="끝 인덱스" step="증가값" var="변수명" varStatus="other변수" >
문장
</forEach>
  • 지정된 횟수만큼 반복을 수행할 경우

<c:forEach begin="시작 인덱스" end="끝 인덱스" step="증가값" var="변수명" varStatus="other변수" >문장</forEach>

(2)<c:forTokens> 태그

  • 자바의 StringTokenizer 클래스를 이용한 반복처리에 사용
<c:forTokens items="객체명" delims="구분자" begin="시작 인덱스" 
 end="끝 인덱스" step="증가값" var="변수명" varStatus="other변수" >
 문장
</forTokens>
  • delims 속성에는 토큰(문자열)을 구분할 구분자를 지정한다. delims 속성값을 기준으로 반복적으로 데이터를 얻음

-URL액션

(1)<c:import> 태그

  • 특정 페이지 처리결과를 현재페이지에 삽입하거나 변수에 저장하는 태그
<c:import url="삽입할 페이지의 URL" [context= "context"] 
 [var = "결과를 저장할 변수"] [scope="영역"] [charEncoding="받아올 때 인코딩설정"]>

<c:param> tag를 하위 tag로 사용하는 body내용

</c:import>

(2) <c:url> 태그

  • url 정보를 생성해주는 태그
<c:url value = "url 정보 지정"  [context= "context"] 
 [var = "결과를 저장할 변수"]  [scope="영역"]>
<c:param> tag를 하위 tag로 사용하는 body내용

</c:url>

(3)<c:param>

  • 다른 페이지와 관련된 작업을 할 때 파라미터를 전달하는 태그
    <c:param name="변수의 이름" value="저장되는 값">

(4)<c:redirect>

  • 현재 실행중인 페이지에서 다른페이지로 이동할 때 사용하는 태그
    '<c:redirect url="넘어갈 페이지 지정" [context = "context"]>'

2) JSTL formatting 라이브러리

  • 국제화/지역화는 다국어 처리와 관련되고 데이터 포맷은 날짜 및 숫자 처리와 관련
    된 기능을 가지고 있음.
    <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>

-i18n액션

-제품이나 서비스를 특정지역의 언어나 문화에 맞추는 작업을 쉽게할 수 있도록 계획하거나 이해하는 과정에 관한 기능
-미리 지정해두는 나라별 양식이라고 할까나 properties 확장자파일에 번들 지정하고 기타 태그를 이용해 살을 붙이거나 불러오는 것

(1)<fmt:setLocale> 태그

  • 지정된 locale은 resource bundle 과 format에 저장된다. / 각각의 로그인 사용자의 로케일을 관리
    <fmt:setLocale value ="언어코드_국가코드" scope="locale이 저장되는 범위">

(2)<fmt:setBundle> 태그

  • properties 확장자를 갖는 파일을 지정하기 위한 태그
  • 일반적으로 ‘리소스 번들’이라고 부르며 /WEB-INF/classes 폴더에 저장한다
  • 리소스 번들의 목적은 국제화/지역화 기능을 구현하기 위해서 사용
  • 여러 언어로 작성된 리소스 번들을 작성하고 JSP에서는 지역에 맞게 언어별로 특정 리소스 번들의 문자열을 얻어서 웹 브라우저에 출력하는 메커니즘

<fmt:setBundle basename="리소스 번들" var="메시지 저장할 변수명" scope="scope영역" />

  • basename 속성에는 리소스 번들값을 지정하고 저장 경로는 /WEB-INF/classes 폴더에 저장
    시켜야 된다
    <fmt:bundle> 도 있는데 같은 기능 쓸일 있으면 검색해서 사용

(3)<fmt:message> 태그

  • 리소스 번들에서 지정한 값들을 참조할 때 사용한다.
    <fmt:message key="key값" bundle="번들명" var="변수명" scope="scope영역" />

(4)<fmt:param>

-messege태그를 동적으로 parameter를 지정할때 사용하는 태그 (몸체로 들어감) (나중에 검색해서 사용)
<fmt:param value="messageParameter"/>
value : properties 파일의 숫자 부분에 대체될 값을 지정한다는데 이해가 살짝안감.. ㅠ

(5) <fmt:requestEncoding> 태그

-데이터 전송하는 폼에서 사용하는 인코딩 타입을 지정
<fmt:requestEncoding value="인코딩“ />

-숫자, 날짜 액션

(1)<fmt:formatNumber> 태그

  • 숫자,퍼센트, 현재 통화 등 수치 데이터를 특정 포맷으로 설정시 사용되는 태그이다.
<fmt:formatNumber value="실제 수치값" type="숫자,퍼센트,통화" pattern="사용자가 지정한 형식패턴" 
currencySymbol="통화 기호" maxIntegerDigits="정수의 최대자리수" minIntegerDigits="최소자리수"
 maxFractionDigits="소수점 이하 최대 자리수" minFractionDigits="소수점 이하 최소" var="변수명" scope="영역" />

grpoupingUsed( ,. 등 숫자 표현할 구분자 넣는 속성) 등 속성이 더 있다.

(2)<fmt:formatDate> 태그

-날짜 데이터를 특정 포맷으로 설정시 사용되는 태그
<fmt:formatDate value="실제 날짜와 시간" type=" time|date|both 중 하나" dateStyle="날짜 표현 형식"
timeStyle="시간 표현 형식" pattern="사용자가 지정한 형식패턴" var="변수명" scope="scope영역"/>

(3)<fmt:parseNumber> , <fmt:parseDate> 태그

-지정한 형식으로 변경하고 저장하는 태그

profile
일단 흐자

1개의 댓글

comment-user-thumbnail
2022년 7월 28일

내용이 너무 많다..

답글 달기