폼 태그, 내부 요소들은 각각 타입이 다른 인풋 태그
전송 버튼을 누르면 폼의 내용이 다음 주소로 넘어가게 된다
form 태그 안에
action = "" 전송할 URL, 안 적으면 자기 자신한테 전송, 페이지 새로 고침됨
method = "" 전송할 방식, 안 적으면 기본적으로 Get 방식 사용됨
action = "/ch2/registerInfo.jsp" 입력하면
registerInfo.jsp 화면에 출력됨
<%@ 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=${param.id}</h1>
<h1>pwd=${param.pwd}</h1>
<h1>name=${param.name}</h1>
<h1>email=${param.email}</h1>
<h1>birth=${param.birth}</h1>
<h1>sns=${param.sns}</h1>
</body>
</html>
- 배열로 만들얼 배열의 요소들로 출력하자
->request.getParameterValues("sns") 하면 배열로 받아서 저장
EL에서는
-> ${paramValues.sns[]} 배열에서 인덱스 입력해서 출력
url 인코딩을 통해 아스키 코드가 아닌 것들은 변환이 된다
브라우저에서 보기 좋게 한글로 보여주는 것
자바 스크립트로 form을 체크하는 함수(formCheck(frm))를 만들고 원하는 요소에 if문으로 체크한다
form 태그에 하면 submit할 때 formCheck 함수를 사용해 이 폼을 체크하는데 그 결과를 반환한다
false가 되면 폼이 전송이 되지 않고 true일 경우만 전송된다
input 태그에 autofocus
3번에서 요소들이 입력되는 값에 조건을 주었고 만약 조건을 지키지 않았을 때 경고 메세지를 보여주는 함수 setMessage(msg, element)를 만들었다
element.select() 를 하게 되면 값이 선택된다
@Controller // ctrl+shift+o 자동 임포트
public class RegisterController {
@RequestMapping("/register/add") // 신규회원 가입
public String register() {
return "registerForm"; // WEB-INF/views/registerForm.jsp
}
}
한글이 깨지면 인코딩을 맞춰주어야 한다
Preferences - Web - HTML Files 이 EUC-kr로 되어있는데 이를 utf-8로 바꿔준다
${msg}는 EL이 아니라 template literal이다
브라우저에서 돌아가는 언어이다
하지만 서버가 먼저 동작하기 때문에 서버 언어인 EL로 인식하는데 EL에는 msg가 없기 때문에 빈 문자열""로 인식한다
-> 한 번 더 감싸서 EL이 아닌 것을 서버에 알려줘야 한다${'${msg}'}
- form action="<c:url value="register/save"/> method="POST">
- 원래는 action="ch2/register/save"인데 context root가 바뀔 수도 있으니 위처럼 바꿔준다
- JSTL의 c:url 태그가 하는 일은
- context root를 자동으로 넣어주고
- session id를 자동으로 추가해준다
위의 폼태그에서 save로 값을 보내게 했으니 save를 만들어준다
@RequestMapping(value="/register/save") public String save() { return "registerInfo"; }
save에서 view를 registerInfo로 지정했으니 registerInfo를 view 폴더로 옮겨준다
- method 지정
@RequestMapping(value="/register/save", method=RequestMethod.POST) // 아무것도 쓰지 않으면 원래 // method={RequestMethod.POST, RequestMethod.GET} 된 것
- PostMapping
@PostMapping("/register/save")
- 유효성 검사를 하기 위해서 save 메서드에 매개변수로 id와 pwd를 받는다
-> 하나로 묶어서 User 클래스의 객체로 받아오고 모델을 추가한다public String save(@ModelAttribute("user") User user, Model m)
- User 클래스 생성하기
- user가 유효한지 확인하는 isValid()함수 작성
private boolean isValid(User user) { return false; }
- isValid를 활용해서 save의 유효성 검사 부분 완성하기
msg를 모델에 저장하는 방법을 이용한다원래 모델은 view에 넘겨주는 역할인데, 이 경우에는 view가 아니라 redirect로 다시 재요청을 받기 때문에 아래 코드처럼 자동으로 바뀐다if(!isValid(user)) { String msg = URLEncoder.encode("id를 잘못입력하셨습니다.", "utf-8"); m.addAttribute("msg", msg); return "redirect:/register/add"; // 신규회원 가입화면으로 이동(redirect) 위 두 줄이 return "redirect:/register/add?msg="+msg; 와 같다 }
URL에 포함된 non-ASCII 문자를 문자 코드(16진수) 문자열로 변환
요청을 받는 서버가 인코딩 방법을 모르기 때문에 url은 아스키여야 한다
인코딩된 URL을 서버가 받으면, 서버는 URL을 디코딩해야한다
request.setCharacterEncoding("UTF-8"); 필수!
그래야 getPatameter했을 때 제대로 데이터를 읽을 수 있다
request.setCharacterEncoding("UTF-8"); 를 항상 치기 싫을 경우
web.xml 파일에 한글 변환 필터 삽입