JSP에서 데이터를 컨트롤러로 전달하는 다양한 방법
1. VO/DTO (@ModelAttribute) 를 이용하는 경우
<form action="user/save" method="post">
아이디: <input type="text" name="userId"><br>
이름: <input type="text" name="userName"><br>
<input type="submit" value="전송">
</form>
📌 Controller
@PostMapping("/user/save")
public String saveUser(@ModelAttribute UserVO user) {
System.out.println("User ID: " + user.getUserId());
System.out.println("User Name: " + user.getUserName());
return "success";
}
2. request.getParameter() 를 이용하는 경우
<form action="user/save" method="post">
아이디: <input type="text" name="userId"><br>
이름: <input type="text" name="userName"><br>
<input type="submit" value="전송">
</form>
📌 Controller
@PostMapping("/user/save")
public String saveUser(HttpServletRequest request) {
String userId = request.getParameter("userId");
String userName = request.getParameter("userName");
System.out.println("User ID: " + userId);
System.out.println("User Name: " + userName);
return "success";
}
3. @RequestParam 을 이용하는 경우
📌 Controller
@PostMapping("/user/save")
public String saveUser(@RequestParam("userId") String userId,
@RequestParam("userName") String userName) {
System.out.println("User ID: " + userId);
System.out.println("User Name: " + userName);
return "success";
}
4. @RequestBody 를 이용하는 경우 (JSON 요청 처리)
📌 JSP에서 데이터 전달 (AJAX 사용)
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
function sendData() {
var userData = {
userId: $("#userId").val(),
userName: $("#userName").val()
};
$.ajax({
type: "POST",
url: "user/save",
contentType: "application/json",
data: JSON.stringify(userData),
success: function(response) {
alert("데이터 전송 성공!");
}
});
}
</script>
아이디: <input type="text" id="userId"><br>
이름: <input type="text" id="userName"><br>
<button onclick="sendData()">전송</button>
📌 Controller
@PostMapping("/user/save")
public String saveUser(@RequestBody UserVO user) {
System.out.println("User ID: " + user.getUserId());
System.out.println("User Name: " + user.getUserName());
return "success";
}
5. @PathVariable 을 이용하는 경우 (URL 경로에서 데이터 전달)
📌 JSP에서 데이터 전달 (링크 사용)
<a href="user/user123">사용자 상세 보기</a>
📌 Controller
@GetMapping("/user/{userId}")
public String getUser(@PathVariable("userId") String userId) {
System.out.println("User ID: " + userId);
return "success";
}
6. @SessionAttribute 를 이용하는 경우 (세션에서 데이터 가져오기)
📌 Controller에서 세션에 데이터 저장
@PostMapping("/user/login")
public String login(HttpSession session) {
UserVO user = new UserVO();
user.setUserId("user123");
user.setUserName("홍길동");
session.setAttribute("user", user);
return "redirect:/user/info";
}
📌 Controller에서 세션 데이터 가져오기
@GetMapping("/user/info")
public String getUserInfo(@SessionAttribute("user") UserVO user) {
System.out.println("User ID: " + user.getUserId());
return "success";
}
📌 JSP에서 세션 데이터 사용 (sessionScope 활용)
아이디: ${sessionScope.user.userId} <br>
이름: ${sessionScope.user.userName}
📌 정리 (JSP에서 데이터 전달 방식 비교)
| 방법 | JSP 데이터 전달 방식 | Controller에서 받는 방식 |
|---|
VO/DTO (@ModelAttribute) | <form> name="userId" 사용 | @ModelAttribute UserVO user |
request.getParameter() | <form> name="userId" 사용 | request.getParameter("userId") |
@RequestParam | <form> name="userId" 사용 | @RequestParam("userId") String userId |
@RequestBody | AJAX + JSON 데이터 전송 | @RequestBody UserVO user |
@PathVariable | <a href="user/user123"> | @PathVariable("userId") String userId |
@SessionAttribute | session.setAttribute("user", UserVO) | @SessionAttribute("user") UserVO user |
✅ 어떤 방식으로 데이터를 보내야 할까?
- 일반적인 form 데이터를 보낼 때 →
@ModelAttribute 또는 @RequestParam 사용
- 개별 파라미터 값을 받을 때 →
request.getParameter() 또는 @RequestParam 사용
- JSON 데이터를 보낼 때 → AJAX +
@RequestBody 사용
- URL 경로 변수를 보낼 때 →
@PathVariable 사용
- 세션 데이터를 사용할 때 →
@SessionAttribute 사용