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버전이다)!
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 |