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;
}
}
'개발자노트 > Spring' 카테고리의 다른 글
Spring - 에러 페이지 설정 , 예외처리 (0) | 2022.09.28 |
---|---|
Spring 작동순서 개인적인 정리 (0) | 2022.09.24 |
Spring - 디스패쳐서블릿 (DispatcherServlet) / 핸들러 매핑 (HandlerMapping) / 뷰 리졸버 (ViewResolver) (2) | 2022.09.19 |
Spring AOP Joinpoint 바인드 변수 (0) | 2022.09.16 |
AOP 용어 정리 (0) | 2022.09.15 |