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
이런식으로 주소가 찍히는 것을 볼 수 있다.
'SPRING > Spring' 카테고리의 다른 글
DataAccessException 란? -Spring 예외처리 (0) | 2021.08.12 |
---|---|
HttpserveltRequest와 HttpSession,세션과 로그인 로그아웃 (0) | 2021.08.03 |
AOP를 이용한 트랜잭션 구현 중 트랜잭션이 먹지 않는 현상과 메모리누수경고(Memory leak)=(톰캣구동안됨) 404에러 해결 (0) | 2021.07.21 |
스프링 게시글 글쓰기 및 수정, ModelAttribute와 RedirectAttributes의 사용 (0) | 2021.07.20 |
스프링 데이터를 전달하는 형태(Model,ModelAndView) (0) | 2021.07.18 |