스프링 ch2-17 ~ ch2-19

서현우·2022년 7월 2일
0

스프링의정석

목록 보기
63/85

ch2-17 ~ ch2-19

  • @RequestParam, @ModelAttribute
  • Filter
  • log4j.xml
  • WebDataBinder
  • 회원가입 화면

@RequestParam

요청의 파라미터를 연결할 기본형 매개변수에 붙인다.
기본형 매개변수 앞에 생략하면 required=false이고,
@RequestParam을 붙이면 required=true이다.

특히 매개변수 타입이 int일 때 required=true로 하고 예외처리를 하던지,
아니면 required=false면 기본값으로 defaultValue를 줘야 한다.

web.xml에 한글 변환 필터 넣음

<!-- 한글 변환 필터 시작 -->
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>
<!-- 한글 변환 필터 끝 -->

log4j.xml

source/main/resources/log4j.xml에서 org.springframework.web의 log level을 info에서 trace로 하면 자세한 로그 내용을 볼 수 있다.

@ModelAttribute

참조형 매개변수를 Model에 자동 추가해준다. 참조형 매개변수 앞에 @ModelAttribute는 생략 가능하다.
반환 타입과 컨트롤러의 매개변수에 적용할 수 있다.
key, value에서 키를 생략하면 타입의 첫글자를 소문자로 해서 key로 한다.
컨트롤러 매개변수에는 @RequestParam과 - (기본형, String), @ModelAttribute - 참조형에 붙일 수 있고 생략 가능하다.
왜냐하면 기본형과 String은 jsp에서 el로 ${param.파라미터 이름}으로 사용할 수 있으므로 Model에 저장할 필요가 없다.

WebDataBinder

요청으로 받은 값을 WebDataBinder에서 1.타입변환, 2.데이터검증을(Validation)한 후 BindingResult 결과와 에러의 내용을 저장하고, 컨트롤러가 그 값을 볼 수 있다.

servlet-context.xml

resources태그에서 정적리소스 맵핑 경로를 수정 --> /**

registerForm.jsp

  • <c:url>
  1. context root 자동 추가
  2. session id 자동 추가
  • form태그
<!-- action, method를 넣어줘야 하고, 
onsubmit으로 폼을 전송하기 전에 작업을 수행하고, true면 전송하게 한다  -->
<form action="<c:url value="/register/save"/>" method="POST">

<!-- id의 input태그에 autofocus를 붙여서 커서가 가도록 한다  -->
<input class="input-field" type="text" name="id" placeholder="8~12자리의 영대소문자와 숫자 조합" autofocus>

<!-- Js로 id, pwd길이 유효성 검사를 하고,
통과하지 못하면 메세지를 출력하고, element.select로 커서가 가게 한다.
이를 form태그에 onsubmit으로 등록해서 전송 전에 검사를 한다.-->
<script>
    function formCheck(frm) {
        var msg ='';

        if(frm.id.value.length<3) {
            setMessage('id의 길이는 3이상이어야 합니다.', frm.id);
            return false;
        }
        if(frm.pwd.value.length<3) {
            setMessage('pwd의 길이는 3이상이어야 합니다.', frm.pwd);
            return false;
        }
        return true;
    }

    function setMessage(msg, element){
        document.getElementById("msg").innerHTML = `<i class="fa fa-exclamation-circle"> ${'${msg}'}</i>`;

        if(element) {
            element.select();
        }
    }
</script>

registerInfo.jsp

기본형과 String 매개변수는 jsp에서 받아서, param.매개변수이름으로 사용할 수 있다. 배열은 paramValues로 받는다.

profile
안녕하세요!!

0개의 댓글