DEVLOG

Controller 객체 구현 - 1 본문

Spring

Controller 객체 구현 - 1

BINTHEWORLD 2022. 6. 11. 15:28

@RequestMapping()

MemberController.java

속성이 하나일 때 속성명 생략이 가능하다.

@RequestMapping("/memJoin") // = @RequestMapping("value = /memJoin")

만약 html파일의 form action값이 길다면 Controller 파일에서 매핑값의 가독성이 떨어지므로 클래스 상단에 공통 매핑값을 적어준다. 이렇게 하면 Controller 공통 매핑값과 각 메소드의 매핑값이 합쳐진 매핑값이 되어 중복데이터를 예방할 수 있다.

login.html

	<form action="/lec17/member/memLogin" method="post">
		ID : <input type="text" name="memId" ><br>
		PW : <input type="password" name="memPw" ><br>
		<input type="submit" value="Login" >
	</form>

MemJoin.html

	<form action="/lec17/member/memJoin" method="post">
		ID : <input type="text" name="memId" ><br />
		PW : <input type="password" name="memPw" ><br />
		MAIL : <input type="text" name="memMail" ><br />
		PHONE : <input type="text" name="memPhone1" size="5"> -
				<input type="text" name="memPhone2" size="5"> -
				<input type="text" name="memPhone3" size="5"><br />
		<input type="submit" value="Join" >
		<input type="reset" value="Cancel" >
	</form>

MemberController.java

@Controller
@RequestMapping("/member") // 공통매핑값
public class MemberController {
	
	@RequestMapping(value="/memJoin", method=RequestMethod.POST) // 매핑값 : /member/memJoin
	public String memJoin(Model model, HttpServletRequest request) {
    		...
    }
    
	@RequestMapping(value="/memLogin", method=RequestMethod.POST) // 매핑값 : /member/memLogin
	public String memLogin(Model model, HttpServletRequest request) {
		...
	}
}

@RequestParam("form의 input name") 어노테이션으로 입력 값 전달받기

MemberController.java

아래 2개의 코드는 사용자로부터 입력받은 값을 전달받는 동일한 기능을 한다.

	@RequestMapping(value="/memLogin", method=RequestMethod.POST)
	public String memLogin(Model model, HttpServletRequest request) {
		String memId = request.getParameter("memId");
		String memPw = request.getParameter("memPw");
        	...
	}

즉, @RequestParam() 어노테이션을 사용하면 request 객체의 getParameter() 메소드와 동일하게 입력받은 값을 전달받을 수 있다.

	@RequestMapping(value="/memLogin", method=RequestMethod.POST)
	public String memLogin(@RequestParam("memId") String memId, @RequestParam("memPw") String memPw) {
		...
	}

@RequestParam의 속성

required=false : 값이 넘어오지 않아도 에러발생X / required=true: 값이 넘어오지 않으면 에러발생O

defaultValue="" : 값이 넘어오지 않을 경우를 대비해 디폴트 Value 설정

@RequestParam(value="memPw", required=false, defaultValue="1234") String memPw

커맨드 객체(Command Object)를 이용한 HTTP전송 정보 얻기

커맨드 객체(Command Object) 란?

HttpServletRequest 를 통해 들어온 요청 파라미터들을 setter 메서드를 이용하여 객체에 정의되어있는 속성에 바인딩이 되는 객체를 의미

Member.java

커맨드 객체(Command Object)를 이용한 HTTP전송 정보를 얻기 위해서는 반드시 setter(), getter() 메소드가 만들어져 있어야 한다.

public class Member {
	private String memId;
	private String memPw;
	...
	
	public String getMemId() {
		return memId;
	}
	public void setMemId(String memId) {
		this.memId = memId;
	}
	public String getMemPw() {
		return memPw;
	}
	public void setMemPw(String memPw) {
		this.memPw = memPw;
	}
	...
}

MemberController.java

메소드의 매개변수로 Member member 객체를 받아서 setter() 메소드가 실행되어 입력된 값의 name과 동일한 객체명을 가진 객체에 값이 자동 셋팅된다. 그러므로 값이 셋팅된 객체를 사용하고자 한다면, getter() 메소드를 호출하면 된다.

@Controller
@RequestMapping("/member")
public class MemberController {

	@Resource(name="memService") // or @Autowired 사용 가능
	MemberService service;
	
	@RequestMapping(value="/memJoin", method=RequestMethod.POST)
	public String memJoin(/*Model model*/, Member member) { // form 에서 입력한 값들이 Member.java의 setter()메소드로 셋팅됨
		/*setter() 메소드 사용되었으므로 바로 getter()로 값 꺼내올 수 있으므로 아래 코드 생략 가능*/
		 // String memId = request.getParameter("memId"); 
		 // String memPw = request.getParameter("memPw"); 
		 // String memMail = request.getParameter("memMail");
		 // String memPhone1 = request.getParameter("memPhone1"); 
		 // String memPhone2 = request.getParameter("memPhone2"); 
		 // String memPhone3 = request.getParameter("memPhone3");
		 
		/* Member.java의 getter() 메소드로 셋팅된 값을 들고온다.*/
		service.memberRegister(member.getMemId(), member.getMemPw(), member.getMemMail(), 
				member.getMemPhone1(), member.getMemPhone2(), member.getMemPhone3());
		
        /*model 객체 이용하지 않고도 ${member.~~~}으로 접근 가능*/
		// model.addAttribute("memId", memId);
		// model.addAttribute("memPw", memPw);
		// model.addAttribute("memMail", memMail);
		// model.addAttribute("memPhone", memPhone1 + " - " + memPhone2 + " - " + memPhone3);
		
		return "memJoinOk";
	}
	
    ...
}

memJoinOk.jsp

model.addAttribute() 메소드 대신 setter() 메소드로 값 셋팅했으므로, 들고올 때는 ${member.~~~}로 커맨드 객체에 접근하여 getter() 메소드로 값을 가지고 올 수 있다.

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
	<title>Home</title>
</head>
<body>
	<h1> memJoinOk </h1>
	ID : ${member.memId}<br /> <!-- member.~~~ : Member.java의 getter가 작용한다.-->
	PW : ${member.memPw}<br />
	Mail : ${member.memMail} <br />
	Phone : ${member.memPhone1} <br />
	
	<a href="/lec17/resources/html/memJoin.html"> Go MemberJoin </a>
</body>
</html>

 

🙆‍♂️출처🙇‍♂️

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC_renew 

 

자바 스프링 프레임워크(renew ver.) - 신입 프로그래머를 위한 강좌 - 인프런 | 강의

스프링 프레임워크 기본부터 실전 사용법까지! 충실하고 폭넓은 설명과 예제를 통해 현장에 바로 투입되어 활약하는 개발자로 거듭나세요., - 강의 소개 | 인프런...

www.inflearn.com

https://medium.com/webeveloper/modelattribute-%EC%99%80-%EC%BB%A4%EB%A7%A8%EB%93%9C-%EA%B0%9D%EC%B2%B4-command-object-42c14f268324

 

@ModelAttribute 와 커맨드 객체(Command Object)

@ModelAttribute 와 커맨드 객체(Command Object), @RequestParam 과 HttpServletRequest

medium.com

'Spring' 카테고리의 다른 글

세션, 쿠키  (0) 2022.06.13
Controller 객체 구현 - 2  (0) 2022.06.11
Service & Dao 객체 구현  (0) 2022.06.10
웹 서버(Tomcat)와 이클립스 연동  (0) 2022.06.09
웹 프로그래밍 설계 모델  (0) 2022.06.08
Comments