Web Application 의 예외처리 방법 3가지 *
방법1: page directive의 "isErrorPage"와 "errorPage" 속성을 이용한
예외처리 (방금 우리가 한 방법)
- "JSP 전용" 예외처리 방식
아래 방법2,3은 Web Application "공통" 예외처리 방식
방법2: web.xml 에 예외처리 설정하는 방식(HTTP status code기반)
방법3: web.xml 에 예외처리 설정하는 방식(예외타입 기반)
<jsp:useBean /> : 자바빈(JavaBeans) 컴포넌트를 사용하기 위한 액션태그
<jsp:setProperty /> : 자바빈 인스턴스에 데이터를 저장하기 위한 액션태그
<jsp:getProperty /> : 자바빈 인스턴스에서 데이터를 얻기 위한 액션태그
<jsp:include /> : 제공된 JSP파일을 삽입하기 위한 액션태그
<jsp:forward /> : 제공된 JSP파일로 forward하기 위한 액션태그
<jsp:param /> : include 및 forward할 때 요청 파라미터를 추가하기 위한 태
장점
1 .폼데이터 처리 용이
-클라이언트 데이터를 태그 한번으로 추출해서 다른 페이지에서 참조할 수 있게 한다.
2. 자바빈즈 활용 확장용이
-HTTP 프로토콣 무상태 특성때문에 상태정보 유지기술이 필요하다 바로 그것이 자바빈즈
3. 컴포넌트 기반 구현가능
- 비즈니스 로직을 컴포넌트로 만들어 재활용 가능, 효과적 구성 가능
규약
- 패키지화 되어있어야함 (기본패키지에 있으면 안된다. )
1) public 지정자가 아닌 멤버 변수를 갖는다. 일반적으로 private으로 지정해서 사용하고 프로퍼티(property)라고 부른다.
2) getter 메소드와 setter 메소드를 갖는다.
3) 인자없는 생성자가 반드시 존재해야 된다.
4) 직렬화 객체이어야 된다. ( implements Serializable )
(객체 직렬화란 기본형 데이터와 같이 입출력할 수 있도록 객체의 멤버들을 바이트 형태로 변환하여 입출력)
자바빈즈의 사용
생성: new 연산자 처럼 새로운 객체를 생성한다.
id = 객체의 저장 변수명 / class = FQCN / type = 접근할 부모타입 / scope = 영역값 기본은 page
<jsp:useBean class ="org.zerock.myapp.HelloBean" id="hello" scope="request" >
getter: 속성값을 얻어내기
property=속성명을 적는다 / name= 생성된 객체의 변수명을 적는다. useBean의 id
<jsp:getProperty property="number" name="hello" />
setter: 속성값 수정하기
나머지는 get이랑 같고 value와 param 부분만 다르다. value 자유결정 param 참조결정 으로 생각하면 된다.
<jsp:setProperty name="hello“ property="number” value="값“ or param="다른 속성명" />
참고 : setter 부분에서 property = "*" 와일드 카드 사용은 매우 강력한 초기화 방법
- JSTL 라이브러리를 사용하기 위해서는 반드시 다음과 같이 taglib 지정자를 이용하
여 uri 속성값과 prefix 속성값을 설정해야 된다.
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
-JSTL에서 기본적이고 핵심적인 기능들을 구현해 놓은 라이브러리
<c:set var="변수명" value="변수값" target="객체" property="객체의 프라퍼티" scope="scope값" />
<c:out value="출력값“ default="value 없을 때 기본값” escapeXml="true|false“ />
<c:remove var="변수명“ scope="scope값” />
<c:catch var="e"> 실행문 </c:catch>
<c:if test="조건식" var="변수명" scope="scope값"> 문장 </c:if>
<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>
반복 처리시 사용하는 태그로서 자바의 for문과 비슷함
객체들의 collection을 수행할 경우 ( items="객체명")
<c:forEach items="객체명" begin="시작 인덱스" end="끝 인덱스" step="증가값" var="변수명" varStatus="other변수" >
문장
</forEach>
<c:forEach begin="시작 인덱스" end="끝 인덱스" step="증가값" var="변수명" varStatus="other변수" >문장</forEach>
<c:forTokens items="객체명" delims="구분자" begin="시작 인덱스"
end="끝 인덱스" step="증가값" var="변수명" varStatus="other변수" >
문장
</forTokens>
<c:import url="삽입할 페이지의 URL" [context= "context"]
[var = "결과를 저장할 변수"] [scope="영역"] [charEncoding="받아올 때 인코딩설정"]>
<c:param> tag를 하위 tag로 사용하는 body내용
</c:import>
<c:url value = "url 정보 지정" [context= "context"]
[var = "결과를 저장할 변수"] [scope="영역"]>
<c:param> tag를 하위 tag로 사용하는 body내용
</c:url>
<c:param name="변수의 이름" value="저장되는 값">
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
-제품이나 서비스를 특정지역의 언어나 문화에 맞추는 작업을 쉽게할 수 있도록 계획하거나 이해하는 과정에 관한 기능
-미리 지정해두는 나라별 양식이라고 할까나 properties 확장자파일에 번들 지정하고 기타 태그를 이용해 살을 붙이거나 불러오는 것
<fmt:setLocale value ="언어코드_국가코드" scope="locale이 저장되는 범위">
<fmt:setBundle basename="리소스 번들" var="메시지 저장할 변수명" scope="scope영역" />
<fmt:bundle> 도 있는데 같은 기능 쓸일 있으면 검색해서 사용
<fmt:message key="key값" bundle="번들명" var="변수명" scope="scope영역" />
-messege태그를 동적으로 parameter를 지정할때 사용하는 태그 (몸체로 들어감) (나중에 검색해서 사용)
<fmt:param value="messageParameter"/>
value : properties 파일의 숫자 부분에 대체될 값을 지정한다는데 이해가 살짝안감.. ㅠ
-데이터 전송하는 폼에서 사용하는 인코딩 타입을 지정
<fmt:requestEncoding value="인코딩“ />
<fmt:formatNumber value="실제 수치값" type="숫자,퍼센트,통화" pattern="사용자가 지정한 형식패턴"
currencySymbol="통화 기호" maxIntegerDigits="정수의 최대자리수" minIntegerDigits="최소자리수"
maxFractionDigits="소수점 이하 최대 자리수" minFractionDigits="소수점 이하 최소" var="변수명" scope="영역" />
grpoupingUsed( ,. 등 숫자 표현할 구분자 넣는 속성) 등 속성이 더 있다.
-날짜 데이터를 특정 포맷으로 설정시 사용되는 태그
<fmt:formatDate value="실제 날짜와 시간" type=" time|date|both 중 하나" dateStyle="날짜 표현 형식"
timeStyle="시간 표현 형식" pattern="사용자가 지정한 형식패턴" var="변수명" scope="scope영역"/>
-지정한 형식으로 변경하고 저장하는 태그
내용이 너무 많다..