일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- springboot
- 깃허브
- 스프링 컨테이너
- mysql
- JVM
- 어노테이션
- 이클립스
- 자바
- 자동주입
- Spring 개발환경 설정
- java
- pom.xml
- list
- 스프링
- 리액트
- react
- 빈
- github
- DI
- spring
- 객체
- 트랜잭션
- 영속성 컨텍스트
- @transactional
- @Bean
- 의존성주입
- merge
- 인터페이스
- 상속
- Spring legacy Project
- Today
- Total
DEVLOG
Controller 객체 구현 - 1 본문
@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>
🙆♂️출처🙇♂️
자바 스프링 프레임워크(renew ver.) - 신입 프로그래머를 위한 강좌 - 인프런 | 강의
스프링 프레임워크 기본부터 실전 사용법까지! 충실하고 폭넓은 설명과 예제를 통해 현장에 바로 투입되어 활약하는 개발자로 거듭나세요., - 강의 소개 | 인프런...
www.inflearn.com
@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 |