- Develop OS : Windows10 Ent, 64bit - WEB/WAS Server : Tomcat v9.0 - DBMS : MySQL 5.7.29 for Linux (Docker) - Language : JAVA 1.8 (JDK 1.8) - Framwork : Spring 3.1.1 Release - Build Tool : Maven 3.6.3 - ORM : Mybatis 3.2.8 |
스프링 MVC 프로젝트의 전체 동작 구조와 기본 설정 파일들에 대한 내용은 아래글을 참조하시면 됩니다.
[Spring/- 기본 상식] - 스프링(Spring) MVC 동작 구조 및 스프링 컨테이너
[ 컨트롤러 클래스 만들기 ]
간단히 클래스에다가 "@Controller" 어노테이션을 붙여주면 됩니다. 다만 주의할 점은 스프링 설정 파일에 등록된 패키지 안에서만 컨트롤러를 검색하니, 설정된 곳과 다른 패키지에 있는 컨트롤러를 작성할 때는 설정파일에도 추가를 해줘야 합니다.
* WEB-INF/spring/appServlet/servlet-context.xml 파일에 컨트롤러를 스캔할 경로 지정
<context:component-scan base-package="com.hsweb.springweb" />
* 클래스에 컨틀롤러 어노테이션 추가
@Controller
public class HomeController {
[ 요청 처리 메소드 만들기 ]
스프링의 컨트롤러에서는 "@RequestMapping" 어노테이션이 붙은 메소드가 요청 처리 담당입니다. 어노테이션에서 URL 매핑을 하면 되는데, 이 때 "/**"로 매핑하면 별도로 매핑한 URL을 제외한 모든 URL은 디폴트 메소드가 처리하게 됩니다.
- "/" : "IP:포트/context/" URL 매핑
- "/*" : "IP:포트/context/아무거나~" URL 매핑
- "/**" : "IP:포트/context/아무거나/아무거나/아무거나~" 모든 URL 매핑
만약 "/"로 매핑하면 딱 슬래시로 끝났을 때 주소가 매핑됩니다. 서블릿 매핑과 달리 그 뒤에 뭔가 주소가 더 있으면 매핑되지 않습니다. "/*"로 매핑해야 슬래시 뒤에 뭐가 오던 매핑됩니다. 하지만 이 경우도 뒷 주소에 슬레시가 하나 더 있으면 작동되지 않습니다. 어떤 주소건 간에 디폴트 메소드로 매핑하려면 "/**" 형식으로 매핑해줘야 합니다. 이 경우 다른 곳에서 매핑된 URL을 제외한 모든 URL을 처리해줄 수 있습니다.
메소드는 String 타입으로 지정해 JSP 파일의 컨텍스트 패스 이후 경로와 파일 이름(확장자 제외)을 리턴시킵니다. 그러면 Dispatcher가 받아서 다시 뷰 처리를 담당하는 빈(Bean) 객체에 넘겨 처리합니다. 그리고 GET방식과 POST 방식 중 어느 타입의 요청을 받아 처리할지 정해줄 수 있는데 만약 생략한다면 두 타입 모두 받아서 처리하게 됩니다.
JSP 파일의 루트 경로는 "WEB-INF/views" 폴더 입니다.
package com.hsweb.springweb;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class HomeController {
// 별도 매핑되지 않은 모든 요청을 처리, GET/POST 둘 다 처리
@RequestMapping(value = "/**")
public String home(Model model) {
return "home";
}
// /home URL에 대한 요청 처리
@RequestMapping(value = "/home", method = RequestMethod.GET)
public String home2(Model model) {
return "home2";
}
}
[ 컨트롤러에 @RequestMapping 어노테이션 사용하기 ]
컨트롤러 자체에 매핑 어노테이션을 사용하면 해당 URL을 컨트롤러로 보내주고, 그 하위 URL에 대한 매핑을 다시 메소드에 찾습니다. 예를 들어 아래와 같이 "/board/list" 라는 URL을 매핑해준다면, 메소드에 전체 URL을 다 매핑해줄 수 있지만 "/board"는 컨트롤러에 매핑해주고 "/list"는 메소드에 매핑해서 사용할 수 있습니다. 이 방식으로 모듈별로 컨트롤러를 분리시키면 좀 더 깔끔하게 코드를 구현할 수 있습니다.
package com.hsweb.springweb;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping(value="/board") // 컨트롤러 URL 매핑
public class HomeController {
// /list URL에 대한 요청 처리
@RequestMapping(value = "/list", method = RequestMethod.GET)
public String home2(Model model) {
return "/board/list";
}
}
'▸Spring MVC > 기본 문법' 카테고리의 다른 글
@Resource, @Inject, @Autowired 사용 (자동 의존성 주입) (0) | 2020.03.18 |
---|---|
스프링 MVC - 데이터 전달 객체들 (1) | 2020.03.11 |
스프링 AOP 구현 (관점 지향 프로그래밍) (0) | 2020.03.10 |
스프링에서 외부 환경 변수 정보 읽어오기 (Properties 파일) (0) | 2020.03.09 |
스프링의 IOC(제어의 역전)와 DI(의존성 주입) (0) | 2020.03.06 |
댓글