ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 47일차 - 자바 웹 개발 (4)
    AI 솔루션 개발자과정(Java, Python) 2022. 12. 13. 17:16

    JSP 페이지 예외 처리하기

    JSP 페이지에서 오류가 발생하면 예외 처리 페이지를 이용해 예외를 처리할 수 있다.

    JSP 예외 처리 페이지는 먼저 예외 처리 JSP를 만든 후 디렉티브 태그 속성 중 isErrorPage 속성을 true로 설정한다.

    그리고 일반 JSP 페이지의 디렉티브 태그 속성 중 errorPage 속성을 예외 처리 페이지 이름으로 지정한다.

     

    이처럼 디렉티브 태그 속성을 통해 예외 처리 페이지를 만들 수 있다.

     

     

    JSP 실행 시 자주 발생하는 오류로는 404오류와 500오류가 있다.

    404 오류요청한 JSP 페이지가 없을 때 발생하는 오류이고, 500 오류컨테이너에서 JSP 페이지 처리 중에 오류가 발생할 때 표시되는 오류이다.

     

     

    web.xml 에서 xml로 각각의 에러 코드에 대한 예외 처리 페이지를 지정할 수 있다.

     

     

    자바 코드를 없애는 액션 태그

    JSP는 스크립트릿의 자바 코드를 제거하고 디자이너 입장에서 더 쉽고 편리하게 작업할 수 있는 태그 형태로 기능을 제공하게 되었고, 다음과 같은 액션 태그들로 자바 코드를 대신하게 되었다.

    이름 형식 설명
    인클루드 액션 태그 <jsp:include> 이미 있는 JSP를 현재 JSP에 포함하는 태그
    포워드 액션 태그 <jsp:forward> 서블릿에서 RequestDispatcher 클래스의 포워딩 기능을 대신하는 태그
    유즈빈 액션 태그 <jsp:useBean> 객체를 생성하기 위한 new 연산자를 대신하는 태그
    셋프로퍼티 액션 태그 <jsp:setProperty> setter를 대신하는 태그
    겟프로퍼티 액션 태그 <jsp:getProperty> getter를 대신하는 태그

     

     

    인클루드 액션 태그

    인클루드 액션 태그는 인클루드 디렉티브 태그처럼 화면을 분할해서 관리할 때 사용한다.

    인클루드 액션 태그를 이용하면 웹 사이트에서 공통적으로 사용하는 헤더, 내비게이션 바, 푸터 등을 재사용할 수 있다.

     

    인클루드 액션 태그의 형식은 다음과 같다.

    <jsp:include page="jsp페이지" flush="true or false">
    ...
    </jsp:include>

     

    인클루드 액션 태그와 인클루드 디렉티브 태그의 차이점은 다음과 같다.

    항목 인클루드 액션 태그 인클루드 디렉티브 태그
    기능 JSP 레이아웃 모듈화 JSP 레이아웃 모듈화
    처리 시간 요청 시간에 처리 JSP를 자바 코드로 변환 시 처리
    데이터 처리 방법 param 액션 태그를 이용해 동적 처리 가능 정적 처리만 가능
    포함된 JSP 자바 파일 변환 여부 포함되는 JSP가 각각 자바 파일로 생성 포함되는 JSP가 포함하는 JSP에 합쳐진 후 한 개의 자바 파일로 생성

     

    포워드 액션 태그

    서블릿에서 다른 서블릿으로 포워딩하는 방법에 RequestDispatcher를 이용하는 방법이 있다.

    하지만 포워드 액션 태그를 사용하면 자바 코드 없이 포워딩할 수 있다.

    또한 포워딩 시 다른 서블릿이나 JSP로 값을 전달할 수 있다.

     

    포워드 액션 태그의 형식은 다음과 같다.

    <jsp:forward page="포워딩할 JSP 페이지">
    ...
    </jsp:forward>

     

     

    uesBean, setProperty, getProperty 액션 태그

    화면을 작업하는 디자이너 입장에서는 클래스 객체의 속성에 접근할 때 자바의 getter나 setter를 사용하는 것보다는 태그를 사용하는 것이 더 쉽다.

     

    자바 빈은 웹 프로그램, 즉 Java EE 프로그래밍 시 여러 객체를 거치면서 만들어지는 데이터를 저장하거나 전달하는 데 사용한다. 

    자바의 DTO(Data Tranfer Object)클래스, VO(Value Object)클래스와 같은 개념이다.

     

    자바 빈의 특징은 다음과 같다.

    1. 속성의 접근 제한자는 private이다.
    2. 각 속성은 각각의 settre/getter를 가진다.
    3. 인자 없는 생성자를 반드시 가지며 다른 생성자도 추가할 수 있다.

     

    자바 코드로 이루어진 자바 빈을 자주 사용할 경우 화면이 복잡해진다는 단점이 있다.

    이러한 단점을 보완하기 위해 나온 것이 유즈빈 액션 태그이다.

     

    유즈빈 액션 태그는 JSP페이지에서 자바 빈을 대체하기 위한 태그로, 형식은 다음과 같다.

    <jsp:useBean id="빈 이름" class="패지키 이름을 포함한 자바 빈 클래스 [scope="접근범위"]/>

     

    id는 JSP 페이지에서 자바 빈 객체에 접근할 때 사용할 이름을 의미한다.

     

     

     

    useBean 액션 태그를 사용해 자바 코드를 사용하지 않고 자바 빈을 생성할 수 있지만, 여전히 빈 속성에 값을 설정할 때는 자바 코드에서 setter를 사용해야 한다.

    이 때 setPropertygetProperty 액션 태그를 사용한다.

     

    setProperty와 getProperty 태그의 특징은 다음과 같다.

    이름 정의 형식
    setProperty useBean의 속성에 값을 설정하는 태그 <jsp:setProperty name="자바 빈 이름" property="속성 이름" value="값" />
    - name : <jsp:useBean>액션 태그의 id 속성에 지정한 이름
    - property : 값을 설정할 속성 이름
    - value : 속성에 설정할 속성 값
    getProperty useBean의 속성 값을 얻는 태그 <jsp:getProperty name="자바 빈 이름" property="속성 이름" />
    - name : <jsp:useBean>액션 태그의 id속서에 지정한 이름
    - property : 값을 얻을 속성 이름

     

     

     

    표현 언어와 JSTL

    현재의 JSP 페이지는 스크립트 요소보다는 표현 언어JSTL을 사용해서 구현한다.

    표현 언어(Expression Language)는 자바 코드가 들어가는 표현식을 좀 더 편리하게 사용하기 위해 JSP 2.0부터 도입된 데이터 출력 기능이다.

     

    표현식에는 자바 변수나 여러 가지 자바 코드로 된 식을 사용하는데, 표현식의 자바 코드가 복잡해짐에 따라 JSP 2.0부터는 자바 코드로 출력하는 표현식을 대체하기 위해 표현 언어라는 것이 등장했다.

     

    표현 언어의 특징은 다음과 같다.

    1. 기존 표현식보다 편리하게 값을 출력한다.
    2. 변수와 여러 가지 연산자를 포함할 수 있다.
    3. JSP의 내장 객체에 저장된 속성 및 자바의 빈 속성도 표현 언어에서 출력할 수 있다.
    4. 표현 언어 자체 내장 객체도 제공된다.
    5. JSP 페이지 생성 시 기본 설정은 표현 언어를 사용할 수 없다.
    6. 페이지 디렉티브 태그에서는 반드시 isELIgnored=false로 설정해야 한다.

     

    표현 언어의 형식은 ${표현식 or 값}이다.

    자바스크립트의 템플릿 리터럴과 비슷한 구조를 가진다.

     

    표현 언어의 자료형과 연산자는 자바와 비슷한 구조를 가진다

    표현 언어에는 empty 연산자라는 것이 존재하는데, 이는 자바 빈의 속성이 값으로 설정되었는지 또는 List, Map같은 저장 객체에 값이 존재하는지를 판단하는 연산자이다.

     

    표현 언어 내장 객체

    JSP는 기본적으로 내장 객체들을 제공하지만, 이 객체들은 표현식에서만 사용할 수 있다.

    따라서 표현 언어에서는 따로 내장 객체들을 제공하지만, 이 객체들은 ${} 안에서만 사용할 수 있다.

    구분 내장 객체 설명
    스코프 pageScope JSP의 page와 같은 기능을 하고 page영역에 바인딩된 객체를 참조한다.
    requestScope JSP의 request와 같은 기능을 하고 requests에 바인딩된 객체를 참조한다.
    sessionScope JSP의 session와 같은 기능을 하고 session에 바인딩된 객체를 참조한다.
    applicationScope JSP의 application와 같은 기능을 하고 application에 바인딩된 객체를 참조한다.
    요청 매개변수 param request.getParameter() 메서드를 호출한 것과 같으며 한 개의 값을 전달하는 요청 매개변수를 처리한다.
    paramValues request.getParameterValues() 메서드를 호출한 것과 같으며 여러 개의 값을 전달하는 요청 매개변수를 처리한다.
    헤더 값 header request.getHeader() 메서드를 호출한 것과 같으며 요청 헤더 이름의 정보를 단일 값으로 반환한다.
    headerValues request.getHeader() 메서드를 호출한 것과 같으며 요청 헤더 이름의 정보를 배열로 반환한다.
    쿠키 값 Cookies 쿠키 이름의 값을 반호나한다.
    JSP 내용 pageContext pageContext 객체를 참조할 때 사용한다.
    초기 매개변수 initParam 컨텍스트의 초기화 매개변수 이름의 값을 반환한다.

     

Designed by Tistory.