UriComponents과 URLEncoding
UriComponents클래스는 Path나 query에 해당하는 문자열들을 추가해서 원하는 URI를 생성할 때 사용한다.
UriComponents uricomponets = UriComponentsBuilder.newInstance().path("/board/read").queryParam("bno",12).queryParam("perPageNum", 20).build();
다음과 같이 지정하게 되면,
/board/read?bno=12&perPageNum=20 로
url이 조합된다.
url 뒤의 ? & % 와 같은 것은 따로 설명하도록 하겠다.
//UriEncoding
public String makeSearch(int page) {
UriComponents uriComponents = UriComponentsBuilder.newInstance()
.queryParam("page", page)
.queryParam("perPageNum", cri.getPerPageNum())
.queryParam("searchType", ((SearchCriteria) cri).getSearchType())
.queryParam("keyword", encoding(((SearchCriteria) cri).getKeyword())).build();
return uriComponents.toUriString();
}
//URLEncoding
private String encoding(String keyword) {
if (keyword == null || keyword.trim().length() == 0) {
return "";
}
try {
return URLEncoder.encode(keyword, "UTF-8");
} catch (UnsupportedEncodingException e) {
return "";
}
}
이건 UriComponents를 이용해서 게시판 검색을 만드는 부분이다.
cri에는 현재 페이지번호 page, 페이지당 보여질 게시글이 개수 perPageNum가 있는 Criteria와
searchType,keyword가 있는 Criteria를 상속받는 SearchCriteria가 있다.
뷰에서 입력(검색문,keyword)을 받아와서 DB처리를 통해 검색 후 그것으로 url를 조합해서 게시판에 뿌려주는 부분인데,
http://localhost:8080/board/list ?page=1&perPageNum=10&searchType=t&keyword=게시판검색
이런식으로 url을 조합해 검색문을 페이징처리해서 보내준다.
URLEncoding 은
웹 개발을 하다보면 URL 관련하여 인코딩이 필요한 경우가 있다.
URL에는 여러가지 규칙이 있고 그 규칙에 사용되는 문자들이 정해져있기 때문에 특정한 값들은 규칙에 맞게 변환되어야 하기 때문에,
쿠키와 같이 한글을 표현하지 못하는 경우 한글을 ASCII값으로 인코딩해주야 한다.
이럴때, URLEncoder 클래스를 사용한다
그래서 실제 주소로 들어가서 스크래핑-복사 후 메모장에 붙여넣기 해보면
http://localhost:8080/board/list ?page=1&perPageNum=10&searchType=t
&keyword=%EC%A7%B1%EC%A7%B1%EB%A7%A8%EC%B0%AC%EC%88%98
이런식으로 주소가 찍히는 것을 볼 수 있다.