본문 바로가기

Spring Framework

3. 파라미터 얻어오기, 화면 전환하기

 

// 일반 서블릿(HttpServlet 상속) 
@WebServlet("url")
public class MemberController extends Httpservlet {
}

위 코드는 원래 사용하던 일반 Servlet의 형식이다, 그러나 Spring에서는 이렇게 상속을 받아서 사용 할 수 없다. (POJO위반) 

원래 class는 객체를 만들기 위한 설계도이다. 객체로 생성되어야지 기능 수행이 가능하기 때문에 new연산자를 사용하여 생성하여 사용하였다. 그러나 프레임워크는 특징 중 IOC(제어의 역전)을 이용하여 객체를 생성하여 사용한다.

이때, Spring이 생성한 객체를 bean이라고 한다.

 

[bean을 등록하는 방법]

1. @Component : 해당 클래스를 bean으로 등록하라고 알려주는 어노테이션

2. @Controller : 생성된 bean이 Controller임을 명시 + bean 등록 

* Controller: 요청/응답을 제어히는 역할을 지닌 클래스

 

 

@RequestMapping

: 클라이언트의 요청(url)에 맞는 클래스 or 메서드를 연결시켜주는 어노테이션 

 

1. 위치에 따른 해석 (어노테이션을 사용하여 기능을 지정할 수 있는 레벨)

 - 클래스 레벨: 클래스 선언부에 작성되며, 해당 클래스 전체에 영향을 미친다. ex) @Service, @Repository, @Configuration...

 - 메서드 레벨: 메서드 선언부에 작성되며, 해당 메서드에만 영향을 미친다. ex) @PostMapping, @RequestMapping...

  * @RequestMapping은 클래스와 메서드 두 곳 모두에서 사용할 수 있는데, 만약 클래스 레벨에 @RequestMapping이 없고 메서드 레벨에만 지정되어 있다면, 해당 메서드의 요청 경로는 controller 클래스에 대한 단독 요청 처리 주소가 된다. 해당 메서드는 controller 클래스에 대한 독립적인 요청 경로를 가지게 되며, 해당 메서드가 처리하는 요청 경로는 클래스와 상관 없이 독립적으로 지정된다. 

 

2. 작성법에 따른 해석

  - @RequestMapping("url") : 요청방식(GET/POST) 관계 없이 url이 일치하는 요청 처리 

  - @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 + " || inputPw: " + inputPw);
		
		return "redirect:/";	
	}

 

 

 

요청 시 파라미터를 얻어오는 방법2 : @RequestParam 사용

 

@RequestParam("name속성값") 자료형 변수명 

 - 클라이언트의 요청 시 같이 전달되는 파라미터를 변수에 저장한다. 

 - 어떤 파라미터를 변수에 저장할지는 'name 속성값'을 이용하여 지정한다.  

 

* 속성 

 - value: input태그의 name 값 

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

 - 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.info("로그인 요청됨");
	logger.debug("inputEmail: " + inputEmail + " || inputPw: " + inputPw + " || inputName: " + inputName);
	return "redirect:/";
}

 

 - @RequestParam을 생략하지만 파라미터를 얻어오는 방법: name 속성값과 파라미터를 저장할 변수 이름을 동일하게 작성한다. 

@RequestMapping("/login")
public String login(String inputEmail,
		    String inputPw,
		    @RequestParam(value="inputName", required=false, defaultValue="홍길동") String inputName) {
	logger.info("로그인 요청됨");
	logger.debug("inputEmail: " + inputEmail + " || inputPw: " + inputPw + " || inputName: " + inputName);
	return "redirect:/";
}

 

 

요청 시 파라미터를 얻어오는 방법3 : @ModelAttriubute 사용 

 

@ModelAttribute vo타입 변수명 

 - 파라미터 중 name 속성 값이 vo의 필드와 일치하면 해당 vo 객체의 필드에 값을 세팅 

 * 객체에 값을 직접 담는 경우 주의사항 

    - 반드시 필요한 내용: VO 기본생성자, VO필드에 대한 Setter

@PostMapping("/login")
public String login( @ModelAttribute Member memberEmail ) {
		
	logger.info("로그인 기능 수행됨");
		
	return "redirect:/"; 
}

 

 

화면 전환하기 

// Get방식으로 /comm/member/signUp 요청을 받아 리턴 
@GetMapping("/signUp") 
public String signUp() {
	return "member/signUp";
}

'Spring Framework' 카테고리의 다른 글

5. 1행만 조회하기  (0) 2023.04.25
4. Mybatis  (0) 2023.04.25
2. DispatcherServlet, logger  (0) 2023.04.22
1. Spring Framework란?  (0) 2023.04.22