자바버전, 스프링버전 변경 가능.
수정 후 Maven - Update Project
<properties>
<java-version>11</java-version>
<org.springframework-version>5.0.7.RELEASE</org.springframework-version>
<org.aspectj-version>1.6.10</org.aspectj-version>
<org.slf4j-version>1.6.6</org.slf4j-version>
</properties>
Controller에서 메서드가 단순히 GET방식으로 view로 URL 연결만 하고, 다른 하는 일이 없을 때
setvlet-context.xml에 view-controller로 등록해서 사용 가능.
<!-- 실제 이름은 mvc:view-controller, view-controller는 GET요청만 허용함.POSTMAN으로 확인 가능. -->
<view-controller path="/register/add" view-name="registerForm"/>
registerForm에서 입력받은 값을 user로 담는 역할.
getter/setter 생성 필요 -> EL에서 사용
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 + "]";
}
}
<%@ page import="java.net.URLDecoder" %>
<!-- 컨트롤러 유효성 검사를 통과 못할 때, msg를 인코딩해서 URL로 보낸 값을 registerForm.jsp가 받아서 디코딩해서 출력한다. -->
<div id="msg" class="msg"> ${URLDecoder.decode(param.msg, "utf-8")} </div>
//param.id에서 user.id로 변경
<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>
<!-- 첫번째 방법은 EL paramValues.sns[0]배열로 값을 받음 -->
<!-- 두번째 방법인 user로 한번에 값을 받으면 이렇게만 써도 배열로 출력 가능 -->
<h1>sns=${user.sns}</h1>
package com.fastcampus.ch2;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PostMapping;
@Controller
public class RegisterController {
// @RequestMapping(value="/register/save", method={RequestMethod.GET, RequestMethod.POST})
// @RequestMapping("/register/add")
// @GetMapping("/register/add") //단순히 registerForm으로 이동만 시켜줌.
// public String register() { //servlet-context.xml에서 view-controller 빈으로 등록 가능.
// return "registerForm"; // WEB-INF/views/registerForm.jsp
// }
// @RequestMapping(value="/register/save", method=RequestMethod.POST) //쿼리스트링으로 회원가입 못 하게 막기.
@PostMapping("/register/save") //위와 동일. Spring 4.3부터
public String save(User user, Model m) throws Exception {
//1. 유효성 검사
if(!isValid(user)) {
//Controller에서 URL을 직접 만들면 인코딩을 해 줄수 없음.
String msg = URLEncoder.encode("id를 잘못입력하셨습니다.", "utf-8");
m.addAttribute("msg", msg); //넘겨줄 값이 여러개면 이렇게 모델에 담아서 넘겨주면 됨.
//but redirect는 재요청이므로 register/add로 모델을 보낼 수 없지만, Spring이 가능하게 해준다.
return "redirect:/register/add";
//위 두 줄과 같다.
// return "redirect:/register/add?msg="+msg; //URL재작성(rewriting)
}
//2. DB에 신규회원 정보를 저장(뒤에 진도에서 수업함.)
return "registerInfo";
}
private boolean isValid(User user) {
return true;
}
}