스프링 환경설정을 위한 방법은 자바와 XML이 있다. 전 게시글은 XML이고 이번은 자바소스를 사용한 환경설정이다.
Step 1. Update pom.xml with Spring and Servlet dependency
maven-war-plugin 선언을 주의해서 보자. web.xml 파일을 완전히 제거할 거기 떄문에,
war package를 build하기 위한 maven 실패를 피하기 위해서, 우리는 이 환경설정이 필요하다.
두번째 변화는 JSP/Servlet/Jstl dependencies의 포함이다. 이것은 우리가 servlet api’s and jstl view 를 우리 코드에서
사용하기 위해선 필요하다. (일반적으로 컨테이너는 이미 이 라이브러리를 포함하고 있음)
추가적으로 maven-compiler-plugin은 우리가 사용하려는 jdk-version 을 추가(이 예제는 1.6 사용)
이것이 존재하지 않으면 이클립스 내에서 mvn_update를 해야함( 이클립스는 기본적으로 1.5)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.websystique.springmvc</groupId> <artifactId>Spring4MVCHelloWorldNoXMLDemo</artifactId> <packaging>war</packaging> <version>0.0.1-SNAPSHOT</version> <name>Spring4MVCHelloWorldNoXMLDemo Maven Webapp</name> <properties> <springframework.version>4.0.6.RELEASE</springframework.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${springframework.version}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.1.0</version> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>javax.servlet.jsp-api</artifactId> <version>2.3.1</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> </dependencies> <build> <pluginManagement> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.2</version> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.4</version> <configuration> <warSourceDirectory>src/main/webapp</warSourceDirectory> <warName>Spring4MVCHelloWorldNoXMLDemo</warName> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </pluginManagement> <finalName>Spring4MVCHelloWorldNoXMLDemo</finalName> </build> </project
Step 2: Add Controller
ModelMap: [request.getAttribute()/request.setAttribute()]를 대체
String return 값 메소드는 view resolver(see spring-servlet.xml above에 있는 suffix and prefix 값과 조합된다.
package com.websystique.springmvc.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping("/")
public class HelloWorldController {
@RequestMapping(method = RequestMethod.GET)//value 값 생략 시, 클래스 위의 url 값 상속
public String sayHello(ModelMap model) {
model.addAttribute("greeting", "Hello World from Spring 4 MVC");
return "welcome";
}
@RequestMapping(value = "/helloagain", method = RequestMethod.GET)
public String sayHelloAgain(ModelMap model) {
model.addAttribute("greeting", "Hello World Again, from Spring 4 MVC");
return "welcome";
}
}
Step 3: Add View
welcome.jsp (WEB-INF/views/welcome.jsp
)에 컨트롤러에서 보내지는 model 값이 접근된다.
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!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=ISO-8859-1">
<title>HelloWorld page</title>
</head>
<body>
Greeting : ${greeting}
</body>
</html>
Step 4: Add Configuration Class
configuration class는 spring-servlet.xml 포함하고 있는 정보를 대체해 줄 수있는 자바소스
@Configuration:이 클래스가 @Bean으로 된 하나 이상의 bean methods를 스프링 컨테이너에 의해 관리받는 곳
@EnableWebMvc = mvc:annotation-driven in XML :@Controller anotation을 지원할 수 있게 해줌
@ComponentScan = xml에서 context:component-scan base-package="..."
package com.websystique.springmvc.configuration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.servlet.view.JstlView;
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.websystique.springmvc")
public class HelloWorldConfiguration {
@Bean
public ViewResolver viewResolver(){
InternalResourceViewResolver viewResolver =new InternalResourceViewResolver();
viewResolver.setViewClass(JstlView.class);
viewResolver.setPrefix("/WEB-INF/views/");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
}
Step 5: Add Initialization class
WebApplicationInitializer 부분은 web.xml에 정의되는 spring configuration 부분을 대체해주는 역할을 합니다.Servlet 3.0 Container startup 되는 동안, 이 클래스가 로드되고, onStartUp 메소드가 서블릿 컨테이너에 의해서 호출됩니다.
package com.websystique.springmvc.configuration;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;
import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;
public class HelloWorldInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext container) throws ServletException {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(HelloWorldConfiguration.class);
ctx.setServletContext(container);
ServletRegistration.Dynamic servlet = container.addServlet("dispatcher", new DispatcherServlet(ctx));
servlet.setLoadOnStartup(1);
servlet.addMapping("/");
}
}
위의 내용은 web.xml의 내용(spring-servlet.xml의 경로를 제공하고 있는)가 유사합니다.
[update: 위의 class를 더 간결하게 사용할 수 있는 AbstractAnnotationConfigDispatcherServletInitializer]
package com.websystique.springmvc.configuration;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class HelloWorldInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class>[] getRootConfigClasses() {
return new Class[] { HelloWorldConfiguration.class };
}
@Override
protected Class>[] getServletConfigClasses() {
return null;
}
@Override
protected String[] getServletMappings() {
return new String[] { "/" };
}
}
Step 6: Build and Deploy the application
명심해야 할 것은 Servlet 3.0 containers에 의존하는 WebApplicationInitializer와 같은 Spring java Configuration은 3.0이하의 servlet 선언을 사용하는 web.xml은 사용할 수 없기 때문에 우리의 application에서 web.xml을 제거해야함
번역:http://websystique.com/springmvc/spring-4-mvc-helloworld-tutorial-annotation-javaconfig-full-example/
'SPRING' 카테고리의 다른 글
Spring Batch- Read an XML file and write to a CSV file (0) | 2017.11.23 |
---|---|
Spring Batch- Read a CSV file and write to an XML file (0) | 2017.11.21 |
Spring 4 MVC REST Service Example using @RestController (0) | 2017.11.20 |
Spring4 MVC(기초 복습) (0) | 2017.11.16 |
하이버네이트 + Mysql(anotaion) 기초 잡기 (0) | 2017.11.15 |