본문 바로가기

개발자노트/Spring

Spring - 컨트롤러, 리퀘스트 매핑 @Controller / @RequestMapping , Spring에서 매핑하는법

Step1.

@ 설정을 위해서는
스프링 컨테이너가 내가 설정한 패키지 범위를 scan 할 수 있도록
context 네임스페이스를 추가해야한다!

<context:component-scan base-package="com.kim.biz.controller" />

 

 

❗ NameSpaces에서 context를 체크하면 상단 xml schema는 자동 등록됨!!

 

 

Step2.

Controller 객체들에게 @Component()하자!

 

❗ import가 하단 사진처럼 됐으면 연결이 잘 된것이다.

 

@Controller
    DS이 인식하는 C 객체로 설정해줌
    implements가 필요없음 -> 오버라이딩 강제 필요없음 => 완전한 POJO가 됨
    메서드 시그니쳐 변경가능  ex) public void selectOneMember(HttpServletRequest request)

 

 

 

 

Setp3.

사용자의 요청과 수행메서드를 연결하자!

 


@RequestMapping("/login.do")
    어떤 사용자의 [요청]에 대해서 무슨 [메서드]를 수행해야하는지 "연결"
    HM의 역할을 수행함
    하나의 C 클래스 내부에 여러개의 메서드를 작성할 수 있음


💭 짚고 넘어가야할 부분! login.do에 대한 응답이 두개인 것을 볼 수 있다!

      그 이유는 무엇일까??

      유저가 최초 로그인을 하기 위해서 로그인 화면으로 이동을 할 경우에는 아무런 전달 정보가 없으니 

      사용자의 요청에 값이 없기 때문에 get 방식으로 들어올 것이고.

      사용자의 입력값 ( 아이디, 비밀번호 ) 등을 입력하고 login.do를 할 경우 전달할 데이터가 있으니

      Post 방식으로 요청이 들어올 것이다.

     그렇기 때문에 두가지 전달방식에 대한 매핑을 해주어야한다!!

 

💭 mav의 default 요청방식은 foward 방식이다.

     전달할 내용이 없다면 String 으로 redirect: 를 반환을 하거나 setViewName에 지정해주면 된다.

 

 

 

 

 

 

Command 객체 ☆

 Command 객체가 하는일!
    스프링 컨테이너가 Command 객체를 생성
    + 사용자가 입력한 값들을 setter 주입으로 Command 객체에 세팅함

쉽게말해 요청했을 때의 정보들과 객체들의 멤버변수명 등이 같으면 알아서 세팅해준다!

 

 

 

 

 

 

 

 

 

 

 

코드

 

dispatcherServlet.xml 은 네임스페이스 추가만 해주면 된다.

 

 

MemberController.java

package com.kim.biz.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;

import com.kim.biz.board.BoardVO;
import com.kim.biz.board.impl.BoardDAO;
import com.kim.biz.member.MemberVO;
import com.kim.biz.member.impl.MemberDAO;

@Controller
public class MemberController {
	@RequestMapping(value="/login.do",method=RequestMethod.GET)
	public String index() {
		return "login.jsp";
	}
	@RequestMapping(value="/login.do",method=RequestMethod.POST)
	public ModelAndView selectOneMember(MemberVO mVO,MemberDAO mDAO,ModelAndView mav) {
		mVO=mDAO.selectOneMember(mVO);
		if(mVO==null) {
			mav.setViewName("login.jsp");
		}
		else {
			mav.addObject("member", mVO);
			mav.setViewName("main.do");
		}
		return mav;
	}
	@RequestMapping("/logout.do")
	public String logout(HttpServletRequest request) {
		HttpSession session=request.getSession();
		session.invalidate();
		return "redirect:login.do";
	} 
	@RequestMapping("/mypage.do")
	public ModelAndView mymage(MemberVO mVO,MemberDAO mDAO,ModelAndView mav ){

	
		mVO = mDAO.selectOneMember(mVO);
		
		mav.addObject("data",mVO);
		mav.setViewName("mypage.jsp"); // mav default 는 foward방식
		return mav;
	}
	
	@RequestMapping("/main.do")
	public ModelAndView mainAction(MemberVO mVO,MemberDAO mDAO,ModelAndView mav, HttpSession session){
		BoardVO bVO=new BoardVO();
		
		BoardDAO bDAO=new BoardDAO();
		List<BoardVO> datas=bDAO.selectAllBoard(bVO);
				
		mav.addObject("datas", datas);
		mav.setViewName("main.jsp");
		return mav;
	}
}