본 게시글은 Seoul wiz의 신입SW인력을 위한 실전 자바(Java) 스프링(Spring)을 참고하여 작성한 글입니다.
Form태그, 즉 View의 데이터를 Server로 주고 받는 방식에 대해 알아보자.
HttpServletReqest
HttpServletRequest에 사용자가 요청한 데이터가 남겨 있고, 이를 통해 데이터를 주고 받을 수 있다.
우선 home.jsp에 다음과 같이 id와 pw를 입력받아 제출할 수 있는 양식을 만든다.
action을 보면 /com/sample로 request하게 하였고, post방식을 사용하였다.
<form class="form-login" action = "<%=content%>/sample" method = "post">
<input type = "text" class="input" name = "id" placeholder="ID" required>
<input type = "password" class="input" name = "pw" placeholder="PW" required>
<button class="btn" type="submit"> 로그인 </button>
</form>
이제 Controller를 살펴보면, HttpServletRequest 객체를 받아 id와 pw에 해당하는 파라미터를 처리하고, 결과페이지로 전송함을 확인할 수 있다.
@Controller
public class SampleController {
@RequestMapping("/sample")
public String samplecontent3(HttpServletRequest httpServletRequest, Model model) {
String id = httpServletRequest.getParameter("id");
String pw = httpServletRequest.getParameter("pw");
model.addAttribute("id", id);
model.addAttribute("pw", pw);
return "/sample/sampleResult";
}
}
sampleReuslt.jsp에서 id, pw를 출력하게 하여 확인할 수 있다.
아니면 다음과 같이 ReqeustParam을 사용하여 바로 받을 수 있다.
@RequestMapping("/sampleCheck")
public String Check(@RequestParam("id") String id, @RequestParam("pw") String pw, Model model) {
model.addAttribute("id", id);
model.addAttribute("pw", pw);
return "/sample/sampleResult";
}
}
커맨더 객체를 이용하기.
각각의 필드에 대해, 객체로 묶어 전달할 경우 간단하게 사용할 수 있다.
위의 id와 pw를 포함하는 Member 클래스를 정의하고 parameter로 받게 메소드를 정의하면
Spring에서 알아서 데이터를 Member 필드에 자동으로 넣고, 뷰로 넘기면 그대로 넘기게 해준다.
@RequestMapping("/sample")
public String samplecontent(Member member) {
return "/sample/sampleResult";
}
받을때는 이렇게 처리하면 된다. 이때 객체의 이름은 클래스명과 동일해야한다.
<p>ID = ${member.id}</p>
<p>PW = ${member.pw}</p>
여기서 @ModelAttribute를 사용한다면, 객체의 이름을 변경해서 사용할 수 있다.
public String samplecontent(@ModelAttribute("mem") Member member)
//view에서 mem.id로 사용
@PathVariable 어노테이션으로 경로에 변수를 넣을수도 있다.
@RequestMapping("/sample/{id}")
public String samplecontent(@PathVariable String id, Model model) {
model.addAttribute("id", id);
return "/sample/sampleResult";
}
이런식으로 처리하면, /sample/123과 같은 경로에서 123을 id로 읽어올 수 있게 된다.
GET/POST
@RequestMapping에서 요청을 받을때 Get과 Post를 구분할 수도 있다.
@RequestMapping(method = RequestMethod.GET, value = "/sample")
여기서 form에서 역시 다음처럼 Get으로 보내야 하는데
<form class="form-login" action = "/com/sample" method = "get">
만약 일치하지 않는다면 405에러가 발생한다.
또한 Get방식으로 전송하는 경우, 다음과 같이 경로에 parameter값이 같이 출력된다.
리다이렉트 (redircet)
다른 페이지로 이동할 때 사용한다.
@RequestMapping("/sample")
public String samplecontent(@ModelAttribute("mem") Member member) {
if(member.getId().equals("birdmissile")) return "redirect: birdmissile";
else return "redircet: elsemissile";
}
이런식으로 구현하게 되면, Id가 birdmissile인 경우 @RequestMapping(/birdmissile)의 메소드를 실행하고, 아니면 @RequestMapping(/elsemissile)을 실행하게 된다.
redirect로 jsp의 절대경로를 줄 수도 있다.
return "redirect : http://loacalhost:8181/com.xxxx.xxxx/aaaa.jsp"
'코딩 > 스프링 [JAVA]' 카테고리의 다른 글
Spring Boot CORS header 'Access-Control-Allow-Origin' 에러 (0) | 2021.03.04 |
---|---|
Form 데이터 검증 [ Spring, Validator, @Valid, hibernate ] (0) | 2021.01.14 |
스프링 컨트롤러 [Spring, RequestMapping] (0) | 2021.01.14 |
Spring MVC [Controller, servlet-context, eclipse] (1) | 2021.01.12 |
AOP (Aspect Oriented Programming) [Spring] (0) | 2021.01.11 |
Comment