반응형
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="<http://www.springframework.org/schema/mvc>"
xmlns:xsi="<http://www.w3.org/2001/XMLSchema-instance>"
xmlns:beans="<http://www.springframework.org/schema/beans>"
xmlns:context="<http://www.springframework.org/schema/context>"
xmlns:tx="<http://www.springframework.org/schema/tx>"
xmlns:aop="<http://www.springframework.org/schema/aop>"
xsi:schemaLocation="<http://www.springframework.org/schema/mvc> <https://www.springframework.org/schema/mvc/spring-mvc.xsd>
<http://www.springframework.org/schema/beans> <https://www.springframework.org/schema/beans/spring-beans.xsd>
<http://www.springframework.org/schema/context> <https://www.springframework.org/schema/context/spring-context.xsd>
<http://www.springframework.org/schema/aop> <http://www.springframework.org/schema/aop/spring-aop.xsd>
<http://www.springframework.org/schema/tx> <http://www.springframework.org/schema/tx/spring-tx.xsd>">
<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
<!-- servlet-context.xml : appServlet 이름의 Front Controller에서 객체로 사용될 클래스를
Spring Bean으로 등록하기 위한 Spring Bean Configuration File -->
- <annotation-driven />
<!-- Enables the Spring MVC @Controller programming model -->
<!-- annotation-driven : @Controller 어노테이션을 사용하여 요청 처리 클래스를 Spring Bean으로
등록하고 @RequestMapping 어노테이션을 사용하여 작성된 메소드를 요청 처리 메소드로 등록하여
클라이언트 요청에 의해 요청 처리 클래스의 메소드가 호출되어 처리되도록 설정하는 엘리먼트 -->
<!-- => HandlerMapping 객체를 사용하지 않아도 요청 처리 클래스의 요청 처리 메소드가
클라이언트의 요청에 의해 호출되도록 자동으로 매핑 처리 -->
<annotation-driven />
- <resources>
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<!-- resources : 클라이언트 요청을 Front Controller가 직접 응답 처리되도록 설정하는 엘리먼트 -->
<!-- => 클라이언트의 리소스 파일 요청에 대한 응답 처리를 위해 사용하는 엘리먼트 -->
<!-- mapping 속성 : 클라이언트에 의해 요청되는 리소스 파일의 요청 URL 주소 패턴을 속성값으로 설정 -->
<!-- => [**] 패턴문자를 속성값으로 사용한 경우 현재 폴더 및 하위 폴더의 리소스 파일 요청 가능 -->
<!-- location 속성 : 클라이언트 요청에 의해 리소스 파일을 검색하기 위한 폴더를 속성값으로 설정 -->
<!-- <resources mapping="/resources/**" location="/resources/" /> -->
<resources mapping="/images/**" location="/resources/images/" />
<resources mapping="/css/**" location="/resources/css/" />
<resources mapping="/js/**" location="/resources/js/" />
- <beans> : InternalResourceViewResolver - 3rd
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<!-- InternalResourceViewResolver 클래스를 Spring Bean으로 등록 -->
<!-- InternalResourceViewResolver 객체 : 클라이언트 요청에 의해 호출되는 요청 처리 메소드의
반환값(ViewName)을 제공받아 응답 가능한 JSP 문서로 변환하여 반환하는 객체 -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
<beans:property name="order" value="3"/>
</beans:bean>
- <beans> : UrlBasedViewResolver - 2nd
<!-- UrlBasedViewResolver 클래스를 Spring Bean으로 등록 -->
<!-- UrlBasedViewResolver 객체 : 클라이언트 요청에 의해 호출되는 요청 처리 메소드의
반환값(ViewName)을 제공받아 Spring Framework가 제공하는 ViewResolver 객체가 아닌
외부의 뷰프로그램의 이용하여 응답 처리하는 객체 -->
<!-- => 뷰이름으로 응답하기 위한 뷰를 커스터마이징 할 때 사용하는 객체 -->
<beans:bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<!-- viewClass 필드에 뷰프로그램을 구현한 클래스를 인젝션 처리 -->
<beans:property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView"/>
<!-- order 필드에 ViewResolver 객체의 우선순위 관련 정수값을 인젝션 처리 -->
<!-- => 다수의 ViewResolver 객체를 이용할 경우 모든 ViewResolver 객체는 반드시 우선순위 설정 -->
<!-- => 필드의 저장된 정수값이 적을수록 우선순위가 높게 설정 -->
<beans:property name="order" value="2"/>
</beans:bean>
<!-- TilesConfigurer 클래스를 Spring Bean으로 등록 -->
<!-- TilesConfigurer 객체 : TilesView 프로그램의 응답관련 정보를 저장한 Tiles 환경설정파일을 제공하기 위한 객체 -->
<beans:bean class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
<!-- definitions 필드에 List 객체를 생성하여 인젝션 처리 -->
<!-- => List 객체의 요소로 Tiles 환경설정파일(XML)의 경로를 추가하여 제공 -->
<beans:property name="definitions">
<beans:list>
<beans:value>/WEB-INF/spring/appServlet/tiles.xml</beans:value>
</beans:list>
</beans:property>
</beans:bean>
- <beans> : BeanNameViewResolver - 1st
<!-- 특정 클래스의 메소드를 호출해 명령어로 응답!! - 기존에 사용하던 ViewResolver는 JSP 문서로 응답했음 -->
<!-- BeanNameViewResolver 클래스를 Spring Bean으로 등록 -->
<!-- => BeanNameViewResolver 객체 : 요청 처리 메소드에서 반환되는 문자열(ViewName)을 제공받아 같은 이름(beanName)의
객체(Spring Bean)의 실행 메소드를 호출하여 클라이언트에게 응답하는 객체 -->
<!-- => JSP 문서를 이용하여 응답하지 않고 메소드의 명령을 실행하여 응답 처리 -->
<!-- => 반드시 JSP 문서로 응답되는 ViewResolver 객체보다 우선순위를 높도록 설정 -->
<!-- 무조건 1순위!!! -->
<!-- => 실행메소드 : 일종의 자바 main 메소드와 동일한 기능 -->
<!-- => ex) 프린트기능 , 문서롤 PDF로 만드는 기능, 다운로드 기능, 동영상재생 기능 .. -->
<!-- => ex) 유튜브 : 클릭 시 유튜브 회사에서 만든 동영상 재생 프로그램이 실행되어 재생되는 것! -->
<beans:bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
<beans:property name="order" value="1"/>
</beans:bean>
<!-- BeanNameViewResolver 객체에 의해 실행될 클래스를 Spring Bean으로 등록 -->
<!-- => 요청 처리 메소드의 반환값(ViewName)과 Spring Bean의 식별자(BeanName)이 같아야
Front Controller에 의해 객체의 실행 메소드를 호출하여 응답 처리 -->
<beans:bean class="xyz.itwill10.util.FileDownload" id="fileDownload"/>
- <component-scan> : package 내
<!-- component-scan : 스프링 컨테이너가 스프링 어노테이션을 검색하여 처리하기 위한 엘리먼트 -->
<!-- base-package 속성 : 스프링 어노테이션을 검색하기 위해 어노테이션을 사용한 클래스의 패키지를 속성값으로 설정 -->
<!-- <context:component-scan base-package="xyz.itwill.controller" /> -->
<!-- xyz.itwill10.controller 패키지에 요청 처리 클래스(Model)를 작성하고 스프링 어노테이션을 이용하여 Spring Bean으로 등록 -->
<context:component-scan base-package="xyz.itwill10.controller" />
<!-- xyz.itwill10.dao 패키지에 DAO 클래스를 작성하고 스프링 어노테이션을 이용하여 Spring Bean으로 등록 -->
<context:component-scan base-package="xyz.itwill10.dao" />
<!-- xyz.itwill10.service 패키지에 Service 클래스를 작성하고 스프링 어노테이션을 이용하여 Spring Bean으로 등록 -->
<context:component-scan base-package="xyz.itwill10.service" />
- <tx:advice> : 트랜잭션 정책 수립
- 트랜잭션매니저가 COMMIT 이나 ROLLBACK할 수 있는 트랜잭션 정책 설정하기
- (ex. add라는 이름으로 시작되는 메소드에서 예외가 발생되면 롤백처리해주세요)
- 단점 - 정책이 바뀌면 클래스의 메소드들도 다 변경되어야함, 반대로 메소드가 변경되면 정책도 다시 설정해야함 매우 불편!!!! 어노테이션 이용하자!!! 다 주석처리할게~
<!-- TransactionManager를 사용하여 트랜잭션 처리를 하기 위해 tx 네임스페이스로 spring-tx.xsd
파일의 엘리먼트를 사용할 수 있도록 설정 -->
<!-- advice : TransactionManager 관련 Spring Bean을 Advisor로 설정하기 위한 엘리먼트 -->
<!-- Advisor : 삽입위치(JoinPoint)가 정해져 있는 횡단관심코드의 메소드가 작성된 Advice
클래스로 생성된 객체(Spring Bean) -->
<!-- id 속성 : advice 엘리먼트를 구분하기 위한 식별자를 속성값으로 설정 -->
<!-- transactionManager 속성 : TransactionManager 관련 클래스의 Spring Bean의 식별자
(BeanName)을 속성값으로 설정 - [root-context.xml]에 id값에 의해 자동완성됨 -->
<!-- => 롤백처리와 커밋처리에 대한 설정이 저장된 TransactionManager 객체 제공 -->
<!-- attributes : TransactionManager 객체에 의해 처리될 메소드 목록을 설정하기 위한 엘리먼트-->
<!-- method : TransactionManager 객체에 의해 트랜잭션 처리될 메소드와 방식을 설정하기 위한 엘리먼트 -->
<!-- name 속성 :TransactionManager 객체에 의해 트랜잭션 처리될 메소드의 이름을 속성값으로 설정 -->
<!-- => 메소드 이름에 [*] 패턴문자를 사용하여 설정 가능 -->
<!-- rollback-for 속성 : ROLLBACK 명령이 실행될 예외를 속성값으로 설정 -->
<!-- read-only 속성 : false(기본) 또는 true(읽기전용이니 autoCommit하면되요!) 중 하나를 속성값으로 설정 -->
<!-- => 해석) add라는 이름으로 시작되는 메소드에서 예외가 발생되면 롤백처리해주세요! , setAutoCommit 기능이 무조건 false임 -->
<!-- => 해석) get라는 이름으로 시작되는 메소드는 select명령이므로 롤백이 필요없으니 setAutoCommit 기능이 무조건 true true임 -->
<!-- => 단점) 정책에 따라 name을 설정해줘야함!! 불편!! -->
<!--
<tx:advice id="txAdvisor" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="add*" rollback-for="Exception"/>
<tx:method name="modify*" rollback-for="Exception"/>
<tx:method name="remove*" rollback-for="Exception"/>
<tx:method name="get*" read-only="true"/>
</tx:attributes>
</tx:advice>
-->
- <aop:config> : 정책을 적용할 대상 설정
- 일반적으로 Service패키지에 있는 모든 클래스의 모든 메소드가 트랜잭션 정책을 따르게 만들긴 함
<!-- SpringAOP 기능을 사용하여 target 메소드 호출 시 TransactionManager 객체가 동작되도록 설정 -->
<!-- SpringAOP 기능을 사용하기 위해 aop 네임스페이스로 spring-aop.xsd
파일의 엘리먼트를 사용할 수 있도록 설정 -->
<!-- advisor : 삽입위치가 지정된 Advisor 클래스의 객체를 제공받기 위한 엘리먼트 -->
<!-- advice-ref 속성 : advice 엘리먼트의 식별자를 속성값으로 설정 -->
<!-- => 해석) [xyz.itwill10.service패키지의 모든 클래스]의 모든 메소드가 호출될 때 -->
<!--
<aop:config>
<aop:advisor advice-ref="txAdvisor" pointcut="execution(* xyz.itwill10.service..*(..))"/>
</aop:config>
-->
- <interceptors>
<!-- Interceptor 관련 클래스를 Spring Bean으로 등록 -->
<beans:bean class="xyz.itwill10.util.AdminAuthInterceptor" id="adminAuthInterceptor"/>
<beans:bean class="xyz.itwill10.util.LoginAuthInterceptor" id="loginAuthInterceptor"/>
<!-- interceptors : interceptor 엘리먼트를 등록하기 위한 엘리먼트 -->
<interceptors>
<!-- interceptor : 인터셉터 기능을 제공하기 위한 규칙을 설정하는 엘리먼트 -->
<!-- 1. 관리자가 아닌 사용자가 요청할 경우 동작될 인터셉터 -->
<interceptor>
<!-- mapping : 인터셉터가 동작될 요청 페이지의 URL 주소를 설정하는 엘리먼트 -->
<!-- path 속성 : 요청 URL 주소를 속성값으로 설정 -->
<mapping path="/userinfo/write"/> <!-- 클라이언트가 [/userinfo/write]를 요청하면~ -->
<mapping path="/userinfo/modify"/> <!-- 클라이언트가 [/userinfo/modify]를 요청하면~ -->
<mapping path="/userinfo/remove"/> <!-- 클라이언트가 [/userinfo/remove]를 요청하면~ -->
<!-- ref : 인터셉터 기능을 제공할 객체(Spring Bean)를 설정하는 엘리먼트 -->
<!-- bean 속성 : Spring Bean의 식별자(beanName)을 속성값으로 설정 -->
<beans:ref bean="adminAuthInterceptor"/> <!-- 이 인터셉터가 동작될거야~ -->
</interceptor>
<!-- 2. 비로그인 사용자가 요청할 경우 동작될 인터셉터 -->
<interceptor>
<!-- 인터셉터 기능을 제공할 요청 URL 주소에는 [*] 패턴문자 사용 가능 -->
<!-- [*] : 현재 폴더의 모든 요청 페이지, [/**] : 현재 폴더 및 하위 폴더의 모든 요청 페이지 -->
<!--<mapping path="/*"/>-->
<!--<mapping path="/**"/>-->
<mapping path="/userinfo/*"/>
<!-- exclude-mapping : 인터셉터 기능을 제공하지 않기 위한 요청 URL 주소를 설정하는 엘리먼트 -->
<exclude-mapping path="/userinfo/login"/>
<!--
<mapping path="/userinfo/list"/>
<mapping path="/userinfo/view"/>
-->
<beans:ref bean="loginAuthInterceptor"/>
</interceptor>
</interceptors>
- <beans> : CommonsMultipartResolver
<!-- 파일 업로드 기능을 제공하는 클래스를 Spring Bean으로 등록 -->
<!-- => 주의) Spring Bean의 식별자(beanName)을 반드시 multipartResolver로 설정 -->
<beans:bean class="org.springframework.web.multipart.commons.CommonsMultipartResolver" id="multipartResolver">
<!-- maxUploadSize 필드에 최대 업로드 파일의 제한 용량(Byte)을 주입 -->
<beans:property name="maxUploadSize" value="20971520"/>
<!-- defaultEncoding 필드에 전달값에 대한 문자형태(캐릭터셋)을 주입 -->
<beans:property name="defaultEncoding" value="utf-8"/>
</beans:bean>
</beans:beans>
반응형
'framework > spring mvc 웹사이트제작법' 카테고리의 다른 글
[springMVC웹] 8. 로그구현체 환경설정파일 - log4j.xml & log4jdbc.log4j2.properties (0) | 2024.08.05 |
---|---|
[springMVC웹] 7. Mybatis Framework 관련 환경설정파일 - mybatis-config.xml (0) | 2024.08.05 |
[springMVC웹] 5. DAO 클래스 작성에 필요한 클래스를 Spring Bean으로 등록 - root-context.xml (0) | 2024.08.05 |
[springMVC웹] 4. 웹프로그램으로 만들기 위해 필요한 환경설정파일 - web.xml (0) | 2024.08.05 |
[springMVC웹] 3. 메이븐 라이브러리 환경설정파일 - pom.xml (0) | 2024.08.05 |