반응형
01. 어노테이션기반의 SpringMVC의 장점
- 하나의 객체 내 다수의 메소드로 작성 (하나의 요청에 대한 하나의 메소드) 가능
- 어노테이션을 통해 수동 매핑을 이용함
- 어노테이션기반의 SpringMVC로 작성하면 handlerMapping 객체를 Spring Bean으로 등록하지 않아도 됨
- 요청 처리 클래스에서 사용한 어노테이션이 클라이언트에 처리 가능한 형태로 자동으로 매핑되기 때문
- Command 패턴이 아님
- 즉, 하나의 Model 객체에는 하나의 요구사항에 따른 하나의 메소드( handleRequest(request,response) )만 작성하는 것이 아니라, 다수의 요구사항에 따른 다수의 메소드로 작성 가능
02. 스프링빈 환경설정파일 (Spring Bean Configuration File)
💖[servlet-context.xml]
- 기본 네임스페이스가 beans가 아닌 mvc가 기본이 됨
- Spring 프레임워크가 자동으로 만들어줌
<?xml version="1.0" encoding="UTF-8"?>
<!-- 기본네임스페이스 : mvc -->
<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>"
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>">
<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
<!-- servlet-context.xml : appServlet 이름의 Front Controller에서 사용될 클래스의 Spring
Bean을 등록하기 위한 Bean Configuration File -->
<!--1.<annotation-driven/>-->
<!-- annotation-driven : @Controller 어노테이션을 사용하여 요청 처리 클래스를 Spring Bean으로
등록하고 @RequestMapping 어노테이션을 사용하여 작성된 메소드를 요청 처리 메소드로 등록하여
클라이언트 요청에 의해 요청 처리 클래스의 메소드가 호출되어 처리되도록 설정하는 엘리먼트 -->
<!-- => HandlerMapping 객체를 만들지(사용하지) 않아도 요청 처리 클래스의 요청 처리 메소드가
클라이언트의 요청에 의해 호출되도록 자동으로 매핑 처리 -->
<annotation-driven />
<!--2.<resources>-->
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<!-- resources : 클라이언트의 요청을 Front Controller가 직접 응답 처리되도록 설정하는 엘리먼트 -->
<!-- 즉, 요청처리메소드(Model)을 이용하지 않으므로 매핑처리 안하고 응답됨 -->
<!-- => 클라이언트의 리소스 파일 요청에 대한 응답 처리를 위해 사용하는 엘리먼트 -->
<!-- mapping 속성 : 클라이언트에 의해 요청되는 리소스 파일의 요청 URL 주소 패턴을 속성값으로 설정 -->
<!-- [**] 패턴문자를 속성값으로 사용한 경우 현재 폴더 및 하위 폴더의 웹자원 요청 가능 -->
<!-- location 속성 : 클라이언트에 의해 요청에 의해 리소스 파일을 검색하기 위한 폴더를 속성값으로 설정 -->
<!-- 클라이언트가 [/resources/** : resources 폴더 밑에 있는 모든 URL 주소]로 요청하면 [/resources/]밑에 있는 파일을 찾아서 응답할게~ -->
<!-- <resources mapping="/resources/**" location="/resources/" /> -->
<!-- 클라이언트가 [/images/**]로 요청하면 [/resources/images/] 밑에서만 찾아서 응답할게~ -->
<resources mapping="/images/**" location="/resources/images/" />
<!-- 클라이언트가 [/css/**]로 요청하면 [/resources/css/] 밑에서만 찾아서 응답할게~ -->
<resources mapping="/css/**" location="/resources/css/" />
<!-- 클라이언트가 [/js/**]로 요청하면 [/resources/js/] 밑에서만 찾아서 응답할게~ -->
<resources mapping="/js/**" location="/resources/js/" />
<!--3.<beans> - InternalResourceViewResolver & UrlBasedViewResolver-->
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<!-- InternalResourceViewResolver -->
<!-- [JSP 문서로 응답]하기 위해 필요한 InternalResourceViewResolver 객체 -->
<!-- InternalResourceViewResolver 클래스를 Spring Bean으로 등록 -->
<!-- => InternalResourceViewResolver 객체 : 클라이언트 요청에 의해 호출되는 요청 처리 메소드의 반환값(ViewName)을 제공받아 응답 가능한 JSP 문서로 변환하여 반환하는 객체 -->
<!-- => prefix 필드 : 반환값(ViewName) 앞에 붙을 값 -->
<!-- => suffix 필드 : 반환값(ViewName) 뒤에 붙을 값 -->
<!-- => ex) /WEB-INF/views/hello.jsp-->
<!-- => ex) /WEB-INF/views/result_display.jsp-->
<!-- => ex) /WEB-INF/views/model_display.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>
<!-- UrlBasedViewResolver -->
<!-- [외부의 뷰프로그램으로 응답]하기 위해 필요한 UrlBasedViewResolver 객체 -->
<!-- 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 객체는 반드시 우선순위 속성값을 설정헤야함 -->
<!-- => 필드에 저장된 정수값이 적을수록 우선순위가 높게 설정 -->
<!-- => 순위에 따라 1순위부터 처리하고, 처리못하면 2순위 -> 처리못하면 3순위.. 가 처리래줌 -->
<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>
<!--4.<component-scan>-->
<!-- component-scan: 스프링 컨테이너가 스프링 어노테이션을 검색하여 처리하기 위한 엘리먼트-->
<!-- base-package 속성 : 스프링 어노테이션을 검색하기 위해 어노테이션을 사용한 클래스의 패키지를 속성값으로 설정 -->
<!-- => xyz.itwill.controller 안에 요청처리 클래스들 만들면 됨-->
<!-- <context:component-scan base-package="xyz.itwill.controller" /> -->
<!-- 아래의 3개는 Spring Bean으로 등록하는 것을 권장!! -->
<!-- => controller, dao, service -->
<!-- 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" />
<!-- 내가 만든 것 아니고 남들이 만든 것은 @어노테이션보다 Bean 엘리먼트를 사용하는 것이 나음 -->
</beans:beans>
03. log4j.xml 수정
- 콘솔에 info레벨 이상으로 기록하기위해 log4j.xml 수정
반응형
'framework > spring mvc' 카테고리의 다른 글
[springMVC] 7. 요청 처리 메소드에 의해 처리된 결과를 뷰(JSP 문서)에 제공하는 방법 (0) | 2024.08.04 |
---|---|
[springMVC] 6. Front Controller에 의해 JSP 문서로 포워드 이동하여 응답되도록 뷰이름을 제공하는 방법 @RequestMapping (0) | 2024.08.04 |
[springMVC] 4. 스키마 기반의 SPRING MVC (0) | 2024.08.03 |
[springMVC] 3. 웹프로그램으로 만들기 위해 필요한 환경설정파일 (web.xml) (0) | 2024.08.02 |
[springMVC] 2. Spring의 MVC 패턴 동작의 이해를 위한 MVC 프레임워크 직접 구현 (0) | 2024.08.02 |