02. Spring MVC

CHOISUJIN·2023년 4월 24일
0
post-thumbnail

🌟 Controller

@Component : 해당 클래스를 bean으로 등록하라는 프로그램에게 알려주는 주석

  • class : 객체를 만들기 위한 설계도 -> 객체로 생성 되어야 기능 수행 가능!
  • IOC(제어의 역전)을 이용하여 객체 생성! bean == 스프링이 생성한 객체
    @Controller : 생성된 bean이 Controller임을 명시 + bean 등록

@RequestMapping("경로") : 클라이언트의 요청(url)에 맞는 클래스 또는 메소드를 연결시켜주는 어노테이션
ex) @RequestMapping("/member") : localhost:8080/comm/member 이하의 요청을 처리하는 컨트롤러

[위치에 따른 해석]

  • 클래스 레벨 : 공통 주소
  • 메소드 레벨 : 공통 주소 외 나머지 주소
    단, 클래스레벨에 @RequestMapping이 존재하지 않는다면, 메소드 레벨 : 단독 요청 처리 주소

[작성법에 따른 해석]

  • @RequestMapping("url") : 요청 방식(GET/POST) 관계 없이 url이 일치하는 요청 처리
  • @RequestMapping(value="url", method=RequestMethod.GET | POST) : 요청 방식에 따라 요청 처리
  • ** 메소드 레벨에서 GET/PST 방식을 구분하여 매핑가능
  • @GetMapping("url") / @PostMapping("url") -> 메소드 레벨에서만 작성 가능

@Autowired : bean으로 등록된 객체 중 타입이 같거나, 상속관계인 bean을 주입해주는 역할(DI:의존성 주입)
-> Controller: Service에 / Service: DAO에 / DAO: SqlSessionTemplate에 @Autowired 작성!

☑️ 파라미터 얻어오는 법

1.HttpServletRequest 이용

	@RequestMapping("/login")
	public String login(HttpServletRequest req) {
		logger.info("로그인 요청됨");

		String inputEmail = req.getParameter("inputEmail");
		String inputPw = req.getParameter("inputPw");

		logger.debug("inputEmail : " + inputEmail);
		logger.debug("inputPw : " + inputPw);

		return "redirect:/"; // sendRedirect 안써도 된다. 이게 리다이렉트 구문임
	}
  1. @RequestParam("name 속성값") 자료형 변수명
  • 매개 변수 지정 시 데이터 타입 파싱 자유롭게 진행할 수 있음 ex) String -> int
  • value : input 태그의 name 속성값
  • required : 입력된 name 속성값이 필수적으로 파라미터에 포함되어야 하는지 지정
    required= true(기본값) / false
  • defaultValue : required가 false인 상태에서 파라미터가 존재하지 않을 경우의 값을 지정
	@RequestMapping("/login")
	public String login(@RequestParam("inputEmail") String inputEmail,
						@RequestParam("inputPw") String inputPw,
						@RequestParam(value="inputName", required = false, defaultValue="홍길동") String inputName
						) {
		logger.debug("email: " + inputEmail);
		logger.debug("pw: " + inputPw);
		logger.debug("name: " + inputName);
		
		// email 숫자만 입력받는다고 가정
//		logger.debug(inputEmail + 100);
		
		return "redirect:/"; 
		
	}
  1. @ModelAttribute VO타입 변수명
  • 파라미터 중 name 속성값이 VO의 필드와 일치하면 해당 VO 객체의 필드에 값을 세팅
  • VO 기본 생성자 / VO 필드에 대한 Setter 필수 !!!
	@PostMapping("/login")
	public String login(@ModelAttribute Member inputMember ) {

		logger.info("로그인 기능 수행됨");
		
		// 아이디, 비밀번호가 일치하는 회원 정보를 조회하는 Service 호출 후 결과 반환 받기
		Member loginMember = service.login(inputMember);
		
		return "redirect:/";
	}
	
	// 회원 가입 화면 전환
	@GetMapping("/signUp") // Get 방식 : /comm/member/signUp 요청
	public String signUp() {
		
		return "member/signUp";
		
	}

🌟 Service

@Service : 비즈니스 로직(데이터 가공, DB연결)을 처리하는 클래스임을 명시 + bean 등록

  • Service는 interface / class 하나씩 생성
    -> 1. 프로젝트에 규칙성을 부여하기 위헤
    2. Spring AOP를 위해 필요
    3. 클래스 간의 결합도를 약화시키기 위해 -> 유지보수성 향상
/** 로그인 서비스 구현
 */
@Override
public Member login(Member inputMember) {
	Member loginMember = dao.login(inputMember);
	
    return loginMember;
		// Connection을 얻어오거나 / 반환하거나
	// 트랜잭션 처리를 하는 구문을 작성하지 않아도
	// Spring에서 제어를 하기 때문에 Service 구문이 간단해진다.

}

🌟 DAO

@Repository : 영속성을 가지는 DB/파일을 연결하는 클래스임을 명시 + bean 등록

  • Mybatis 영속성 프레임워크 이용
  • root-context.xml에서 생성된 SqlSessionTemplate bean을 의존성 주입(@Autowired)
profile
매일매일 머리 터지는 중 ᕙ(•̀‸•́‶)ᕗ

0개의 댓글