- xml 설정파일에 직접 <bean> 태그로 등록 할 수 있지만 spring 3.0 이후부터는 대부분이 @(어노테이션)을 사용하게 된다.
- 스프링 mvc 프로젝트는 2개의 xml파일이 필요하다.
보통의 pojo객체를 관리하는 bean관리 xml, M
컨트롤러 bean을 관리하기 위한 xml. C
- 자바 빈 객체를 관리하는 xml은 톰캣 서버가 실행 될때 같이 실행 되어야 한다.
즉, 서버 실행과 동시에 spring 컨테이너가 같이 실행 되어야 한다.
- 서버가 실행 될 때를 감지하는 리스너와 spring bean 설정파일이 필요하다.
리스너는 스프링 라이브러리 안에 존재 하며, spring bean xml파일과 web.xml에 등록을 해야 한다.
-web.xml에 등록해야할 리스너와 xml설정파일 위치.
1
2
3
4
5
6
7
8 |
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param> |
- 이 코드의 뜻은 이렇다.
* 서버 웹 어플리케이션안의 contextConfigLocation라는 변수에 /WEB-INF/applicationContext.xml를 넣는다.
* 서버가 실행할 때 ContextLoaderListener리스너가 실행 된다.
* 리스너는 contextConfigLocation변수 안에 존재하는 설정 파일 패스와 이름을 호출하여 스프링 컨테이너를 실행 하게 된다.
- 톰캣 서버는 서블릿을 관리한다. 그 관리하는 권한을 스프링이 위임 받아야 한다.
- 스프링에는 모든 요청을 받아주는 서블릿이 있다. 그 서블릿으로 위임 하여야 한다.
-web.xml에 등록해야 할 서블릿.
1
2
3
4
5
6
7
8
9 |
<servlet>
<servlet-name>mvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping> |
- servlet-name의 값과 -servlet.xml 의 이름을 가진 xml 파일이 필요하다.
- mvc-servlet.xml
1
2
3
4
5
6
7
8
9
10
11
12 |
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd">
<context:component-scan base-package="com.Controller"></context:component-scan>
</beans> |
- 보통 여기에는 컨트롤러 객체를 관리하게 된다.
- 모든 컨트롤러는 여기에 등록 할 수 있지만 @어노테이션을 이용해 컨트롤러를 등록 할 수 있다.
하지만 @를 이용할 때는 context:component-scan 이라는 태그를 사용해야 한다.
이 태그는 어노테이션을 스캔할 패키지를 지정 한다.
-어노테이션을 사용하는 방법.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 |
@Controller
public class HelloController {
@Autowired
HelloService service;
@RequestMapping("/hello.do")
public String hello(Model model){
System.out.println("sfefd");
service.exe();
//포워딩 시키고 싶은 데이터는 메소드의 매개변수로 모델을 받으면 된다.
//모델에 속성을 추가하면 된다.
//이렇게 만들어진 모델은 리퀘스트의 생명 주기와 같다.
// 설정을 통해 어플리케이션, 세션으로 바꿀 수 있다.
//jsp에서 호출을 할 때는 EL을 사용하면 된다.
model.addAttribute("pw", "1234");
return "/WEB-INF/view/hello.jsp";
}
} |
@Controller, @Service, @Repository 는 @Component의 자식들이다.
@Controller 어노테이션은 등록을 해도 제 기능을 하지 못한다.
* 요청할 주소 매핑이 필요하다. @RequestMapping("/hello.do") 부분.
실행 할 메소드에 붙게 되는데 메소드의 리턴 내용에 보여줄 jsp 주소가 들어간다.
* 서비스를 호출한다면 @Autowired가 필요하다.
서비스를 맴버 변수로 가지고 위에 @가 붙는다.
@Autowired뒤에 constructor(생성자), byType 혹은 byName(setter)를 설정하는 것이 들어 갈 수 있다.
물론 해당하는 것이 있어야 한다. 아무것도 붙지 않으면 자동으로 생성된다.