Form 데이터 주고 받기 [Spring, HttpServletRequest]
반응형

본 게시글은 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"

 

반응형