본문 바로가기
Develop/Spring

[5.모델2방식과 스프링MVC]2.스프링MVC의 컨트롤러-2

by jaekk 2018. 8. 13.

기초적인 컨트롤러 생성 실습


1)리턴 타입: void


현재 메서드의 리턴타입이 void인경우 현재 경로에 해당하는 JSP파일 실행


※ Mapped = 서블릿이 셋팅되어있다.




2) 리턴타입: String


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package org.zerock.web;
 
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
 
@Controller
public class SampleController2 {
 
        private static final Logger logger = LoggerFactory.getLogger(SampleController2.class);
        
        @RequestMapping("/doC")
        public String doC(@ModelAttribute("parameter"String parameter) {
             logger.info("doC called........................");
             
             return "result";
        }
        
        
}
 

cs


@Requestmapping("doC"): URI 가 '/doC'인 경우에 동작

@ModelAttribute("parameter")

1)parameter'이름의 파라미터 문자열로 처리

2)자동으로 해당 객체를 뷰까지 전달

doC()메서드의 return값

1) 이동할 뷰 의미

2) jsp파일 이름

3)/WEB-INF/views/ 아래에서 찾음



1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
    <span>Hello ${parameter}</span>
 
</body>
</html>
cs





3) Model 객체 이용

만들어진 결과 데이터를 전달하는 경우-스프링 - MVC의 Model객체를 이용


Model 클래스: 스프링 기본 제공 클래스

public String doD(Model model) : model 객체 받음

model.addAttribute(product)

model객체에 product 객체 담아 뷰 전달

1) addAttribute(이름,객체): 해당이름으로 객체 사용

2) addAttribute(객체): 해당 객체의 클래스의 앞글자를 소문자로 작성하여 객체 사용

단축키

소문자 변경: Ctrl + Shift + Y

대문자 변경: Ctrl + Shift + X



2)





3)

1
2
3
4
5
6
7
    @RequestMapping("doZ")
    public String doZ(@RequestParam String msg, ModelMap model) {
        logger.info("doZ");
        model.addAttribute("msg""z-" + msg);
        model.addAttribute("sample""hello?");
        return "result";
    }
cs


1
2
3
4
5
6
7
8
9
10
11
12
13
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
    <span>${productVO.name }</span>
    <span>${ProductVO.price }</span>
</body>
</html>
cs




4) Redirect 사용

1
2
3
4
5
6
7
    @RequestMapping("doD")
    public String doD(Model model) {
        ProductVO product = new ProductVO("Sample Product"10000);
        logger.info("doD");
        model.addAttribute(product);
        return "productDetail";
    }
cs




JSP로 구현하기

doY로 요청하였을 때 'doC?msg=This is the Message!! with redirected by doY' 리다이렉트 한다.



1
2
3
4
5
    @RequestMapping("doY")
    public void doY(HttpServletResponse res) throws Exception {
        logger.info("doY");
        res.sendRedirect("doC?msg=This is the Message!! with redirected by doY");
    }

cs






console에도 doY로 갔다가 doC로 온 것을 확인할 수 있다.




실제 doC를 요청하면 -doY로 끝나는 문구는 뜨지 않음

(redirect시에만 -doY로 끝나는 문구 뜸)

※ 원래 JSP에서 HttpServletResponse객체를 이용하여 만들었는데 이를 스프링에서는 redirect를 사용한다.




5) JSON 사용


1. mvnrepository에서 Jackson Databind 검색



2. 메이븐 추가





3. Alt + F5 로 메이븐 업데이트 후 jackson 라이브러리 생성 확인


4. 소스 작성하기

1
2
3
4
5
6
    @RequestMapping("/doJSON")
    public @ResponseBody ProductVO doJSON() {
        ProductVO vo = new ProductVO("샘플상품",30000);
        return vo;
        
    }
cs

메서드에 선언된 리턴 타입: @ResponseBody 애너테이션
xml형태로 return





5-2) AJAX 사용하기

ajax는 사실 xml로 return해야하는데 jQuery를 이용하면 json으로 받아올 수 있다. 

실제 실무에서도 json을 더 많이 씀


1. jQuery 사이트로 들어가서 jQuery 스크립트를 가져온다.

http://jquery.com/

Ctrl + U (페이스 소스 보기) 클릭

해당 스크립트 복사




2. JSP 파일에 JSON 코드 추가하기

1) jQuery 스크립트 추가

2) jQuery 사이트에서 document-API : aJax를 검색하여 알맞은 형식을 가져온다.

ex) 맨 마지막꺼

3. 복사한 ajax 스크립트를 알맞게 변경

1
2
3
4
5
6
    @RequestMapping("/doJSON")
    public @ResponseBody ProductVO doJSON() {
        ProductVO vo = new ProductVO("샘플상품",30000);
        return vo;
        
    }
cs


댓글