스터디 발표 내용

9 Spring MVC 시작하기

비뀨_ 2021. 11. 14. 06:35
apply plugin: 'java'   
apply plugin: 'war'    

sourceCompatibility = 1.8
targetCompatibility = 1.8
compileJava.options.encoding = "UTF-8"

repositories {
    mavenCentral()
}

dependencies {
    providedCompile 'javax.servlet:javax.servlet-api:3.1.0'
    providedRuntime 'javax.servlet.jsp:javax.servlet.jsp-api:2.3.2-b02'
    compile 'javax.servlet:jstl:1.2'
    compile 'org.springframework:spring-webmvc:5.0.2.RELEASE'
}

task wrapper(type: Wrapper) {
    gradleVersion = '6.9.1'
}

 

Maven의 pom.xml 또는 build.gradle 중 자기가 쓸 것으로

웹 어플리케이션을 개발하는데 필요한 설정을 한다. 

 

그 뒤에 만들면서 테스트 해야하기 때문에 웹 서버를 할 톰캣 설치를 하고 등록한다.  ( 구글에 넘쳐나서 설명 안 함.)

 

스프링 MVC를 위한 설정 

1. 서버 설정

@Configuration
@EnableWebMvc //스프링 MVC 설정 활성화
public class MvcConfig implements WebMvcConfigurer {
	
    // 주소를 www.naver.com/로 주었을 때 올바르게 처리하기 위한 설정.
	@Override
	public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
		configurer.enable();
	}
	
    // 컨트롤러의 실행결과 보여주기 위한 설정
	@Override
	public void configureViewResolvers(ViewResolverRegistry registry) {
		registry.jsp("/WEB-INF/view/", ".jsp");
	}

}

 

스프링 MVC 를 사용하려면 설정이 엄청 미친듯이 많은데 ,

설정을 자동으로 해주는게 @EnableWebMvc 어노테이션이다. 라고 까지만 알고 있고 나중에 배움.

 

web.xml 에 DispatcherServlet 설정

MVC가 웹 요청을 처리하려면 DispatcherServlet을 통해서 웹 요청을 받아야한다.

이를 위해서 web.xml 파일에 DispatcherServlet을 등록한다.

더보기
<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee 
             http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
	version="3.1">

	<servlet>
		<servlet-name>dispatcher</servlet-name>
		<servlet-class>
			org.springframework.web.servlet.DispatcherServlet
		</servlet-class>
		<init-param>
			<param-name>contextClass</param-name>
			<param-value>
				org.springframework.web.context.support.AnnotationConfigWebApplicationContext
			</param-value>
		</init-param>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>
				config.MvcConfig
				config.ControllerConfig
			</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>dispatcher</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
    //인코딩 필터 , 매핑 생략

</web-app>

DispatcherServlet은 초기화 과정에서

contextConfiguration 초기화 파라미터에 지정한 설정 파일( 여기선 MvcConfig , ControllerConfig)을 이용해

컨테이너를 초기화한다. 

 

2. C : Controller 설정

 

//이게 컨트롤러다 라고 지정해주는 것.
@Controller
public class HelloController {
	///hello로 들어온 요청을 여기서 처리할거다라는 것
	@GetMapping("/hello")
	public String hello(Model model,
        //url 요청 ( get일 때에는 ) 에 name으로 된 값을 가져와서 String name에 넣겠다.
        @RequestParam(value = "name", required = false) String name) {
		
        //greeting이란 모델의 속성에 안녕하세요 + 이름을 넣겠다.
        model.addAttribute("greeting", "안녕하세요, " + name);
		return "hello";
	}
}

컨트롤러는 웹 요청을 처리하고 결과를 뷰에 전달하는 스프링 빈 객체이다.

 

@Configuration
public class ControllerConfig {

	@Bean
	public HelloController helloController() {
		return new HelloController();
	}

}

 컨트롤러를 구현했으면 컨트롤러를 스프링 빈으로 등록해서 관리되게 하자. 

 

HelloController를 실제 페이지로 생각해보면

위의 사진에서 url을 보면 naver.com/webtoon/list?titleId=748105이다.

해석해보면, 네이버 서비스고 , webtoon 프로젝튼데 ,

@GetMapping("/list") 이고(/list로 온 값을 처리하는 컨트롤러고),

titleId 라는 RequestParam의 파라미터로 748105의 값을 가지는 것이다.

 

3. V :  JSP 구현 ( 뷰 ) 

뷰는 사용자가 직접 만지게 되는 화면이다.

보통 스프링에서는 jsp나 thymeleaf 로 구현한다.