상세 컨텐츠

본문 제목

Spring을 이용한 MVC 구조 업그레이드

JAVA/Spring

by 영공쁘이 2021. 8. 7. 12:04

본문

spring framework

-> 기존 mvc모델에서 더 간단히 표현이 가능한 구조이다.

Spring은 Maven에서 MVC기반 라이브러리를 합친 것

그래서, STS라는 툴을 일단은 다운받기!(아직은 모름)~

핵심 개념 : 빈 - 컨테이너 - 3가지 수행 과정(서블릿매핑, 뷰 위치 잡기, 빈 등록)

1) 빈 : 상태 나 값이 없거나 늘 같은 객체(컨테이너의 각 개체)

2) 컨테이너:

3) 수행 과정

 

1 - 서블릿매핑 : 하는 방법( annotation(@ ~) - 3.0이상부터 지원이 되니 web.xml이 없어도 됨, 그 이상이면 web.xml 밖에 쓸 수 없다.)

톰캣 8.5는 웹모듈 3.1버전으로 해야한다!

지금은, web.xml에다가 서블릿매핑한다.

어노테이션은 그것을 바로 사용하고자 하기에는 코드 파일을 직접 봐야지 쓸 수 있다.(라이브러리는 클래스 파일이어서 텍스트되면 사라진다)

, web.xml은 코드 상관없이 설정할 수 있다.

그래서! web.xml에다가 ServletDispatcher를 해서 매핑을 하는 것이다.

web.xml을 해당 프로젝트에 적용시킬거면, webapp 밑에 WEB-INF밑에 놓으면 된다.

여기에다가 요청매핑을 한다. 아래의 것을 web.xml에 추가하기 그리고 이 소스는 무조건 <web-app> tag에 넣어야 한다.

<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으로 이러한 방식으로 하는구나! -->	
		</init-param>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>
				config.MvcConfig
				config.BeanConfig    <!-- 각 config패키지의 파일로 들어간다 -->
			</param-value>	
		</init-param>
		<load-on-startup>1</load-on-startup>
</servlet>
	<!--위에는 서블릿을 생성한거고 밑에는 이제 각 파일을 매핑할 수 있도록 서블릿 매핑시키기-->
	<servlet-mapping>
		<servlet-name>dispatcher</servlet-name>
		<url-pattern>/</url-pattern>   // jsp, java 파일 전체를 나타냄(서블릿이 전체 파일에 적용되는 것임) 즉, 전체 페이지에 매핑이 된다는
	</servlet-mapping>

그리고, 맵핑이 되어야 하니, pom.xml 페이지에, 아래를 추가

<dependency> 
  		<groupId>org.springframework</groupId> <!-- 회사이름 -->
  		<artifactId>spring-webmvc</artifactId> <!-- 모델명 -->
  		<version>5.0.2.RELEASE</version>  		
</dependency>

 

2 - 뷰 위치 잡기

MvcConfig 파일에(config 패키지 안에) 기입(이것은 1단계에서 서블릿을 생성하는 곳에 호출이 되는 파일이다.)

package config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.ViewResolverRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration  
@EnableWebMvc  // : mvc를 사용하겠다.
@ComponentScan(basePackages="com.stone")  //controller가 붙어있는거 다 찾아내라 & com밑에 stone 아래에 있는 파일들을 다 찾아내어, 매핑시켜라)
public class MvcConfig implements WebMvcConfigurer {

	@Override
	public void configureViewResolvers(ViewResolverRegistry registry) {
		registry.jsp("/WEB-INF/views/",".jsp"); // 이는, /WEB-INF/views/로 시작하고 .jsp로 끝나는 것
	}
	@Override
	public void addResourceHandlers(final ResourceHandlerRegistry registry) { 
//요청의 임의 처리 금지(만약, 아래의 코드가 없으면 서블릿에서는 이미지, js 등 파일 조차도 하나의 클래스로 다 들어가기 때문에
// 원하는 이미지가 안 나올 수 있다. 그러므로, 꼭 넣어야 하는 코드다.
		registry.addResourceHandler("/img/*.png").addResourceLocations("/img/"); 
		registry.addResourceHandler("/img/*.jpg").addResourceLocations("/img/"); 
		registry.addResourceHandler("/js/*.js").addResourceLocations("/js/");
 //이러한 요청이 오면 이거를 통해서 발견하고 나타내줘라(이것말고 바로 다운이 되는 것들은 리소스라고 부른다)	
	}
}

 

3 - 빈 등록(=매핑 객체 만들기)

package com.stone.mvc.contents_ui;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller //COntroller함으로써 bean으로 등록이 되는거다.
public class 내용보이기 {
	@RequestMapping("contents.do")
	public ModelAndView process(HttpServletRequest request, HttpServletResponse response) {
		ModelAndView mv = new ModelAndView();
		mv.setViewName("내용창");
		return mv;
	}
}

이런 식으로, 각 파일에 @Controller를 붙인다(그러면서 Bean으로 등록되는 것)

그리고, 해당 페이지로 이동하려면 @RequestMapping을 넣어서 움직이게 한다.

이렇게 하게 된다면 이전의 FrontController의 역할은 앞선 1-매핑 단계에서 다 하게되므로, 의미가 없어진다.

향후에는, FrontController가 없어질 것이고, 이와 같이 제공했던 ControlProvider 또한 없어질 것이다.

그리고, 동작을 수행하는 부가 항목들은(ModelAndView 등) springframework로 import 걸어주면 된다(수정!)

만약, 저 중에 하나라도 빼먹으면, No mapping~이라는 에러 메시지가 나온다. 그러므로, 하나하나 다 보고 특히 ComponentScan을 무조건 해야한다.

* 유의 사항 *

java facets 의 Dynamic web project 버전은 3.1이 되어야 함(그래야 톰캣 8.5가 작동을 할 수 있음)

java 는 1.8로 맞추기(jar가 8버전이다)!

'JAVA > Spring' 카테고리의 다른 글

Spring Boot File Upload  (0) 2021.08.07
DI DAO  (0) 2021.08.07
sts를 이용한 다양한 설정 확인(매핑 등의 설정)  (0) 2021.08.05
sts를 이용한 스프링 프레임 워크  (0) 2021.08.05
Spring을 이용한 MVC 구조 업그레이드  (0) 2021.08.05

관련글 더보기