스프링 컨트롤러에서 파라미터 받는 여러 방법
2022. 1. 14. 08:45ㆍFramework
반응형
로그인 할 때 컨트롤러로 넘어가는 키 값은 id와 pwd
<form action="login.me" method="post">
<div>
<label for="userId">ID :</label>
<input type="text" name="id"> <br>
<label for="userPwd">Password:</label>
<input type="password" name="pwd">
</div>
<div class="loginFooter">
<button type="submit">로그인</button>
<button type="button">취소</button>
</div>
</form>
// 1. HttpServletRequest를 이용해서 전달받는 방법
// 파라미터에 HttpServletRequest를 기술해야 함
@RequestMapping("login.me")
public String loginMember(HttpServletRequest request) {
String userId = request.getParameter("id");
String userPwd = request.getParameter("pwd");
System.out.println("ID : " + userId);
System.out.println("PWD : " + userPwd);
return "main";
}
// 2. @RequestParam 어노테이션을 이용하는 방법
// request.getParameter("키"):밸류의 역할을 대신해주는 어노테이션
@RequestMapping("login.me")
public String loginMember( @RequestParam(value="id") String userId,
@RequestParam(value="pwd") String userPwd ) {
System.out.println("ID : " + userId);
System.out.println("PWD : " + userPwd);
return "main";
}
// 3. @RequestParam 어노테이션을 생략하는 방법
// 넘어오는 키값 똑같이 매개변수에 적어주면 알아서 받아줌
@RequestMapping("login.me")
public String loginMember(String id, String pwd) {
// System.out.println("ID : " + id);
// System.out.println("PWD : " + pwd);
Member m = new Member();
m.setUserId(id);
m.setUserPwd(pwd);
return "main";
}
<form action="login.me" method="post">
<div>
// 4번째 방법을 이용하기 위해서는 "키값이 반드시 vo객체의 필드명과 같아야 함"
<label for="userId">ID :</label>
<input type="text" name="userId"> <br>
<label for="userPwd">Password:</label>
<input type="password" name="userPwd">
</div>
<div class="loginFooter">
<button type="submit">로그인</button>
<button type="button">취소</button>
</div>
</form>
// 4. 커맨드 객체 방식
// 스프링컨테이너가 해당 객체를 기본생성자로 생성 후
// setter메소드 찾아서 요청 시
// 전달값을 해당 필드에 담아주는 내부적인 원리
@Autowired // di(의존성주입)
private MemberService mService;
@RequestMapping("login.me")
public String loginMember(Member m, Model model, HttpSession session) {
// 아이디와 비밀번호의 키값을 필드명과 동일하게 변경!
// System.out.println("ID :" + m.getUserId());
// System.out.println("PWD: " + m.getUserPwd());
Member loginUser = mService.loginMember(m);
/*
* request가 존재하지 않는데 어떻게 응답데이터를 request, session스코프에 담나여?
* 요청 처리 후 응답페이지로 포워딩 또는 url 재요청, 응답데이터 담는 법
*
* 스프링에서 제공하는 Model객체(=requestScope)를 사용!
* 필요한 객체가 있다면 매개변수에 얼마든지 추가하면 됨
* 포워딩할 뷰로 전달하려는 데이터를 맵형식(key-value)을 담을 수 있는 영역
* serAttribute가 아닌 addAttribute메소드 이용
*/
if(loginUser == null) {
// 로그인 실패 => 에러문구를 requestScope에 담고 에러페이지로 포워딩
model.addAttribute("errorMsg", "로그인 실패");
return "common/errorPage"; // 포워딩할 뷰를 return
} else {
// 로그인 성공 => loginUser를 sessionScope에 담고 메인페이지url 재요청
// session스코프에 담으려면 HttpSession session 필요 (매개변수에 추가)
session.setAttribute("loginUser", loginUser);
return "redirect:/"; // redirect:는 url재요청. /를 붙이면 메인페이지 재요청
}
}
포워딩할 뷰를 return할 때
전체 경로를 작성해주지 않아도 되는 이유는
servlet-context.xml에 기술되어 있다
prefix의 밸류는 /WEB-INF/views/
suffix의 밸류는 .jsp로 등록되어있기 때문에
그 사이의 경로만 적어주면 끝

/*
* Model객체와 return으로 포워딩하는 방법과 비슷한 다른 방법
* 스프링에서 제공하는 ModelAndView객체를 이용하는 방법
*
* Model은 데이터를 key-value세트로 담을수 있는 공간이라고 한다면
* view는 응답뷰에 대한 정보를 담을 수 있는 공간
*/
@RequestMapping("login.me")
public ModelAndView loginMember(Member m, HttpSession session, ModelAndView mv) {
Member loginUser = mService.loginMember(m);
if(loginUser == null) {
// 로그인 실패 => 에러문구를 requestScope에 담고 에러페이지로 포워딩
mv.addObject("errorMsg", "로그인 실패");
mv.setViewName("common/errorPage");
} else {
// 로그인 성공 => loginUser를 sessionScope에 담고 메인페이지url 재요청
session.setAttribute("loginUser", loginUser);
mv.setViewName("redirect:/");
}
return mv;
}
반응형
'Framework' 카테고리의 다른 글
Lombok 롬복 설치 (0) | 2022.01.15 |
---|---|
스프링 한글 깨짐 현상 인코딩 작업 (UTF-8) (0) | 2022.01.14 |
스프링에게 주도권 부여하기 위해 bean등록 (0) | 2022.01.13 |
스프링 프레임워크 세팅2 (0) | 2022.01.13 |
스프링 프레임워크 세팅 (0) | 2022.01.11 |