반응형
01. 사용자가 전달한 값을 요청처리 메소드가 받는법 1
[🖤Model] ParamController.java
package xyz.itwill10.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class ParamController {
💚[GET] 방식으로 요청 처리 메소드 호출 : /param
@RequestMapping(value = "/param", method = RequestMethod.GET)
public String form() {
return "param_form";
}
💚[POST] 방식으로 요청 처리 메소드 호출 : /param + 전달값 받기
- 방법1 HttpServletRequest 객체 이용해 POST로 전달된 값 주세요
- (Spring은 HttpServletRequest객체를 잘 사용하지 않음)
//요청 처리 메소드에 HttpServletRequest 인터페이스를 자료형으로 매개변수를 선언하면 Front Controller에게 클라이언트의 요청 정보가 저장된 객체를 제공받아 사용 가능
// => HttpServletRequest 객체의 메소드를 호출하여 페이지 요청 시 전달된 값을 반환받아 처리
@RequestMapping(value = "/param", method = RequestMethod.POST)
public String result(HttpServletRequest request) throws UnsupportedEncodingException {
request.setCharacterEncoding("utf-8");
String food = request.getParameter("food");
request.setAttribute("food", food);
return "param_display";
}
- 방법2 원시형(String) 이용해 POST로 전달된 값 주세요
- 인코딩 필터 클래스 등록해서 이용 필요+ Model 객체에 값 저장
//요청 처리 메소드에서 페이지 요청시 전달되는 값의 이름과 같은 이름으로 [원시형(자동형변환되어저장됨) 또는 String 클래스]의
//매개변수를 선언하면 Front Controller에 의해 전달값이 매개변수에 자동으로 저장되어 제공
// => 원시형의 매개변수에 전달된 값이 없거나 자료형에 맞지 않으면 400 에러코드 발생
// => 전달값의 이름과 매개변수의 이름이 같지 않을 경우 String 매개변수에는 [null] 저장
// 매개변수를 이용하여 전달값을 제공받기 전에 리퀘스트 몸체부에 저장되어 전달되는 값에 대한 문자형태(캐릿터셋) 변경 - 인코딩 필터 이용
// => 필터(Filer) : 웹프로그램 실행 전과 후에 실행될 명령 제공
// => [web.xml] 파일에 필터를 등록하여 사용
// => 필터는 Front Controller 전에 위치되어 요청과 응답 관련 정보 변경 가능 - [WAS]에 의해 제어
// => 클라이언트의 모든 요청에 대해 요청정보가 저장된 리퀘스트 메세지의 몸체부의 문자형태를 변경하는 인코딩 필터가 사용되도록 [web.xml] 파일을 설정
@RequestMapping(value = "/param", method = RequestMethod.POST)
public String result(String food, Model model) {
model.addAttribute("food",food);
return "param_display";
}
- 방법3 원시형(String) + @RequestParam어노테이션 이용해 POST로 전달된 값 주세요
- 인코딩 필터 클래스 등록해서 이용 필요 + Model 객체에 값 저장
//전달값을 저장하기 위한 매개변수에 @RequestParam 어노테이션 사용 - 권장
//@RequestParam : 전달값을 매개변수에 저장하기 위한 어노테이션
// => "매개변수의 이름과 같은 이름의 전달값이 없는 경우" 400 [에러 발생] : Bad Request - 나쁜 요청
// => 전달값의 이름을 매개변수의 이름과 같도록 하여 매개변수에 "반드시 전달값이 저장되도록 설정"하기 위한 어노테이션
// => 매개변수의 이름과 같은 이름인데, 사용자의 전달값이 없을 경우 null String 전달됨
@RequestMapping(value = "/param", method = RequestMethod.POST)
public String result(@RequestParam String food, Model model) {
model.addAttribute("food",food);
return "param_display";
}
- 방법4 원시형(String) + @RequestParam어노테이션 + value + required속성 이용해 POST로 전달된 값 주세요
- 인코딩 필터 클래스 등록해서 이용 필요 + Model 객체에 값 저장
//value 속성 : 전달값의 이름을 속성값으로 설정
// => @RequestParam 어노테이션의 value 속성을 사용하여 전달값의 이름으로 값을 제공받아 매개변수에 저장 가능
// => 전달값의 이름과 매개변수의 이름이 다른 경우 사용 - 다른 속성이 없는 경우 속성값만 설정 가능
//required 속성 : false(미필수) 또는 true (필수 - 기본) 중 하나를 속성값으로 설정
// => @RequestParam 어노테이션으로 전달값이 매개변수에 전달되어 저장되는 필수 여부를 구분하기 위한 속성
// => true : foodName으로 전달되는 값이 "반드시" 있어야해!!
// => false : foodName으로 전달되는 값이 없어도 괜찮아~ null이 저장될거야~
// => 그런데 required 속성값으로 false 쓸 거면 @RequestParam어노테이션을 차라리 안쓰는 것이 효율적
@RequestMapping(value = "/param", method = RequestMethod.POST)
public String result(@RequestParam(value = "foodName", required = true) String food, Model model) {
model.addAttribute("food",food);
return "param_display";
}
- 방법5 원시형(String) + @RequestParam어노테이션 + value + defaultValue속성 이용해 POST로 전달된 값 주세요
- 인코딩 필터 클래스 등록해서 이용 필요 + Model 객체에 값 저장
//defaultValue 속성 : 전달값과 매개변수의 이름이 다른 경우 사용될 기본값을 속성값으로 설정
// => 전달값이 없는 경우에도 매개변수에 null 대신 저장될 기본값으로 설정
// => ex) 페이징 처리 시 이용 (전달값이 없는 경우 1페이지로)
@RequestMapping(value = "/param", method = RequestMethod.POST)
public String result(@RequestParam(value = "foodName", defaultValue = "된장찌개") String food, Model model) {
model.addAttribute("food",food);
return "param_display";
}
}
[🖤View] param_form.jsp - 입력페이지
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SPRING</title>
</head>
<body>
<h1>입력 페이지</h1>
<hr>
<form action="param" method="post">
내가 좋아하는 음식 : <input type="text" name="foodName">
<button type="submit">입력완료</button>
</form>
</body>
</html>
[🖤View] param_display.jsp - 출력페이지
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SPRING</title>
</head>
<body>
<h1>출력페이지</h1>
<hr>
<h2>오늘의 점심은 (${food})로 결정 하겠습니다.</h2>
</body>
</html>
02. 사용자가 전달한 값을 요청처리 메소드가 받는법 2
[🖤DTO] Member.java
package xyz.itwill10.dto;
import lombok.Data;
//회원정보를 저장하기 위한 클래스 - VO클래스 : 값을 저장할 목적의 객체를 생성하기 위한 클래스
//=> DAO 클래스에서 사용될 경우 DTO 클래스의 기능 제공
@Data
public class Member {
private String id;
private String passwd;
private String name;
private String email;
}
[🖤Model] JoinController.java
package xyz.itwill10.controller;
import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import xyz.itwill10.dto.Member;
@Controller
public class JoinController {
💚[GET] 방식으로 요청 처리 메소드 호출 : /join
// [/join : 절대경로] VS [join : 상대경로]
@RequestMapping(value = "/join", method=RequestMethod.GET)
public String join() {
return "join_form";
}
💚[POST] 방식으로 요청 처리 메소드 호출 : /join
- 🍑원시형(String) + @RequestParam어노테이션 이용해 POST로 전달된 값 주세요
- @RequestParam어노테이션을 통해 전달값을 하나씩 전달받아 사용
//🍑[방법1] @RequestParam
//전달값을 제공받아 [Request Scope 속성값으로 저장]하고 속성값을 출력하기 위한 JSP 문서의 뷰이름을 반환하는 요청 처리 메소드
// => 전달값과 같은 이름의 매개변수에 전달값을 제공받아 요청 처리 메소드에서 사용
// => @RequestParam 어노테이션을 사용하여 매개변수와 같은 이름으로 전달되는 값이 없는 경우 [400 에러코드 발생]
@RequestMapping(value = "/join", method=RequestMethod.POST)
public String join(@RequestParam String id, @RequestParam String passwd, @RequestParam String name, @RequestParam String email, Model model) {
model.addAttribute("id", id);
model.addAttribute("passwd", passwd);
model.addAttribute("name", name);
model.addAttribute("email", email);
return "join_display";
}
- 🍑원시형(String) + @ModelAttribute어노테이션 이용해 POST로 전달된 값 주세요
- @ModelAttribute어노테이션을 통해 전달값을 VO객체로 전달받아 사용
//🍑[방법2] @ModelAttribute : Request Scope 속성값으로 저장까지 해줌
//전달값을 제공받아 [Request Scope 속성값으로 저장]하고 속성값을 출력하기 위한 JSP 문서의 뷰이름을 반환하는 요청 처리 메소드
// => 전달값과 같은 이름의 매개변수에 전달값을 제공받아 요청 처리 메소드에서 사용
// => @ModelAttribute 어노테이션을 사용하여 매개변수에 저장된 값을 속성값으로 저장하여 뷰(View) 제공
//@ModelAttribute : 객체(값)을 뷰에게 제공하기 위한 어노테이션
// => 메소드에 @ModelAttribute 어노테이션을 사용하면 메소드의 반환값을 속성값으로 저장하여 요청 처리 클래스의 모든 요청 처리 메소드의 뷰에게 제공
// => 매개변수에 @ModelAttribute 어노테이션을 사용하면 매개변수에 저장된 값을 속성값으로 저장하여 요청 처리 메소드의 뷰에게 제공
//value 속성 : 뷰(JSP)에서 속성값을 사용하기 위한 속성명을 속성값으로 설정
// => 다른 속성이 없는 경우 속성값만 설정 가능
// => ex. @ModelAttribute("id") : JSP가 EL표현식에서 쓰는 이름 = id
//@ModelAttribute 어노테이션을 사용하면 매개변수와 같은 이름의 전달값이 없어도
//[400 에러코드 미발생]
@RequestMapping(value = "/join", method=RequestMethod.POST)
public String join(@ModelAttribute("id") String id, @ModelAttribute("passwd") String passwd, @ModelAttribute("name") String name,@ModelAttribute("email") String email) {
return "join_display";
}
- 🍑원시형(String) + @RequestParam어노테이션 이용해 POST로 전달된 값 주세요
- @RequestParam어노테이션을 통해 전달값을 하나씩 전달받아 사용
//🍑[방법3] @RequestParam : Member객체의 필드값으로 저장 -> Request Scope 속성값으로 저장
//전달값을 매개변수로 제공받아 [객체의 필드값으로 저장]하고 객체를 [Request Scope 속성값으로 저장]하고 속성값을 출력하기 위한 JSP 문서의 뷰이름을 반환하는 요청 처리 메소드
@RequestMapping(value = "/join", method=RequestMethod.POST)
public String join(@RequestParam String id, @RequestParam String passwd, @RequestParam String name, @RequestParam String email, Model model) {
Member member=new Member();
member.setId(id);
member.setPasswd(passwd);
member.setName(name);
member.setEmail(email);
//model.addAttribute("member",member);
//Model.addAttribute(Object attributeValue) : Model 객체에 속성명과 속성값(무조건 객체만)을 저장하기 위한 메소드 - Request Scope
// => 속성값의 자료형(클래스)을 속성명으로 자동 설정 - 첫문자는 소문자로 변환됨
// => 주의) 속성값으로 원시값(또는 Wrapper객체) 또는 String 객체 저장 불가능
model.addAttribute(member);
return "join_display";
}
- 🍓Command 객체(Member) + @ModelAttribute어노테이션 이용해 POST로 전달된 값 주세요
- @ModelAttribute어노테이션을 통해 전달값을 VO객체로 전달받아 사용
//🍓[방법4] @ModelAttribute : Command객체로 만들어줌
//페이지의 전달값이 "있는" 경우 요청 처리 메소드의 매개변수 자료형을 VO 클래스(DTO 클래스)로 작성하면 Front Controller는 VO 클래스를 객체로 생성하여 매개변수에 전달하여 저장
// => 주의) VO 클래스의 객체는 [전달값의 이름과 같은 필드]에 전달값을 제공받아 저장
// => 반드시 [전달값의 이름]과 [필드의 이름]이 같도록 작성
// => 단순히 Member 객체를 만들어주는 것이 아닌, 객체의 필드에도 전달값이 저장됨
// => 만약, 전달값이 없다면 null이 저장됨
// => 만약, 전달값이 2개만 전달되었다면, 2개만 저장하고 나머지는 기본값이 저장됨
// Command 객체 : 전달값을 제공받아 필드에 저장된 객체로 속성값으로 저장하여 요청 처리 메소드의 뷰에서 사용될 수 있도록 제공
// => @ModelAttribute 어노테이션을 사용하여 객체를 속성값으로 저장해 뷰에게 제공
// => @ModelAttribute 어노테이션 생략 가능
// => @ModelAttribute 어노테이션의 value 속성을 생략하면 Command 객체의 자료형(클래스)이
//속성명으로 자동 설정 - 첫문자는 소문자로 변환
@RequestMapping(value = "/join", method=RequestMethod.POST)
public String join(@ModelAttribute Member member) {
return "join_display";
}
- 🍓Command 객체(Member) + @ModelAttribute어노테이션 + value속성 이용해 POST로 전달된 값 주세요
- @ModelAttribute어노테이션을 통해 전달값을 VO객체로 전달받아 사용
//🍓[방법5] @ModelAttribute : Command객체로 만들어줌 + value속성
//@ModelAttribute 어노테이션에 value 속성을 사용하여 뷰에게 제공될 속성값의 속성명을 변경
@RequestMapping(value = "/join", method=RequestMethod.POST)
public String join(@ModelAttribute(value = "mem") Member member, Model model) {
if(member.getId().equals("abc123")) {//아이디가 중복된 경우
model.addAttribute("message", "이미 사용중인 아이디를 입력 하였습니다.");
return "join_form"; //입력페이지 이동
}
return "join_display";
}
- 🍓Map + @RequestParam어노테이션 이용해 POST로 전달된 값 주세요
- @RequestParam어노테이션을 통해 전달값을 Map객체로 제공받아 사용 : VO클래스가 없는 경우 ex)키워드검색
//🍓[방법6] @RequestParam : Map객체 이용
//페이지의 전달값이 "있는" 경우 요청 처리 메소드의 매개변수 자료형을 Map 인터페이스로 작성하면 Front Controller는 Map 객체를 생성하여 매개변수에 전달하여 저장
// => 모든 전달값을 Map 객체의 엔트리로 추가되어 매개변수로 제공
// => Map 객체의 엔트리(Entry)에는 전달값의 이름을 맵키(MapKey - String)로 제공받고
// => 전달값을 맵값(MapValue - String)으로 제공받아 저장
// => 주의) Map 인터페이스로 작성된 매개변수에는 반드시 @RequestParam 어노테이션을 사용해야만
// => Map 객체의 맵값으로 전달값을 제공받아 사용 가능
@RequestMapping(value = "/join", method=RequestMethod.POST)
public String join(@RequestParam Map<String, String> map, Model model) {
model.addAttribute("mem",map);
return "join_display";
}
}
[🖤View] join_form.jsp - 입력페이지
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SPRING</title>
</head>
<body>
<h1>회원가입</h1>
<hr>
<form action="join" method="post">
<table>
<tr>
<td>아이디</td>
<td><input type="text" name="id" value="${mem.id }"></td>
</tr>
<tr>
<td>비밀번호</td>
<td><input type="text" name="passwd" value="${mem.passwd }"></td>
</tr>
<tr>
<td>이름</td>
<td><input type="text" name="name" value="${mem.name }"></td>
</tr>
<tr>
<td>이메일</td>
<td><input type="text" name="email" value="${mem.email }"></td>
</tr>
<tr>
<td colspan="2"><button type="submit">회원가입</button></td>
</tr>
</table>
</form>
<p style="color: red">${message }</p>
</body>
</html>
[🖤View] join_display.jsp - 출력페이지
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SPRING</title>
</head>
<body>
<h1>회원가입확인</h1>
<hr>
<!--
<%--
<ul>
<li>아이디 = ${id }</li>
<li>비밀번호 = ${passwd }</li>
<li>이름 = ${name }</li>
<li>이메일 = ${email }</li>
</ul>
--%>
-->
<!--
<%--
<ul>
<li>아이디 = ${member.id }</li>
<li>비밀번호 = ${member.passwd }</li>
<li>이름 = ${member.name }</li>
<li>이메일 = ${member.email }</li>
</ul>
--%>
-->
<ul>
<li>아이디 = ${mem.id }</li>
<li>비밀번호 = ${mem.passwd }</li>
<li>이름 = ${mem.name }</li>
<li>이메일 = ${mem.email }</li>
</ul>
</body>
</html>
03. 사용자가 전달한 값을 요청처리 메소드가 받는법 3 - HttpSession객체
[🖤Model] LoginController.java
package xyz.itwill10.controller;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import xyz.itwill10.dto.Member;
@Controller
public class LoginController {
💚[GET] 방식으로 요청 처리 메소드 호출 : /login
@RequestMapping(value = "/login", method = RequestMethod.GET)
public String login() {
return "login_form";
}
💚[POST] 방식으로 요청 처리 메소드 호출 : /login
- [방법1] 원시형(String) + @RequestParam어노테이션 이용해 POST로 전달된 값 주세요
- @RequestParam어노테이션을 통해 전달값을 하나씩 전달받아 사용
//전달값을 제공받아 인증 처리 후 권한 관련 정보를 Session Scope 속성값으로 저장하고 로그인 성공 메세지를 출력하는 JSP 문서의 뷰네임을 반환하는 요청 처리 메소드
// => 전달값을 String 매개변수에 하나씩 제공받아 사용 가능
// => Session Scope 속성값을 저장하기 위한 매개변수를 이용하여 HttpSession 객체를 제공받아 사용
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(@RequestParam String id, @RequestParam String passwd, HttpSession session, Model model) {
if(!id.equals("abc123") || !passwd.equals("123456")) { //인증 실패
//에러 관련 정보를 Request Scope 속성값으로 저장 - 입력페이지(JSP)에서 출력 가능
//Request Scope : 현재 실행중인 요청 처리 메소드와 포워드 이동되는 뷰에서만 속성값을 제공받아 사용 가능
model.addAttribute("message", "아이디 또는 비밀번호를 잘못 입력 하였습니다.");
model.addAttribute("id", id);
model.addAttribute("passwd", passwd);
return "login_form"; //입력페이지로 이동
}
//인증성공 - 권한 관련 정보를 Session Scope 속성값으로 저장
//Session Scope : 동일한 세션을 사용하는 모든 요청 처리 메소드와 뷰에서 속성값을 제공받아 사용 가능
session.setAttribute("loginId", id);
return "login_display";
}
- [방법2] Command 객체(Member) + @ModelAttribute어노테이션 이용해 POST로 전달된 값 주세요
- @ModelAttribute어노테이션을 통해 전달값을 VO객체로 전달받아 사용
//전달값을 Command 객체로 제공받아 사용
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(@ModelAttribute Member member, HttpSession session, Model model) {
if(!member.getId().equals("abc123") || !member.getPasswd().equals("123456")) { //인증 실패
model.addAttribute("message", "아이디 또는 비밀번호를 잘못 입력 하였습니다.");
return "login_form"; //입력페이지로 이동
}
//인증성공
session.setAttribute("loginId", member.getId());
return "login_display";
}
}
[🖤View] login_form.jsp - 입력페이지
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<meta charset="UTF-8">
<title>SPRING</title>
</head>
<body>
<h1>로그인</h1>
<hr>
<form action="login" method="post">
<table>
<tr>
<td>아이디</td>
<%-- <td><input type="text" name="id" value="${id }"></td> --%>
<td><input type="text" name="id" value="${member.id }"></td>
</tr>
<tr>
<td>비밀번호</td>
<!-- <%--<td><input type="text" name="passwd" value="${passwd }"></td> --%> -->
<td><input type="text" name="passwd" value="${member.passwd }"></td>
</tr>
<tr>
<td colspan="2"><button type="submit">로그인</button></td>
</tr>
</table>
</form>
<p style="color: red">${message }</p>
</body>
</html>
[🖤View] login_display.jsp - 출력페이지
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SPRING</title>
</head>
<body>
<h1>로그인 성공</h1>
<hr>
<h2>${loginId }님, 환영합니다.</h2>
</body>
</html>
반응형
'framework > spring mvc' 카테고리의 다른 글
[springMVC] 12. HttpSession객체 | @SessionAttributes (0) | 2024.08.04 |
---|---|
[springMVC] 11. 포워드이동 VS 리다이렉트이동 (0) | 2024.08.04 |
[springMVC] 9. 요청방식을 지정해서 요청처리 메소드 만드는법 @GetMapping @PostMapping (0) | 2024.08.04 |
[springMVC] 8. 메소드에 의해 반환되는 객체(값)를 속성값으로 저장하여 현재 클래스에 작성된 모든 요청 처리 메소드의 뷰에게 제공하는 방법 @ModelAttribute (0) | 2024.08.04 |
[springMVC] 7. 요청 처리 메소드에 의해 처리된 결과를 뷰(JSP 문서)에 제공하는 방법 (0) | 2024.08.04 |