Spring MVC Process
Code
자바 파일에 메소드를 작성
특정 요청을 처리할 메서드에 @RequestMapping(”요청 url”) 작성
메소드를 작성하고 return을 문자열로 보내줌
해당 문자열은 디스패처에게 가고 viewResolver를 통해 jsp 경로 url 완성
이후 작성된 url과 맞는 jsp파일이 있으면 화면에 출력함
package com.spring.basic.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
// 자동으로 스프링 컨테이너에 해당 클래스의 bean을 등록하는 annotation
// bean을 등록해야 HandlerMapping이 이 클래스의 객체를 검색할 수 있음
// com.spring.basic의 하위 이므로 자동으로 bean 생성 됨
@Controller
public class RequestController {
public RequestController() {
System.out.println("RequestController 생성");
// 자동 bean등록이 되어 있기 때문에 서버가 활성화되면 자동으로 생성되어 컨트롤러에 저장됨
}
@RequestMapping("/request/test")
// /request/test라는 요청이 들어오면 밑의 메소드를 실행하라 라는 뜻
// 리턴값인 "test"는 디스패처로 가고
// 디스패처는 viewresolver에 보내주고 경로를 완성해주고
// view에 해당 파일이 있는지 확인 후 요청에 응답함
public String testCall() {
System.out.println("/request/test 요청이 들어옴");
return "test";
}
/*
만약 사용자가 /request/req 요청을 보내 왔을 때
views폴더 아래에 request폴더 안에 존재하는
req-ex01.jsp파일을 열도록 메서드를 구성해 보세요.
*/
@RequestMapping("/request/req")
// 이거는 요청 url
public String callme() {
System.out.println("/request/req 요청이 들어왔습니다.");
return "request/req-ex01";
// 메소드가 실행되었을 때 실제 디스패처에게 전달되는 값
// 나중에 이게 viewresolver에 가서 완벽한 url을 만들고
// 그걸 다시 디스패처가 안에 값이 있는지 확인한 후 있으면 화면 출력
}
}
GET과 POST를 구분하기 위해서는 RequestMapping(value=”요청 url”, method=RequestMethod.GET or POST) 를 통해서 get과 post를 구분할 수 있음
하지만 너무 길기 때문에 @GetMapping(요청url), @PostMapping(요청url)로 할 수 있지만 Spring 4버전부터 가능
요청이 Get방식인지 Post방식인지 구분하여 요청 처리
package com.spring.basic.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
// 자동으로 스프링 컨테이너에 해당 클래스의 bean을 등록하는 annotation
// bean을 등록해야 HandlerMapping이 이 클래스의 객체를 검색할 수 있음
// com.spring.basic의 하위 이므로 자동으로 bean 생성 됨
@Controller
public class RequestController {
public RequestController() {
System.out.println("RequestController 생성");
// 자동 bean등록이 되어 있기 때문에 서버가 활성화되면 자동으로 생성되어 컨트롤러에 저장됨
}
@RequestMapping("/request/test")
// /request/test라는 요청이 들어오면 밑의 메소드를 실행하라 라는 뜻
// 리턴값인 "test"는 디스패처로 가고
// 디스패처는 viewresolver에 보내주고 경로를 완성해주고
// view에 해당 파일이 있는지 확인 후 요청에 응답함
public String testCall() {
System.out.println("/request/test 요청이 들어옴");
return "test";
}
/*
만약 사용자가 /request/req 요청을 보내 왔을 때
views폴더 아래에 request폴더 안에 존재하는
req-ex01.jsp파일을 열도록 메서드를 구성해 보세요.
*/
@RequestMapping("/request/req")
// 이거는 요청 url
public String callme() {
System.out.println("/request/req 요청이 들어왔습니다.");
return "request/req-ex01";
// 메소드가 실행되었을 때 실제 디스패처에게 전달되는 값
// 나중에 이게 viewresolver에 가서 완벽한 url을 만들고
// 그걸 다시 디스패처가 안에 값이 있는지 확인한 후 있으면 화면 출력
}
// @RequestMapping(value="/request/basic01", method=RequestMethod.GET)
// requestMapping을 작성할 때 value에 요청 url을 작성하고 method에 GET, POST 구분할 수 있음
@GetMapping("/request/basic01")
public String basicGet() {
System.out.println("/request/basic01 요청이 들어왔습니다. GET 요청");
return "request/req-ex01";
// 같은 파일로 보내기 때문에 print문과 url을 확인해서 이동이 잘되었는지 확인
}
// @RequestMapping(value="/request/basic01", method=RequestMethod.POST)
@PostMapping("/request/basic01")
public String basicPost() {
System.out.println("/request/basic01 요청이 들어왔습니다. POST 요청");
return "request/req-ex01";
// 같은 파일로 보내기 때문에 print문과 url을 확인해서 이동이 잘되었는지 확인
}
}
<context:component-scan base-package="com.spring.basic" /> 에서 com.spring.basic 경로에 있는 모든 객체를 Container에 bean으로 등록
@Controller가 적혀있는 곳을 찾아 요청을 처리할 수 있는 메소드를 찾고 만약 메소드를 찾았으면 viewresolver를 통해 지정한 접두어, 접미어를 바탕으로 붙여서 경로를 지정
이후 디스패처가 지정한 경로에 jsp파일이 있으면 화면에 출력
servlet-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- DispatcherServlet 객체 관련 설정 -->
<!-- 핸들러 어댑터, 핸들러 매핑 객체가 개발자가 작성한 컨트롤러를 찾을 수 있게 설정하는 태그 -->
<annotation-driven />
<!-- 핸들러 어댑터와 핸들러 매핑는 @Controller를 찾아서 거기에서 지금의 요청을 처리할 수 있는 메서드를 찾음
핸들러 어댑터은 @RequestMapping을 통해서 적절한 메서드도 찾음
-->
<!-- 정적 자원(html, css, js, img)등을 절대 경로로 쉽게 매핑해주는 태그
mapping에 작성된 경로 : 외부로 노출되는 경로
location : 실제 파일 경로-->
<resources mapping="/resources/**" location="/resources/" />
<!-- view resolver bean 등록 설정 -->
<!--
컨트롤러가 리턴한 view 문자열을 해석하여 경로를 만들어서 파일을 찾아 응답하는 ViewResolver의 Bean 등록 코드
- prefix, sufiix (접두어, 접미어) 필드의 setter 주입을 통해 컨트롤러에서 리턴된 문자열을 조립
-->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
<!-- 접두어 접미어를 앞 뒤에 붙여서 경로를 지정해줌 -->
</beans:bean>
<!--
- Controller annotation을 사용하여 자동으로 bean 등록을 하게 해주는 설정 태그
- con.spring.basic으로 경로가 시작되는 모든 클래스에서 annotaion으로 지정되어 있는 클래스를 찾아
자동으로 bean 빈등록 해줌
-->
<context:component-scan base-package="com.spring.basic" />
</beans:beans>