입력을 POST로 설정했지만 위처럼 URL에 직접 입력해서 회원가입을 할 수 있다. 이렇게 되면 회원가입을 자동으로 할 수 있는 위험이 있어서 GET요청을 막아야한다.
위처럼 코드를 수정한다.
@PostMapping을 써서 간략하게 작성할 수 있는데, PostMapping은 spring 4.3부터 적용되었다.
Maven Dependencies의 spring 버전을 보면 3.1.1이다.
pom.xml의 org.springframework-version을 5.0.7로 바꾼다. 바꾼 후에 Maven 업데이트를 해야 한다.
버전이 바뀐 것을 확인할 수 있다.
@PostMapping 어노테이션이 추가된다.
@RequestMapping("/register/add")을 @RequestMapping(value="/register/add", method={RequestMethod.GET, RequestMethod.POST})와 같이 쓸 수 있다. 둘은 같은 문장이고 method를 통해 GET, POST 요청을 결정할 수 있다.
GET요청을 할 때 400 에러가 발생한다.
register는 URL과 registerForm.jsp를 연결해주는 역할만 하지 이 메서드가 실제로 하는 일이 없어 view Controller로 바꾼다.
위 메서드를 주석처리하고 servlet-context에서 웹 설정을 바꾼다.
<view-controller path="/register/add" view-name="registerForm"></view-controller>
위 한 줄을 추가한다. path의 경로를 view-name의 jsp파일에 연결한다.
servlet-context에 beans 태그가 쓰는 xmlns이 4개가 있다. 각 schema에서 정의한 태그를 이용하기 위해 사용한다.
xmlns를 보면 맨 위에만 접두사가 생략되고 나머지는 xsi, beans, context가 붙어있다. 첫 줄의 xmlns에는 xmlns:mvc가 생략되었고 mvc만 생략해서 쓸 수 있다. 아래 태그에 생략된 것은 mvc로 보면된다. view-controller도 mvc에 정의돼있는 태그이다. view-controller는 POST요청이아니라 GET요청이다.
GET으로 처리한 요청이 잘 출력된다.
postman으로 post 요청을 보낼 때 에러가 발생한다.
유효성 검사를 위해 id, pwd, eamil을 변수로 받아야 하는데 길기 때문에 묶어서 User클래스를 만든다.
User 클래스에 getter setter를 만든다.
"id를 잘못입력하셨습니다." 한글 넣으면 에러 발생해서 msg에 id만 넣고 입력했다. isValid가 false이므로 save로 넘어가지 않는다.
URL에 한글을 직접 입력하면 브라우저가 한글을 자동으로 인코딩 해준다. 하지만 spring에서 URL을 만들어 한글을 입력할 경우 브라우저가 인코딩 해주지 못해 실제 URL에 한글을 입력했을 때 깨진다.
URLEncoder.encode("id를 잘못입력하셨습니다.", "utf-8")를 써주면 브라우저에 한글이 잘 출력된다.
msg가 잘 출력된다.
msg가 출력되지 않을 경우 URLDecoder를 사용한다. URLDecoder는 java.net에 있는 것이라 import문을 써줘야 한다.
전달할 값이 많을 때 return이 길어져 msg를 Model에 담아서 위와 같이 2문장으로 나눌 수 있다. redirect를 쓸 경우 register/add 페이지로 넘어가기 때문에 save에 있는 Model를 사용할 수 없지 않을까 하는 의문이 있다. 이를 sprinig이 자동으로 붙여줘서 위 처럼 2문장으로 나눌 수 있다.
실행하면 아까와는 다르게 한글이 출력되지 않고 뭔가가 붙여져 나왔다. 이를 spring이 자동으로 해줬다.
유효검사를 true로 바꿔서 save를 출력한다.
값이 잘 나온다.
registerInfo의 param을 user로 바꾼다.
잘 출력된다.
'스프링의 정석 > Ch. 02 Spring MVC' 카테고리의 다른 글
22. redirect와 forward (0) | 2023.07.27 |
---|---|
21. @GetMapping, @PostMapping (2) (0) | 2023.07.27 |
19. 회원가입 화면 작성하기 (0) | 2023.07.22 |
18. @RequestMapping (0) | 2023.07.20 |
17. @RequestParam과 @ModelAttribute (0) | 2023.07.19 |