07_Controller 클래스 만들기

김정욱·2023년 4월 24일
0

Spring

목록 보기
11/13
post-thumbnail

1) 기타 개념

POJO 기반 프레임워크 : 외부 라이브러리 상속 X

class : 객체를 만들기 위한 설계도
-> 객체로 생성 되어야지 기능 수행이 가능하다
--> IOC(제어의 역전, 객체 생명주기를 스프링이 관리)를 이용하여 객체 생성
** 이 때, 스프링이 생성한 객체를 bean이라고 부른다 **

bean 등록 == 스프링이 객체로 만들어서 가지고 있어라

@Component : 생성된 bean이 Controller임을 명시 + bean 등록
@RequestMapping("/member") : local:8080/comm/member 이하의 요청을 처리하는 컨트롤러
ex) localhost:8080/comm/member
	localhost:8080/comm/member/signUp
    localhost:8080/comm/member/login
    기타 등등.. member 이하 모두

2) 내용

public class MemberController {
	private Logger logger = LoggerFactory.getLogger(MemberController.class);
    
    // private MEmeberService service = new MemberServiceImpl(); 
    // IOC(제어의역전) : new 연산자를 통해서 개발자가 직접 객체를 생성하지 않는다
    
    @Autowired // bean으로 등록된 객체 중 타입이 같거나, 상속관계인 bean을 주입해주는 역할
    private MemberService service; // DI(의존성 주입)
    
    // Controller :  요청/응답을 제어하는 역할을 하는 클래스
    
        /*	
    	@RequestMapping : 클라이언트 요청(url)에 맞는 클래스 or 메서드를 연결시켜주는
    					 어노테이션
	   [ 위치에 따른 해석 ]
       - 클래스 레벨 : 공통 주소
       - 메서드 레벨 : 공통 주소 외 나머지 주소
       
       단, 클래스 레벨에 @RequestMapping 이 존재하지 않는다면 
       - 메서드 레벨 : 단독 요청 처리 주소
       
       [ 작성법에 따른 해석 ] 
       
       1) @RequestMapping("url")
       --> 요청 방식(GET/POST) 관계 없이 url이 일치하는 요청 처리
       
       2) @RequestMapping(value="url", method=RequestMethod.GET | POST)
       --> 요청 방식에 따라 요청 처리함
       
       ** 메서드 레벨에서 GET/POST 방식을 구분하여 매핑할 경우 **
       @GetMapping("url") / @PostMapping("url") 사용하는 것이 일반적
       (메서드 레벨에서만 작성 가능)
       */
// 요청 시 파라미터 얻어오는 방법 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 안써도 된다. 이게 리다이렉트 구문
}    
// 요청 시 파라미터를 얻어오는 방법2
// -> @RequestParam 어노테이션 사용

// @RequestParam("name 속성값") 자료형 변수명
// - 클라이언트 요청 시 같이 전달된 파라미터를 변수에 저장
// --> 어떤 파라미터를 변수에 저장할지는 "name속성값"을 이용해 지정

// 매개변수 지정 시 데이터 타입 파싱을 자유롭게 진행할 수 있음
// ex) String -> int로 변환

// [속성]
// value : input 태그의 name 속성값

// required : 입력된 name 속성값이 필수적으로 파라미터에 포함되어야 하는지 지정
//			required = true / false (기본값 true)

// defaultValue : required가 false인 상태에서 파라미터가 존재하지 않을 경우의 값을 지정
// defaultValue 값이 없고 입력이 안되면 null로 들어옴

@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);
    
	return "redirect:/";
}    
// 요청 시 파라미터를 얻어오는 방법3
// -> @ModelAttribute 어노테이션 사용

// @ModelAttribute VO타입 변수명
// -> 파라미터 중 name 속성값이 VO의 필드와 일치하면
// 해당 VO 객체의 필드에 값을 세팅

// *** @ModelAttribute를 이용해서 객체에 값을 직접 담는 경우에 대한 주의사항 ***
// -- 반드시 필요한 내용
// - VO 기본 생성자
// - VO 필드에 대한 Setter

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

⭐ Resolves views selected for rendering by @Controllers to .jsp resources in the 
/WEB-INF/views directory
 
컨트롤러에서 jsp로 렌더링하는 것을 처리하는 부분이다
== 컨트롤러의 응답을 jsp로 보낼 때 어떻게 처리할 것인가?? 를 작성하는 부분
==> View Resolver : Controller에서 반환된 문자열 앞/뒤에 접두사(prefix), 접미사(suffix)를 
추가하여 만들어진 경로의 jsp로 요청을 위임(forward)
    
/WEB-INF/views/member/signUp.jsp
    
단, 반환된 문자열의 시작이 redirect: 구문이면 재요청(redirect) 진행
redirect:/ 최상위로 재요청

<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	<beans:property name="prefix" value="/WEB-INF/views/" />
	<beans:property name="suffix" value=".jsp" />
</beans:bean>

<context:component-scan base-package="edu.kh.comm" />
profile
절박한 마음을 갖고 하루를 보내자!!

0개의 댓글