스프링을 배우기 전에 쓰던 JSP와 각종 서블렛, 그리고 DAO VO 클래스를 졸업하고 스프링으로 넘어갔다.
머리가 나빠서 그런건지 급격하게 변한 양식때문에 혼란을 많이 겪었는데, 그 중에 최고는 Spring Framework 개발환경 구축이 제일 힘들었다.
그대로 따라했는데 @Controller 에노테이션을 넣어봐도 VIEW로 이동이 안되는거 ㅠㅜ
다행히 학원 동기님 중 한분의 파일로 구제 받을 수 있었다.
잡담은 이만하고 세팅하는법과 기본 MVC 패턴의 구조를 보도록 하자.
1. 세팅하는법:
일단 Eclipse를 사용하다가 넘어왔기 때문에 Eclipse를 통해서 Spring 프레임워크 개발환경을 구축한다.
이클립스 마켓플레이스에서 아래 스프링을 다운 받고 이클립스를 재실행한다.
그 다음에 새로운 프로젝트를 Spring Starter Project로 실행하고 안의 pom.xml, application.property, dependencies를 설정해야 하지만 이 개발환경 구축에서 너무 기가 빨려버렸다.
아래 파일을 다운받고 프로젝트 import를 하면 웹브라우저를 실행할 수 있는 기본적인 세팅이 전부 완료된 스프링 프로젝트를 실행할 수 있다.
개발환경에서 그만 고통받고 싶다. 너무 지쳤다...
스프링의 기본은 전에 쓰던 MVC와 동일하지만 조금 다른 방법에 어색할 수 있다.
1. Controller
일단 controller = servlet을 보자
차례대로 controller의 의미는 아래 마지막으로 return되는 값을 .jsp의 파일로 보내준다는 의미이다.
service클래스에서 하던 return test.jsp로 생각하면 쉽다.
만약 @애노테이션을 @RestController로 하면 jsp파일로 가는 것이 아닌 화면에 그 값이 그대로 출력되어 버린다.
@autowired의 의미는 서비스의 객체를 생성자 없이 자동으로 만들어주기 때문에 인스턴스 선언을 생략할 수 있게 만들어주는 것. 프로그램이 자동으로 만들어준다. 따라서 실제 service의 생성자를 안써도 동작된다. = 코드의 간결성
@getMapping은 URL의 /경로를 지정해주는것. 아래에는 "" 공백으로 되어있기 때문에 localhost/만 해도 guguTest.jsp로 넘어간다. 만약 @getMapping("/test")로 하였다면 localhost/guguTest/test 까지 붙여줘야 아래의 메서드가 실행되서 guguTest.jsp 파일로 넘어간다.
ModelandView의 설명은 주석을 참조하고 @PathVariable의 의미는 ()안의 파라미터 값을 다음 값 dan에 넣는다는 의미.
따라서 getMapping에 ("{dan}")이 되어있으므로 /guguTest/5만 써도 구구단 5단이 출력된다.
ModelandView에서 일단 addObject를 선언하여 데이터값의 이름과 그 데이터 자체를 지정한 후, setViewName을 지정해서 해당 값을 어디 jsp 파일로 보낼건지 선언한다. 그 후에 modelandview값을 return 하면 지정한 값과 jsp파일이 연동되서 출력된다.
@Controller
@RequestMapping("/guguTest")
//페이지 경로라고 보면 됨
// Controller란 사용자의 요청을 받은 후에 데이터를 가공하고 출력하는 통로 = servlet임
public class guguTestController {
@Autowired
guguTestService gs;
@GetMapping("")
public String getgu(Model m) {
// model 즉 서비스로 넘겨서 계산을 받아오고
// 받은 계산값을 gugu로 저장해서
m.addAttribute("guguTest", gs.calgugu());
// 출력
return "guguTest";
}
// 위의 model을 사용한거는 model.addAttribute로 데이터만 저장하고
// model and view는 데이터와(addObject) setViewName으로 페이지까지 동시 지정
// jsp에 값을 줬으면 이제 modelview로 실질적 값을 넣을 차례
@GetMapping("/{d}") //이런 식 guguTest/5
public ModelAndView getgu2(@PathVariable("d") int dan) {
// PathVariable을 통해서 parameter가 d이고 그 값이 dan이면
// 위의 getMapping에 {}를 넣어서 값만 추출
// 다만 이때 jsp 출력이 아니기 때문에 $는 생략함
ModelAndView mv = new ModelAndView();
mv.addObject("guguTest", gs.calgugu(dan));
// 위의 guguTest라는 이름으로 gs.getd의 데이터 값을 받아옴
mv.setViewName("guguTest");
// setViewName으로 그 값을 활용할 페이지 지정
return mv;
}
}
2. Service
너무 어렵게 생각하지말자. 전에 쓰던 service와 동일하게 parameter값을 받아오고 그 값이 null이거나 특정 값이라면 아래 메서드로 데이터를 가공해서 추출한다.
그리고 그 값을 return해주면 위의 controller클래스에서 메서드를 선언하여 값만 받아온 후 jsp(VIEW) 파일로 출력한다.
package com.tjoeun.svc;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Service;
@Service
public class guguTestService {
private HttpServletRequest request;
public guguTestService(HttpServletRequest request) {
this.request = request;
}
public String calgugu() {
String d = request.getParameter("d");
if(d==null) {
d = "2";
return calgugu( Integer.valueOf(d));
}
else {
return calgugu( Integer.valueOf(d));
}
}
public String calgugu(int dan) {
String str = "";
for(int i = 1; i<10; i++) {
str += String.format("%d * %d = %d<br>", dan, i, (dan*i));
}
return str;
}
}
3. 마지막으로 VIEW인 jsp
정말 간단한데 controller에서 지정한 값의 이름을 ${ valuename } 의 형식으로 넣어서 JSP VIEW로 출력한다
<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>구구단</title>
</head>
<body>
<h3>구구단</h3>
${guguTest} <!-- el문자 -->
</body>
</html>
'국비과정 > Spring Framework' 카테고리의 다른 글
@sessionattributes에 여러개의 키를 주기 (0) | 2022.04.12 |
---|---|
클래스 VO 설계방법 (0) | 2022.04.05 |
Transactional 애노테이션 사용방법 (0) | 2022.04.05 |
PathVariable과 RequestParam의 getMapping설정방법 (0) | 2022.03.27 |
스프링프레임워크 mybatis 설정방법 (0) | 2022.03.27 |