1. 회원 가입 화면 발전시키기
GET방식으로 하다보면 URL에 정보들이 노출되니
GET방식을 막고 POST 방식으로만 회원가입을 하도록 한다.
(POST mapping이 4.3버전 이후라서 pom.xml에 가서 스프링 버전을 5.0.7버전으로 업그레이드 시켰다.)
<java />
@RequestMapping("/register/save", method=RequestMethod.POST)
와 같이, RequestMethod로 길게 써야만 하는 방식을
<java />
@PostMapping("/register/save")
위와 같이 줄여쓸 수 있다.
<java />
@Controller
public class RegisterController {
// @RequestMapping("/register/save", method={RequestMethod.POST,RequestMethod.GET}) //POST와 GET방식 둘 다 가능하도록 배열에 넣음
// @RequestMapping("/register/add") //신규회원 가입 화면
@GetMapping("/register/add")
public String register() {
return "registerForm"; //WEB-INF/views/registerForm.jsp
}
// @RequestMapping("/register/save", method=RequestMethod.POST)
@PostMapping("/register/save")
public String save() {
return "registerInfo";
}
}
단순히 URL과 뷰를 연결시켜주므로,
뷰 컨트롤러를 만들어보자.
<java />
// @RequestMapping("/register/save", method={RequestMethod.POST,RequestMethod.GET}) //POST와 GET방식 둘 다 가능하도록 배열에 넣음
// @RequestMapping("/register/add") //신규회원 가입 화면
// @GetMapping("/register/add")
// public String register() {
// return "registerForm"; //WEB-INF/views/registerForm.jsp
// }
주석처리하고

servlet-context.xml (스프링의 웹 관련 설정파일)
<html />
<view-controller path="/register/add" view-name="registerForm"/>

추가
추가함으로써
주석 처리한 부분은 쓸모가 없어짐!
(단순히 url과 view를 연결하므로 뷰 컨트롤러를 만들어 코드를 줄여줌)
뷰 컨트롤러는 GET요청만 허용함!
신규 회원 가입을 할 때 유효성 검사를 할 수 있도록 한다.
<java />
package com.fastcampus.ch2;
public class User {
private String id;
private String pwd;
private String name;
private String email;
private String birth;
private String sns;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getBirth() {
return birth;
}
public void setBirth(String birth) {
this.birth = birth;
}
public String getSns() {
return sns;
}
public void setSns(String sns) {
this.sns = sns;
}
@Override
public String toString() {
return "User [id=" + id + ", pwd=" + pwd + ", name=" + name + ", email=" + email + ", birth=" + birth + ", sns="
+ sns + "]";
}
}
<java />
@PostMapping("/register/save")
public String save(User user,Model m) {
//1. 유효성 검사
if(!isValid(user)) {
String msg ="id를 잘못입력하셨습니다.";
//유효하지 않으면 다시 회원가입 화면으로
return "redirect:/register/add?msg="+msg; //URL 재작성 (rewriting) -> redirect에 msg를 전달해줌
}
//유효하면 회원 정보 화면 보여주기
return "registerInfo";
}
private boolean isValid(User user) {
return false;
}
}
msg가 한글이라, 브라우저에서 한글 url을 읽지 못한다.
그러므로 사용하는 것이 URLEncode이다.
<java />
@PostMapping("/register/save")
public String save(User user,Model m) throws Exception {
//1. 유효성 검사
if(!isValid(user)) {
String msg =URLEncoder.encode("id를 잘못입력하셨습니다.","utf-8"); // -> 예외 처리 필요
//유효하지 않으면 다시 회원가입 화면으로
return "redirect:/register/add?msg="+msg; //URL 재작성 (rewriting) -> redirect에 msg를 전달해줌
}
//유효하면 회원 정보 화면 보여주기
return "registerInfo";
}
뷰에서
인코딩한 것을 다시 디코딩해줘야하므로,
registerForm.jsp로 가서
<html />
<div id="msg" class="msg">${URLDecoder.decode(param.msg, "utf-8")} </div>
디코딩을 해준다.
(안해줘도 회원 가입 오류 시 메시지는 URL에 잘 출력되긴 했다.)
맨 위에 추가
<html /><%@ page import="java.net.URLDecoder" %>
URL rewriting말고
또 다른 방법으로 모델을 이용하는 방법이 있다.
<html />@PostMapping("/register/save") public String save(User user,Model m) throws Exception { //1. 유효성 검사 if(!isValid(user)) { String msg =URLEncoder.encode("id를 잘못입력하셨습니다.","utf-8"); // -> 예외 처리 필요 //유효하지 않으면 다시 회원가입 화면으로 // return "redirect:/register/add?msg="+msg; //URL 재작성 (rewriting) -> redirect에 msg를 전달해줌 m.addAttribute("msg",msg); return "redirect:/register/add"; } //유효하면 회원 정보 화면 보여주기 return "registerInfo"; }
msg 말고 넘겨줘야 할 값이 여러 개면
모델에 담아서 넘긴다.
모델은 뷰에 전달하는 건데
지금은 redirect를 사용하므로 (다시 요청, 재요청) 뷰에 전달할 수가 없다.
요청에 사용할 수가 없다.
모델에 msg를 넣어준다면, 위에 주석한 부분대로 처리해준다.
isValid 함수의 리턴값을 true로 한다. 그렇다면 이제 registerInfo가 나온다.
<java />
@PostMapping("/register/save")
public String save(User user,Model m) throws Exception {
//1. 유효성 검사
if(!isValid(user)) {
String msg =URLEncoder.encode("id를 잘못입력하셨습니다.","utf-8"); // -> 예외 처리 필요
//유효하지 않으면 다시 회원가입 화면으로
// return "redirect:/register/add?msg="+msg; //URL 재작성 (rewriting) -> redirect에 msg를 전달해줌
m.addAttribute("msg",msg);
return "redirect:/register/add";
}
//유효하면 회원 정보 화면 보여주기
return "registerInfo";
}
private boolean isValid(User user) {
return true;
}
}
registerInfo.jsp로 가서,
param을 모두 user로 바꾼다.
<html />
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h1>id=${user.id}</h1>
<h1>pwd=${user.pwd}</h1>
<h1>name=${user.name}</h1>
<h1>email=${user.email}</h1>
<h1>birth=${user.birth}</h1>
<h1>sns=${user.sns}</h1>
</body>
</html>
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.
패스트캠퍼스 [직장인 실무교육]
프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.
fastcampus.co.kr
'패캠 챌린지' 카테고리의 다른 글
패스트캠퍼스 챌린지 - 17일차 [스프링의 정석:남궁성과 끝까지 간다] (0) | 2023.03.08 |
---|---|
패스트캠퍼스 챌린지 - 16일차 [스프링의 정석:남궁성과 끝까지 간다] (0) | 2023.03.07 |
패스트캠퍼스 챌린지 - 14일차 [스프링의 정석:남궁성과 끝까지 간다] (0) | 2023.03.05 |
패스트캠퍼스 챌린지 - 13일차 [스프링의 정석:남궁성과 끝까지 간다] (0) | 2023.03.04 |
패스트캠퍼스 챌린지 - 12일차 [스프링의 정석:남궁성과 끝까지 간다] (0) | 2023.03.03 |