Spring 프레임워크를 사용하면서 XML
파일을 통해 빈을 와이어링 하거나 값 주입 등 프로젝트를 설정할 수 있다.
메이븐 설정. 메이븐이 pom.xml
에 명시된 dependency를 다운받아 프로젝트 라이브러리에 추가해줌
웹 어플리케이션은 반드시 하나의 web.xml
파일을 가져야 함(WEB-INF
폴더 내)
파일에 작성되는 내용은 다음과 같다.
자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 (자바)프로그램 혹은 그 사양
주로 서비스 처리를 위한 데이터 준비 작업과 메소드 호출 역할
web.xml 파일에서 설정하기
<servlet>
: 설정하려는 서블릿 등록. 하위에 <servlet-name>
, <servlet-class>
필수
<load-on-startup>
: 클라이언트 요청이 없더라도 웹 서비스 구동시 서블릿 객체 생성 및 대기, 태그 안 숫자로 우선순위 설정(낮을수록 우선순위 높음)
<servlet-mapping>
: <servlet-name>
에서 지정한 이름의 서블릿을 브라우저에서 요청된 논리적인 서블릿으로 매핑
<url-pattern>
: 클라이언트가 요청하는 논리적인 서블릿 이름 패턴
<display-name>
: external name of the servlet(servlet-name은 다른 태그에서 refer할 때 사용하므로 internal name이라고 보면 됨)
1) init-param: 서블릿(또는 상위 태그 서비스)에 변수를 전달할 때 사용. 지정한 서블릿 내에서만 사용 가능한 값(서블릿 태그 안)
2) context-param: 전역에서 사용 가능한 파라미터 값(독립된 위치)
HTTP 요청과 응답을 변경하기 위한, 재사용 가능한 코드(객체 형태로 존재)
e.g. 인증, 권한 체크
request --> filter --> 최종자원(Servlet, JSP 등)
최종자원 --> filter --> response
web.xml 파일에서 설정하기
<filter>
: 사용할 필터 설정
<filter-mapping>
: 특정 자원에 대해 필터를 매핑(e.g. url-pattern을 지정하여 해당하는 파일에 필터 적용)
특정 이벤트가 발생하면 지정된 로직을 실행하도록 함(이벤트 핸들링)
web.xml 파일에서 설정하기
<listener>
: 리스너 등록
<listener-class>
리스너 하위 태그(반드시 하나 지정). 구현한 리스너 클래스를 패키지명 포함하여 지정
<component-scan>
: @Container, @Service, @Component 등 어노테이션을 붙인 클래스들을 스캔하여 빈으로 등록해주는 것
<context:component-scan base-package="com.rcod.lifelog, com.rcod.example"/>
base-package 하위의 anotated 클래스들이 모두 빈으로 등록됨
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
exclude-filter 사용 시 해당 어노테이션을 제외
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
기본값을 false로 주고 include-filter 사용해 특정 어노테이션만 스캔 가능
<aop:config>
<!-- 공통 로직 적용할 시점(메소드) 정의 -->
<aop:pointcut id="test"
expression="execution(* iutf.aop.sample.*(..))"/>
<aop:aspect ref="common">
<!-- Advice 작성 구간 -->
</aop:aspect>
</aop:config>
<aop:pointcut>
: aop 포인트컷 정의, advice가 적용될 지점을 id로 참조할 수 있도록
<aop:aspect>
: Advice 작성 구간(ref로 AOP Bean 호출)
<util:properties id="프로퍼티 ID" location="프로퍼티 경로 + 프로퍼티 파일명" />
위와 같이 xml 파일에 프로퍼티 등록 해놓고 다른 xml 파일 내에서
<property name="프로퍼티명" value="#{propetie id['프로퍼티 내의 변수명']}" />
이렇게 사용 가능
Java파일 내에서도 사용 가능(@Value 어노테이션)