본문 바로가기
[ Developer ]/Web - Servlet JSP

[JSP Web] 검색 기능 Search

by 김현섭. 2016. 6. 5.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
Search
검색을 구현하기 위해서는 페이징의 프로세스를 이해 해야 한다

Paging - getPagingList()


위의 메소드가 실행되면 버퍼를 통해서 script 문을 입력해주게 된다
pageNo가 link자리로 가게 된다

페이지 번호를 클릭 했을 시 a태그로 해당 페이지로 넘어가게 되는 것은 아래와 같이 if 구절이 수행을 해주게 된다


우선 list.jsp로 가서 페이지 넘버를 보여주는 것에 div를 준다


또 그 밑에 div 하나를 더줘서 입력 창과 버튼을 만든다


화면을 보면 다음과 같이 생성되어 있다


그리고 버튼에 이벤트를 더해 준다
jQuery는 검색어가 입력되지 않았다면 알려주고 아니라면 movePage(0)으로 가는 것이다


검색어 입력 하지 않았다면 알림창이 뜬다


아무 것이나 입력 하였다면 어느 페이지에 있건 첫번째 페이지로 돌아오게 된다

이제 검색을 구현하기 위해 ArticleSearchVO를 이용한다

검색어를 저장할 수 있게 하나 추가해 준다


그리고 List Servlet에서 searchVO에 키워드를 set 시킨다


그리고 biz에서 리스트를 가져오는 메소드에 접근한다
그 후 DAO까지 들어간다

쿼리를 변경해줘야 한다


이곳에 변경을 해준다


이 구문을 추가해 준다
그러나 물음표는 데이터가 들어올 때 ''을 포함하기 때문에 변경을 해줘야 한다
아래와 같이 ||을 통해서 해줘야 한다


또한 내용까지 검색을 해야 하므로 OR로 내용도 검색을 해준다


이제 DAO에서 물음표에 데이터를 넣어주는 부분을 바꿔준다


List에서 검색을 하게 되면 포함된 글들이 나오게 된다


페이지가 검색된 개수에 맞지 않으므로 페이지 카운트에도 조건 쿼리를 추가해 준다


이제 Biz에서 searchVO를 파라미터로 넘기고 DAO에서 받아서 물음표를 set 시켜준다

ArticleBiz


ArticleDAO


정상적으로 표현되는 걸 볼 수 있다


그러나 다시 1페이지를 누르면 기존의 게시판 리스트로 나오게 된다
그리고 검색어를 입력하고 1페이지를 누르면 검색 기능이 실행되게 된다

위에 기능들을 막아줘야 한다

그럴러면 List 서블릿에서 searchVO를 파라미터로 보내준다


그리고 searchKeyword를 입력받는 input에 value로 지정해주면 된다


이제는 페이지를 클릭해도 검색된 것만 나오게 된다


페이징도 검색을 포함하는 것을 알 수 있다

이제 detail페이지에서 목록보기 즉 /list로 돌아가는 버튼을 생성했다
그러나 list로 돌아갈 때 검색된  게시글들은 모두 사라지는 현상이 발생한다

검색을 하는 순간 계속 데이터를 넣어야 된다
그렇게하고 detail에서 list로 돌아갈 때 최근의 세션을 불러오면 된다

List 서블릿에서 session에 searchVO을 넣어주면 된다


list를 아래와 같이 변경해주면 된다


try에서 처음 들어왔다면 예외가 발생하고 예외인 상황에서는 최근의 세션을 넣어주면 된다
catch 구문에 세션과 searchVO를 사용하기 위해 선언을 모두 올려줬다

그러나 catch구문에 searchVO가 null일 가능성을 대비해서 걸러주게 된다


이제는 detail 페이지를 보다가 목록보기를 눌러도 검색된 결과를 보여준다
그러나 한번 검색이 되었으면 list에 들어가면 무조건 검색된 결과만 볼 수 밖에 없다

그러므로 검색 초기화 버튼을 통해서 전체 페이지를 보여주도록 한다
session을 지우기만 하면 된다

list에서 검색 초기화 버튼을 생성해 준다


버튼의 행동을 정의하는 jQuery를 작성한다


이제 init을 처리하는 서블릿을 생성하고 URL을 다음과 같이 정의한다


init 서블릿에서는 할 기능은 간단하다


위와 같이 작성한다면 검색을 초기화 할 수 있다

그와 같이 leftMenu에 전체 게시글 보기에 a 태그를 통해서 전체 게시글을 보여주는 걸 할 수 있다