A> spring mvc
spring core 는 스프링의 핵심기능이다.
스프링 MVC 는 spring core + 여러 서브 프로젝트로 구성된다.
스프링을 실행하는 존재는
ApplicationContext 와 WebApplicationContext 이다.
동시에 상호 연동하여 실행된다.
B>스프링 MVC 의 기본 흐름
스프링 MVC 에서는 스프링이 만들어주는 기본 객체가 있다.
개발자는 화면과 Controller,Model 만 만들어주면 된다.
dispatcherServlet이 request 를 받는다.
그리고 handlerMapping 객체에게 넘긴다.
handler가 결정이 되면 다시 dispatcherServlet에게 그 결과를 넘긴다.
handler를 결정이 됬기 때문에 Adapter를 시켜
핸들러인 controller 와 연결을 한다.
controller 에서 수행을 하고 그 결과를 adpater 를 타고 dipatcherServlet 에 보낸다.
dipatcherServlet는 결과를 viewResolver에 보내고, viewResolver 는 그 결과를 해석하여
보여줄 view 정보를 dispatcherServlet에게 다시 보낸다.
그럼 dispatcherServlet은 view 를 통해 화면을 출력한다.
C> Controller
1.Controller 에서 쓰이는 어노테이션
@Controller
--클래스 위에다 붙이며 해당 클래스의 인스턴스를 스프링의 빈으로 등록하고
그 인스턴스를 컨트롤러로 사용하겠다는 선언
@RequestMapping(" URI ")
--메서드 위에 붙이며 특정한 URI 에 대한 처리를
해당 컨트롤러에 메서드가 처리하겠다는 선언
@GetMapping , @PostMapping
-- 스프링 4.3 버전이후에는 @GetMapping , @PostMapping을
@RequestMapping 대신 사용할 수 있게 되었다.
원래는 @RequestMapping(value="uri", method={RequestMethod.GET ,RequestMethod.POST} )
이런식으로 사용했음
2. 특징
get , post 방식, 다양한 타입의 파라미터 처리가 가능하다.
3.파라미터 수집
파라미터를 setter로 자동 수집
@RequestParam("클라이언트로 부터의 request로 날아온 파라미터 이름") 타입 매개변수 로도 쓸 수 있다.
----예시
public String method(@RequestParam("name") String name)
4.return의 결과
String 리턴타입일때 return 한 문자열에 대한 jsp 파일로 이동
이때 return에 "redirect:" 와 "forward:" 로 리다이렉트와 포워드를
제어할 수 있다.
void 리턴타입인 메소드일때 RequestMapping 에 value 의 값을 가진 jsp로 이동
HttpHeaders: 응답에 내용 없이 Http 헤더 메세지만 전달하는 용도
4-1. 라이브러리 추가 시
객체 리턴타입인 메소드일때 JSON으로 데이터 만들고 반환
jackson-databind 추가시 가능
@ResponseBody 응답메세지에 객체 정보를 보내겠다는 뜻
----예시
1
2
3
4
5
6
7
8
9
10
11
|
@GetMapping("/ex06")
public @ResponseBody SampleDTO ex06() {
log.info("/ex06..........");
SampleDTO dto = new SampleDTO();
dto.setAge(10);
dto.setName("홍길동");
return dto;
}
|
cs |
위의 코드에서는 SampleDTO 타입의 객체를 json 형식으로
응답하겠다는 뜻
ResponseEntity 타입: response할때 http 헤더 정보와
내용을 가공하는 용도
header 에 속성 추가적인 데이터 전달시에 사용
1
2
3
4
5
6
7
8
9
10
11
12
|
@GetMapping("/ex07")
public ResponseEntity<String> ex07() {
log.info("/ex07..........");
// {"name": "실제데이터"}
String message = "{\"name\": \"실제데이터\"}"; //응답할 내용
HttpHeaders header = new HttpHeaders();
header.add("Content-Type", "application/json;charset=UTF-8");
return new ResponseEntity<>(message , header, HttpStatus.OK);
}
|
cs |
D>web.xml
웹 컨테이너의 설정 정보를 담고 있다.
servlet-context, root-context 는 스프링에 대한 정보를 담고 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- 컨테이너 정보를 저장하는 역할 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml</param-value>
</context-param>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 처음으로 정보를 처리하는 역할을 정의 =DispatcherServlet 이 받는다. -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- 기본 url 매핑 정보--> <servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
|
cs |
E> Model
--데이터 전달자의 역할
model.addArrtibute(키,값) 으로 전달한다.
컨트롤러에서 파라미터로 받은 객체형 타입(기본 자료형 제외)
은 그냥 요청하는 화면으로 전달을 해준다.
기본 자료형을 객체를 통하지 않고 보내려면 Model을 사용해야 한다.
즉, 객체를 요청하는 jsp 페이지에 보내는 게 원칙인데
기본 자료형이 오니 Model이라는 객체를 통해 보내준다는 것이다.
@ModelAttribute("키") 변수
컨트롤러의 메소드(@ModelAttribute(“page”) int page)
예를 들어
public String ex(@ModelAttribute("page") int page) { }
http://localhost:8080/sample/ex?page=1
로 전달하고자 하는 페이지에 Model 객체를 보내는 것이 가능하다.
F>RedirectAttribute
화면에 한번만 전달되는 파라미터를 처리
내부적으로 HttpSession 객체에 담아 한번만 사용되고 폐기된다.
rttr.addFlashAttribute(키,값)
예시
1
2
3
4
5
6
7
8
|
@PostMapping("/register")
public String register(BoardVO board , RedirectAttributes rttr) {
log.info("register: "+ board);
service.register(board);
rttr.addFlashAttribute("result",board.getBno());
return "redirect:/board/list";
}
|
cs |
'웹 > spring' 카테고리의 다른 글
spring --9. 파일 업로드 (0) | 2021.02.22 |
---|---|
spring --0. 설정 (0) | 2021.02.22 |
spring --7. 로그 (0) | 2021.02.19 |
spring --5 . 테스트 (0) | 2021.02.19 |
Spring 3 -- AOP (0) | 2021.02.18 |