: Enterprise application에서 필요로 하는 기능을 제공하는 프레임 워크.
: 스프링은 JEE(Java Enterprise Edition)가 제공하는 다수의 기능을 지원.
: 또한 JEE 뿐만 아니라 DI(Dependency Injection)나 AOP(Aspect Oriented Programming) 같은 기능도 지원.
: Annotaion (자동으로 DB 내용이 서버에 등록되는 것) 구현 가능.
: 경량 웹프로그래밍.
: MVC보다 Model과 Control 부분이 많이 줄어들기 때문에 소스코드가 간결하다.
: 의존관계가 있기 때문에 bean 클래스 같은 경우 알아서 정보를 set하고 get하는 기능이 있다.
: 또한 확장성이 좋다. (다른 언어들과 연동이 가능하다 - 외부 의존 모듈, 외부 jar파일 연동 가능)
- Spring DI
: 스프링의 주요 기능 중의 하나는 DI 패턴을 지원하는 것.
: 스프링 컨테이너는 빈 객체를 저장하고 있으며, 각 객체간의 의존 관계를 관리해 준다.
: 스프링 설정 파일을 이용한 의존 관계 설정을 위해서 applicationContext.xml이 필요하다. (스프링용 설정파일)
- Spring AOP
: 로깅모듈을 공통적으로 여러 모듈을 사용하는 코드가 있다면, 하나의 코드로 빼서 여러개가 그것을 참조할 수 있도록 하는 것.
: 대부분 중복 제거를 위해서 사용한다.
- http://www.springsource.org/download
- Spring 관련 jar 파일
- 스프링 MVC Hello World
1. 클라이언트의 요청을 받을 DispatcherServlet을 web.xml 파일에 설정.
2. 클라이언트의 요청을 처리할 컨트롤러를 작성
3. ViewResolver를 설정. ViewResolver는 컨트롤러가 전달한 값을 이용해서 응답 화면을 생성할 뷰를 결정.
4. JSP나 Velocity 등을 이용하여 뷰 영역의 코드를 작성.
5. 실행
: 사용이유 - 모듈을 이용해서 중복 코드를 제거하기 위해서
: 요청 -> DispatcherServlet 클래스가 해당 URI의 주소를 인식 -> 그에 따라 해당 컨트롤러를 작성 -> 이에따른 결과를 ModelAndView에 객체, 정보를 담아서 ViewResolver(어느 JSP를 보여줄 것인지 결정하는 것)에 전달
- Spring 관련 jar 파일 추가
- 이클립스에서 *.do 파일을 만들 수 없으므로 초반에는 *.html로 작업
: 아래 소스 코드 순서대로 호출되면서 요청이 처리됨
- /WebContent/WEB-INF/web.xml 소스
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:jsp="http://java.sun.com/xml/ns/javaee/jsp" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<servlet>
<servlet-name>helloworld</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>helloworld</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
</web-app>
- /WebContent/WEB-INF/helloworld-servlet.xml 소스
<?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:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<!-- Controller 작성 -->
<!-- HelloWorld.do가 들어오면 controller 클래스의 HelloWorld 실행 -->
<bean id="helloworld" name="/HelloWorld.html" class="controller.HelloWorld">
</bean>
<!-- Controller 실행 후 결과를 result할 jsp 페이지를 설정 -->
<bean id = "internalResolver"
class = "org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name = "viewClass"> <value>org.springframework.web.servlet.view.JstlView</value>
</property>
<property name="prefix">
<value>/jsp/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
</bean>
</beans>
- WebContent/HelloWorld.html 소스
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
시작
</body>
</html>
- /src/controller/HelloWorld.java 소스
package controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
public class HelloWorld {
@RequestMapping("/HelloWorld") // RequestMapping이 있어야 호출이 됨
// RequestMapping에 의해서 사용자가 요청을 실행하는 순간 실행되는 CallBack 메소드 - printHell()
public ModelAndView printHello(){
// model과 view를 동시에 지정 가능한 객체 선언
ModelAndView mav = new ModelAndView();
String data = "Hello World!! Hi Spring!!!";
// 결과를 보여줄 jsp 파일명을 설정 (helloworld.xml의 suffix에 .jsp를 설정해놨으므로 붙여주지 않아도 됨)
mav.setViewName("ResultHelloWorld");
// jsp로 떠넘길 데이터를 부착
mav.addObject("hellodata", data);
return mav; // bean 클래스에 선언한 ViewResolver 클래스를 호출
}
}
- /WebContent/jsp/ResultHelloWorld.html 소스
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<center>
<h2> 결과 </h2>
<!-- HelloWorld.java에서 받은 값 출력 -->
${hellodata}
</center>
</body>
</html>
- 결과