*액션 태그
- 액션 태그란?
액션(Action) 태그
- JSP에서 객체 생성과 공유, 페이지 이동과 전달, 태그 파일 작성 등에 필요한 기능을 제공하는 일종의 커스텀 태그
- 표준 액션이라고도 불리며 커스텀 태그 기반이지만 별도의 taglib 지시어 사용 없이 jsp 접두어 사용 jsp 접두어를 사용함
- JSP에서 프로그램적인 요소를 많이 구현하거나 컨트롤러로 활용할 때 유용함
- JSP 파일에서 커스텀 태그의 구조적인 특징을 살려 HTML 형태로 프로그램 요소를 처리할 수 있기 때문에 간편함
- 주요 액션 태그
- 자바 빈
자바 빈(Java Bean)
- 자바의 재활용 가능한 컴포넌트 모델
- 웹 개발에만 국한된 개념이 아니며 POJO라고 하는 단순한 구조를 가짐
- POJO(Plain Old Java Object) : 특정 기술이나 프레임워크에 종속되지 않고 기본 생성자와 멤버 변수에 대한 getter/setter 메서드를 제공하고 직렬화할 수 있는 자바 클래스를 의미
- 예시 : 엔티티 클래스 혹은 DO(Data Object)는 기본적으로 테이블 칼럼에 해당하는 private 멤버 변수와 getter/setter 메서드로 구성할 수 있음
자바 빈 구조의 특징
- 인자가 없는 생성자(기본 생성자)로 구성됨
- 파일 혹은 네트워크를 통해 객체를 주고받을 수 있는 직렬화 구조가 가능함
- getter, setter 메서드를 통해 멤버 변수(속성)에 접근함
회원 관리를 위한 Member 클래스 자바 빈 구조
- getter/setter 메서드의 이름: 'get / set + 대문자로 시작되는 변수명' 형태
- 인자를 받아 현재 멤버 변수에 값을 대입하거나 현재 값을 리턴하는 구조
- 물론 메서드 내에서 추가적응로 필요한 기능을 구현할 수 있으며 이러한 구조는 객체지향에서 캡슐화의 한 형태이기도 함
- useBean 액션
useBean 액션
- JSP에서 자바 빈 객체를 생성하거나 참조하기 위한 액션
- 매우 유용하지만 JSP를 단순히 뷰 역할로만 사용한다면 사용할 일은 없음
useBean의 기본적인 동작 방식
- useBean을 이용해 만든 객체의 범위는 지정하는 속성인 scope에 주어진 id의 객체가 있는지 확인한다.
- 객체가 없다면 새로 객체를 생성하고 해당 scope에 저장한다.
useBean 액션의 기본 구문과 사용 예
- id : 자바 빈을 특정 scope에 저장하거나 가져올 때 사용하는 이름 (현재 페이지에서는 해당 인스턴스를 참조하기 위한 변수명이 됨)
- scope : 해당 클래스 타입의 객체를 저장하거나 가지고 오는 범위로 내장객체의 일부
- class : 생성하거나 참조하려는 객체의 클래스 명(반드시 패키지명까지 명시해야하며, 추상클래스나 인터페이스 사용 불가능)
- type : 특정 타입의 클래스를 명시할 때 사용 (추상 클래스나 인터페이스, 일반 클래스가 될 수 있으며 class 속성의 클래스에서 상속 혹은 구현이 이루어져야 함)
- beanName:type과 beanName 사용을 통해 class 속성을 대체할 수 있음
- useBean 의 활용
useBean을 주로 활용하는 경우
- HTML 폼에서 입력한 값을 자바 객체로 연동할 때 주로 활용
- ex) 회원 가입 페이지에서 아이디, 이름, 전화번호, 주소 등 여러 정보를 입력하고 가입하는 경우 (입력값을 받아 Member 객체에 넣고 이를 데이터베이스에 저장하기 위한 메서드 호출에 인자로 전달해야 함
- include, forward 액션
Include 액션
- 다른 페이지를 포함한다는 점에서 include 지시어와 동일하지만 처리과정에서 차이가 있음
- include 지시어 : include된 파일 구조를 모두 포함해 하나의 파일로 컴파일한 다음 처리
- include 액션 : include된 파일을 각각 호출해 처리된 결과만 포함해 보여줌
- include 액션을 사용하여 'main.jsp'에 'header.jsp'를 포함시킨 경우
- 'main.jsp'를 호출하면 'header.jsp'의 실행 결과가 포함되어 출력됨
forward 액션
- 클라이언트 요청을 다른 페이지로 전환하는 액션
- 리디렉션(response.sendRedirect())과 기능적으로 유사하지만 내부적으로 차이가 있음
- 리디렉션 : 서버가 클라이언트에게 새로운 페이지로 다시 접속하도록 응답 보냄 => 응답 받은 클라이언트가 새 페이지에 접속
- forward 액션 : 클라이언트가 새롭게 접속하는 것이 아니라 서버에서 내부적으로 새로운 페이지로 이동 => 그 페이지의 내용을 클라이언트에게 응답으로 전달
- 단순한 페이지 이동이 필요한 경우 - 리디렉션이 적합
- 최초 request를 유지하거나 request의 setAttribute()로 속성값을 저장하고 이를 유지하면서 페이지를 이동하는 경우 - forward 액션이 적합
- include 액션과 마찬가지로 파라미터의 추가 가능
*커스텀 태그와 EL
- 커스텀 태그란?
커스텀 태그(Custom Tag)
- 사용자 정의 태그
- 스크립트릿 사용 줄이고 태그와 같은 형태로 프로그램 코드 대체 / 재활용 가능한 구조를 통해 태그 라이브러리로 활용하고자 개발된 규격
- 외형적인 형태는 XML(HTML) 태그 구조 / 서블릿 형태로 변환될 때 자바 코드로 변경되어 통합됨
- taglib 지시어 사용 => 커스텀 태그 어디에 정의되어 있는지 먼저 선언 / 태그에 사용할 접두어 지정
- 커스텀 태그 자체가 서버에서 해석되는 구조
- 프로젝트가 특정 커스텀 태그에 종속될 수 있다는 문제 때문에 직접 만드는 방식 줄고 있음
- 대신 커스텀 태그 기술 기반의 JSTL(JSP Standard Tag Library)이 자바 웹 개발에 꼭 필요한 요소가 됨
커스텀 태그의 예시
- 특정 상품 코드를 전달하면 상품에 대한 세부 정보를 출력하기
<%@ taglib tagdir="/WEB-INF/tags" prefix="m" %>
<m:printData pid="87459989" />
- 태그 파일로 정의된 커스텀 태그를 사용하며 'WEB-INF/tags/printData.tag' 파일로부터 태그 정의를 가지고 옴
- m은 태그 앞에 붙일 접두어로 태그 파일명이 태그 이름이 됨
- EL 이란?
표현 언어(Expression Language, EL)
- 주로 EL이라 불림
- 현재 페이지의 자바 객체 혹은 scope object에 저장된 자바 빈 객체를 손쉽게 접근하고 사용할 수 있게 함
- 데이터를 표현하기 위한 용도로 설계되었지만 제한된 객체 참조, 해당 객체의 메서드 호출도 가능
- 단순한 출력 외에도 사칙연산, 비교연산, 논리연산, 3항 연산 등을 지원
- 연산 기능 - 핵심 로직의 구현보다 상황에 따라 출력값을 변경하는 정도의 용도로 사용하는 것이 좋음
EL의 장점
- 간단한 구문으로 손쉽게 변수 / 객체를 참조할 수 있음
- 데이터가 없거나 null 객체 참조할 때 에러 발생하지 않음
자바 빈 접근
- EL을 통해 scope object에 저장된 자바 빈 객체를 참조하는 방법
${저장이름, 변수명}
- 앞의 자바 빈 설명에서 만든 Member 클래스의 멤버 정보에 접근하기
- 컨트롤러에 의해 session에 저장하는 과정이 있었다고 가정
<h2>멤버 정보</h2>
이름 : ${m, name} <br>
EL을 사용하지 않는 경우
- 표현식 사용
이름: <%= m,name %> <br>
- <jsp:getProperty> 액션으로 출력 가능
이름: <jsp.getProperty name="m" property="name" /> <br>
EL 연산
- 기본적인 사칙연산, 비교연산, 논리연산, 3항 연산 가능
배열, 맵 데이터 연동
- 참조하는 객체가 배열이나 맵 형태인 경우 다음과 같이 사용
Scope Object 접근
- EL은 기본적으로 모든 scope에서 자바 빈 객체를 찾음
- 만일 특정 scope만을 대상으로 참조하려면 '내장객체명Scope.속성이름' 으로 사용
- ex) session과 request 모두에 'm'이라는 이름으로 저장된 객체가 있다고 할 때, request scope에 있는 객체를 참조하려면 다음과 같이 사용할 수 있음
*JSTL
- JSTL이란?
JSTL(JSP Standard Tag Library)
- JSP에서 스크립트릿(자바 코드 블록)을 사용하지 않고 HTML 형식을 유지하면서 조건문, 반복문, 간단한 연산과 같은 기능을 손쉽게 사용할 수 있도록 지원하기 위해 만들어진 표준 커스텀 태그 라이브러리
- 서버에서만 해석할 수 있는 구조로 인해 디자이너와의 협업에 불편
- 개발 과정에서 UI확인을 위해 서버를 통해야만 하는 비효율적인 문제가 있음
- 뷰 중심의 JSP구현에는 core정도만 사용됨
- JSTL 라이브러리 설치
- JSTL은 표준 규격으로만 존재하기 때문에 개발에 적용하기 위해 실제 구현된 라이브러리 필요
- Apache Standard Taglib 주로 사용
JSP 사용
- JSTL을 JSP에서 사용하려면 taglib 지시어를 추가해야 함
- 다음에 나올 core 라이브러리 사용을 위해 다음과 같이 작성
<%@ taglib prefix="c" url="http://java.sun.com/jsp/jstl/core" %>
- core 라이브러리
core 라이브러리
- 변수 처리, 흐름 제어, URL 관리, 출력 등 가장 기본적인 기능을 구현해둔 라이브러리
<c:if>
- 자바의 if문과 유사하지만 else는 지원하지 않음
- 조건 테스트를 위해 속성을 참조할 범위(Scope)를 지정할 수도 있지만 필수 사항은 아님
- 사용형식
- 사용예시
<c:forEach>
- 화면에 데이터를 반복해서 출력할 때 사용
- 자바의 for문과 같은 개념
- 커스텀 태그 특성상 정밀한 설정은 불가능
- 진행 상태 확인을 위해 index, count 등을 지원하는 varStatus를 제공
- var: 배열, 리스트 등 집합형 객체
- varStatus: 반복 진행 상황을 참조하기 위한 객체
- 사용 형식
- 사용 예시
*Maven 기반 프로젝트 구성
- 빌드 도구
자바 빌드 도구
- Ant : 가장 오래된 자바 빌드 도구
- Maven: 2004년 아파치 프로젝트로 등장
- 절대 다수가 사용하는 자바 빌드 도구이며 특히 스프링 프레임워크 개발에서 기본 빌드 도구로 사용
- Gradle : 시간이 지남에 따라 좀 더 유연하면서도 복잡한 처리 쉽게 하기 위한 요구사항 증대로 등장
- 안드로이드 앱 개발의 기본 빌드 도구
- Maven과 Gradle
Maven과 Gradle의 설정 방식
- Maven: 빌드 설정을 'pom.xml' 파일에 작성
- XML 구조이기 때문에 프로젝트 커질수록 스크립트 내용 길어지고 가독성 떨어짐
- Gradle: Groovy라고 하는 JVM 기반 언어를 통해 프로그램 구조로 설정
- 따라서 훨씬 적은 양의 스크립트로 짧고 간결하게 작성 가능
다중 프로젝트
- Maven: 다중 프로젝트에서 특정 설정을 다른 모듈에서 사용하려면 상속을 받아야 함
- Gradle: 설정 주입 방식을 사용하여 다중 프로젝트에 적합
- 리포지터리
개발환경
- 안드로이드 프로젝트는 기본적으로 Gradle 사용
- 스프링 프레임워크 기반 프로젝트는 Maven, Gradle 중 선택
- 이클립스는 Maven 친화적 / IntelliJ는 Gradle에 친화적
빌드 도구를 사용하는 주요 목적
- 컴파일 / 실행 설정과 라이브러리 설정 ( 이 중에서도 라이브러리 설정은 꼭 알아두어야 함)
- 꼭 필요한 핵심 라이브러리만 설정 파일에 등록해두면 해당 라이브러리에서 필요로 하는 다른 라이브러리는 자동으로 함께 설치되기 때문에 신경 쓸 필요 없음
리포지터리
- 이러한 라이브러리를 통합 보관하는 일종의 저장소
- 설정 파일의 내용을 참고해 해당 라이브러리를 글로벌 저장소 -> 로컬 저장소로 다운로드한 다음 프로젝트에 복사하는 과정을 거쳐 사용
- 해당 라이브러리가 로컬 저장소에 있다면 인터넷에서 다운로드하지 않고 바로 사용 가능
- 필요에 따라 개발 회사가 자신들에게 필요한 라이브러리만 저장하거나 자체 라이브러리 저장을 위한 저장소를 두고 사용하기도 함
'개발 공부 > Java' 카테고리의 다른 글
[JSP/스프링] - 데이터베이스와 JDBC (0) | 2024.01.10 |
---|---|
[JSP/스프링] - MVC 패턴의 이해 (0) | 2024.01.09 |
[JSP/스프링] - JSP의 기초 (0) | 2024.01.05 |
[JSP/스프링] - 서블릿의 이해 (0) | 2024.01.04 |
[JSP/스프링] - 자바 웹 개발 개요 (0) | 2024.01.04 |