Controller로 데이터를 넘겨줄때 방식이 크게 2가지 방식이있는데 GET / POST 방식이다.
GET방식의 경우는 데이터가 URL에 노출되므로 회원가입이나, 데이터보안이 필요할 경우 사용하지 않는다.
Controller에서 GET방식으로 데이터를 받는 방법은 2가지가 있다.
@RequestMapping 같은경우 default 값이 GET방식이고, method를 통해서 형식을 설정할수 있다.
<< GetMapping , PostMapping은 sts 4.3버전 이후부터 사용가능하다 >>
* URL 맵핑시 주소가 같으면 안되며, method가 다르면 가능
* GetMapping/PostMapping 시에는 Class에 Mapping되어있는 주소 이후의 주소만 적어도된다 즉.
ex) Class에 RequestMapping("register") 가 붙어있다면
ex) GetMapping("add") PostMapping("save") 이렇게 써도된다
* URL 패턴중 와이드 카드로 ? , * , ** 가 있는데 ?= 한글자, *=여러글자 , **=하위 경로 포함을 나타낸다.
@RequestMapping("/url")
@RequestMapping(value="/url", method=RequestMethod.GET)
@GetMapping("/url")
GET 방식으로 Controller로 데이터를 보낼경우 URL창에 데이터가 노출될수 있다.
따라서 Post 방식으로 데이터를 넘겨줘야 할 경우는 Post방식으로 데이터를 넘겨줄때만
데이터가 넘어갈수 있도록 조치를 취해 줘야 한다.
그방법으로 2가지 방법이 있다.
첫번째로
@RequestMapping(value="/url", method=RequestMethod.POST)
두번째로
@PostMapping("/url")
아래와 같은 단순 화면을 출력해주는 경우 메서드로 사용지 않고 servelt-context.xml에
<view-controller path="" view-name="" > 등록해주면된다.
이렇게 등록된 view-controller는 GET 방식만 요청이 된다.
============================================================================================Controller에서 URL을 재작성하면 해당 URL로 접속시 글씨가 깨지는 것을 확인 할 수 있다.
이것은 URLencoding때문에 발생하는 현상이다.
/register/save 요청을 받고 해당 save메서드가 실행되는데
유효성검사에 실패하면 redirect로 url을 재작성하여 페이지를 이동시켜준다.
이때 url 재작성시 URLencoding을 실시 해주지 않으면 요청이 꺠지게 된다.
따라서 URL을 재작성할떄는 URL 인코딩을 실시 해야한다.
또한 해당 메시지를 받는 id에 대해서 JSP에서도 조치를 취해줘야 한다.
JSP에서도 해당 메시지를 EL로 ${URLDecoder.decode(param.msg,"utf-8")} 로 받아야 한다.
또한 해당 메서드는 java메서드 이므로 import를 해줘야 한다.
다른방법으론 model에 담아 넘겨주는 방법으로
가 있으며 아래 주석처리된것과 위에 2줄은 같은 내용이다.
==========================================================================================
URL에 포함된 non-ASCII 문자를 문자코드(16진수) 문자열로 변환
URLEncoder.encode() - 퍼센트 인코딩
데--> eb8db0 1바이트마다 %으로 구분하며 문자를 16진수로 변환
데이터 --------------------------------->ex) 예시.. "%EB%8D%B0%EC%9D%B4%ED%84%B0"
위의 역순
URLDecoder.decode()
"%WB*%JKB%H%HLK%GB" ---------------------------------> 데이터
서버에서는 브라우저에서온 데이터를 사용하려면 아래와 같은 메서드를 사용해줘야 하는데
request.setCharacterEncoding("UTF-8");
매번 요청올떄 마다 해주기 힘드므로. 이를 통합적으로 처리하기 위해서 Filter를 설정해주었다.
<!-- 한글 변환 필터 시작 -->
<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>
<!-- 한글 변환 필터 끝 -->
Filter는 이전에 설명했었찌만.
DispatherServlet에 데이터가 전송되기 전에 Filter를 거쳐 가공되어 DS로 전달된다.
'dev > Spring' 카테고리의 다른 글
[Spring] Cookie (0) | 2022.06.09 |
---|---|
[Spring] redirect, forward (0) | 2022.06.09 |
[Spring] EL, JSTL (0) | 2022.06.04 |
[Spring] 회원가입 페이지 (0) | 2022.06.04 |
[Spring] Tomcat port 변경 (0) | 2022.06.04 |