Cookie
* 사용자 웹 브라우저에 저장되는 데이터이다.
* 요청이 발생했을 때 웹 브라우저는 쿠키에 저장된 정보를 서버에 전달하게 된다.
* 만약 응답 결과로 쿠키 정보가 전달되면 웹 브라우저가 쿠키에 저장하게 된다.
* 쿠키는 사용자 브라우저에 저장되는 것이므로 브라우저가 전달 해 줄 때만 쿠키 정보를 사용할 수 있다
Cookie 저장
* 서버 측 코드로 쿠키에 데이터를 저장할 수 있는 방법은 없다.
* 브라우저로 보낼 응답 결과에 저장할 쿠키 정보를 담아 보내면 브라우저에 의해 쿠키가 저장된다.
* Spring MVC에서 쿠키 저장은 Servlet/JSP에서 사용하는 방법으로 처리한다.
load는 배열로 쿠키를 받아와서 getName을 하나씩 따져보는 방법이 있지만
그냥 바로 어노테이션을 이용하여 해당 쿠키를 사용하는 방법이 있다.
ㅡㅡㅡㅡ
Properties
* 프로그램 실행 중 변하지 않는 값이 있다면 properties 파일에 정의해서 사용할 수 있다.
다음과 같이 WEB-INF 폴더 안에 properties 폴더를 만든 후에 data1/data2.properties 파일을 만들어서 사용할 변수를 정의해 주었다. 저곳에서 무엇을 쓰던 java 파일에서 쓰는 형식에 맞춰서 자동으로 바뀐다. int든 String 이든
PropertySource 를 이용해 선언해 줄 수도 있고 그것이 여러개면 위 캡처본과 같이 PropertySources를 이용할 수도 있다.
그리고 properties 파일을 만들기 위해 file 에서 문자열을 입력하면 유니코드 같은 것으로 나오게 되는데
eclipse 상단의 help -> install new software 에서 name에 properties editor, location 에 http://propedit.sourceforge.jp/eclipse/updates 를 기입해서 맨 밑 editor를 설치하면 한글로 볼 수 있다.
이 데이터를 jsp 에서 사용을 하려면 몇 가지 설정이 필요하다.
Properties 파일을 Message로 등록을 하면 jsp 로 사용을 할 수 있고 다국어 처리를 할 수 있게 되는데
예전 scope 에서 component 방식을 이용하여 스캔을 해주었던
ServletAppContext.java 에 다음과 같이 기입해준다. 여러 properties 를 등록을 해줄 때에는 ' , ' 을 이용하여 여러가지를 적어주면 된다.
autowired 를 통해 주입을 받는다. res.getMessage 를 통해 3개의 인자 중 첫 번째는 해당되는 데이터 이름이고
2번 째에는 다음과 같이 파라미터 값을 뚫어 놓고 object 배열을 통해 적절히 넣을 수 있다.
3번 째는 locale 인데, 해당 브라우저의 국가를 확인해서 적절한 데이터 값을 받아오는 것이다.
aaa.a3은 data3_ko.properties / data3_en.properties 2개의 파일로 나뉘어져 있다.
jsp 에서는 taglib 를 다음과 같이 선언해주고 <spring:message code='값'/> 을 이용한다.
arguments 는 위에서 보았던 2번째 인자와 같다. (model를 통해 보내주었음)
xml의 등록방법은 servlet-context.xml에 다음과 같이 사용하고 나머지 사용방법은 java 방식과 동일하다.
ㅡㅡㅡㅡ
유효성 검사
웹 애플리케이션에서 사용자 입력에 대해 유효성을 검사해야 하는 경우가 있다.
JavaScript로 처리할 수도 있지만 Spring MVC에서도 처리할 수 있다.
* Spring MVC는 JSR-303 규격의 유효성 검사 라이브러리를 사용할 수 있다.
* Bean에 데이터가 입력될 때 어떤 검사를 할 것인지 어노테이션으로 지정하고 지정된 어노테이션의 조건에 맞지 않으면 개발자에게 입력값에 오류가 있따는 정보를 전달한다.
* 개발자는 이를 통해 유효성 검사를 진행할 수 있다.
먼저 구글에 mavenrepository 라고 검색을 하여서 'hibernate validator' 과 'javax validation'을 검색해 복사를 한 후에 pom.xml 에 붙인다.
다음과 같이 말이다.
이제 Bean에 조건을 달아준다.
data1 은 2~10 글자이고 data2는 100을 넘지 않는다. 이렇게 조건을 달아준다. 조건은 조건일 뿐 추가로 조치를 취해야만 동작한다.
Controller Bean 매개변수 앞에 @Valid를 설정해주면 유효성 검사를 실시한다. 이 결과를 보기위해서는 BindingResult 객체를 주입받아야 한다.
result.hasErrors()를 통해 error 가 있으면 true여서 들어가게 된다.
그 전에 result 를 출력하면
다음과 같이 나온다. 에러의 수와 그 이유를 말해준다.
이제 자세하게 이 에러들을 모두 들고와서 list 형태로 반환하는 result.getAllErrors() 로 살펴본다.
기본 메세지와 문제되는 코드 그리고 그 오브젝트 이름을 반환한다.
getCode() 만 하면 Max/Size 이렇게 간단히 나오지만 getCodes() 를 하면 자세하게 나오는데,
Size.dataBean.data1, size.data1 ... 이렇게 나오게 된다. 이를 통해 .equals 로 특별한 구문이 나오게끔 설정을 해준 것이다. 여기서 codes[0]은 에러이름.빈 이름.프로퍼티 이름 이 나오게 된다.
에러가 없는 경우에는 data_success 로 들어가서 입력한 데이터 2개를 보여주지만,
에러가 있는 경우에는 data_input 페이지를 다시 열게되고 다음이 data_input.jsp 의 코드이다.
tags jstl 로 hasBindErrors 로 에러를 확인해서 (dataBean1이라는 곳에 유효성 검사에 문제가 있는 놈이 있냐 묻고) 만약
있다면, data1이라는 property에 문제가 있는지 물어보고 만약 문제가 있다면 그 에러 메세지를 출력을 해라 라는 뜻이다.
이것은 TestController 안에 BindingResult 객체의 result 안에는 에러에 관한 정보가 있는데 이것은 request영역에 errors라는 이름으로 담겨져서 jsp에 전달이 된다. 그것을 이용해 사용하는 것이다.
이렇게 유효성 검사에서 오류가 있다고 판단되는 항목에 대해서 JSP에서 메세지를 출력하는데, 이 메세지는 JSR-303에서 정의한 메세지가 그대로 나오는 것이지 내가 설정한 것은 아니다. 이제 여기서 본인이 설정해서 메세지를 바꿀 수 있는 것이 몇 있다.
위에 codes[0]은 에러이름.빈 이름.프로퍼티 이름 으로 에러가 나오게 되는데, 이를 Properties에 등록을 해서 내가 원하는 메세지를 출력하게끔 할 수가 있다.
error_message.properties 를 만들어주고 저렇게 넣었다.
ServletAppContext.java 에 message 등록을 해준다.
밑 코드는 아까 작성한 코드인데 너무나도 길고 비효율적이다.
form 태그를 선언을 하고 이용한다.
<%@taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
<form:errors path='data1' /><br/> 이거는 spring:message code 이것과 같다.
errors.getFieldError('data1').codes[0] 과 같고 이것은 properties 에 들어가있기에 저장한 메세지가 나오게 된다.
그리고 재 업데이트? 를 했을 때에 data1/2 칸이 비어있게 되기때문에 이것을 방지하고자
<form:input type='text' path='data1'> 를 통해서 계쏙 남아있는 것 처럼 보이게 만든다.
그리고 이렇게 하면 오류가 나는데 input_data 처음에는 해당 bean 이 없기 때문이다. 따라서 적어둔다.
다음과 같이 말이다.
'공부 기록들' 카테고리의 다른 글
2020.04.22~23 - MVC(8) (예외처리, MyBatis Java, MyBatis XML, RestController) (0) | 2020.04.23 |
---|---|
2020.04.21 MVC(7) (JSR-303, JSR-380, Validator 커스터마이징, Interceptor) (0) | 2020.04.21 |
2020.04.17 MVC(5) ( SessionScope, ApplicationScope) (0) | 2020.04.17 |
2020.04.16 MVC(4) ( Bean 주입 java/xml, form 태그, redirect, forward, requestScope ) (0) | 2020.04.17 |
2020.04.14-15 MVC(3) (파라미터 받아오기2, 커맨드 객체) (0) | 2020.04.15 |