코딩하는 문과생
[Spring] 2. 스프링 기본 - View와 Controller 본문
[HomeController 컨트롤러 어노테이션 상속관계]
@Component
@Controller
HomeController homeController = new HomeController() ;
@Service
@Repository
- 기존은 요청에 따른 컨트롤러를 모두 만들어야했다면, 스프링은 하나의 컨트롤러에 여러 메소드를 작성한다.
- 또한 리턴타입은 일반적으로 String이다.
- 메소드 구문형식에 제한이 없다.
- 그러나 사용자의 요청과 Mapping이 되어야 한다.
[UserCtrl 생성 - 어노테이션으로 객체를 생성하고, 맵핑한다.]
package com.sinc.intern.user.ctrl;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class UserCtrl {
// @RequestMapping(value="/login.do", method=RequestMethod.POST)
@RequestMapping("/login.do")
public String login() {
}
@RequestMapping("/logout.do")
public String logout() {
}
@RequestMapping("/join.do")
public String join() {
}
@RequestMapping("/search.do")
public String search() {
}
}
[UserDTO, UserVO 생성 - 데이터를 담는 그릇 생성]
package com.sinc.intern.user.model.vo;
public class UserDTO {
private String id, pwd;
public UserDTO() {
super();
// TODO Auto-generated constructor stub
}
public UserDTO(String id, String pwd) {
super();
this.id = id;
this.pwd = pwd;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "UserDTO [id=" + id + ", pwd=" + pwd + "]";
}
}
package com.sinc.intern.user.model.vo;
public class UserVO {
private String id, pwd, name;
private double point;
private String dept;
public UserVO() {
super();
// TODO Auto-generated constructor stub
}
public UserVO(String id, String pwd, String name, double point, String dept) {
super();
this.id = id;
this.pwd = pwd;
this.name = name;
this.point = point;
this.dept = dept;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPoint() {
return point;
}
public void setPoint(double point) {
this.point = point;
}
public String getDept() {
return dept;
}
public void setDept(String dept) {
this.dept = dept;
}
@Override
public String toString() {
return "UserVO [id=" + id + ", pwd=" + pwd + ", name=" + name + ", point=" + point + ", dept=" + dept + "]";
}
}
[UserCtrl 수정]
package com.sinc.intern.user.ctrl;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import com.sinc.intern.user.model.vo.UserDTO;
@Controller
public class UserCtrl {
@RequestMapping("/login.do")
public String login(UserDTO dto) {
System.out.println("ctrl login");
System.out.println("UserDTO : " + dto);
return "home";
}
@RequestMapping("/logout.do")
public String logout() {
return null;
}
@RequestMapping("/join.do")
public String join() {
return null;
}
@RequestMapping("/search.do")
public String search() {
return null;
}
}
[home.jsp 수정]
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>
Hello world!
</h1>
<P> This is a Spring Framework by L.S.J </P>
</body>
</html>
따라서 변수의 이름을 맞춰줘야 한다.
[UserCtrl 수정 - 반환형은 총 3개만 가능, 그 외는 비동기 통신이다.]
package com.sinc.intern.user.ctrl;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import com.sinc.intern.user.model.vo.UserDTO;
import com.sinc.intern.user.model.vo.UserVO;
@Controller
public class UserCtrl {
//String
@RequestMapping("/login.do")
public String login(UserDTO dto) {
System.out.println("ctrl login");
System.out.println("UserDTO : " + dto);
return "home";
}
//void
@RequestMapping("/logout.do")
public void logout() {
System.out.println("ctrl logout");
//반환이 없다면 RequestMapping에 적혀있는 url에 jsp를 맵핑해서 찾는다.
}
//ModelAndView
@RequestMapping("/join.do")
public ModelAndView join(ModelAndView mv) {
//View에 대한 정보와 Data에 대한 정보를 함께 넘긴다.
System.out.println("ctrl join");
mv.addObject("msg", "Hi, sijune");
mv.setViewName("home");
return mv;
}
//가장 추천하는 방식
@RequestMapping("/search.do")
public String search(Model model) {
System.out.println("ctrl search");
model.addAttribute("msg", "using model 두두두");
return "home";
}
//비동기 통신 - ResponseBody: 1.일반적으로 VO, List, Map을 반환한다. 2. 알아서 json으로 바꿔준다.
@RequestMapping("/ajax.do")
@ResponseBody
public UserVO ajax() {
System.out.println("ctrl ajax");
//페이지가 아닌 데이터를 반환한다.
return new UserVO("sijune", "sijune", "이시준", 1000, "STARTBUCKS");
}
}
[home.jsp수정]
<P> This is a Spring Framework by L.S.J ${ msg } </P>
'웹 프로그래밍 > Spring' 카테고리의 다른 글
[Spring] 6. 스프링 기본(5) - 게시판 (CRUD) (0) | 2020.02.06 |
---|---|
[Spring] 5. 스프링 기본(4) - DB에 컬럼추가하기 (0) | 2020.02.06 |
[Spring] 4. 스프링 기본(3) - DAO에서 MyBatis를 이용해 DB접근 (0) | 2020.02.04 |
[Spring] 3. 스프링 기본(2)-브라우저에서 DAO까지 (0) | 2020.02.04 |
[Spring] 1. 환경설정 (0) | 2020.02.03 |