반응형
타진
개발 그라운드
타진
전체 방문자
오늘
어제
  • 분류 전체보기 (136)
    • 프로그래밍 (65)
      • Java (28)
      • Android (1)
      • Web (19)
      • Web-Spring (12)
      • R (5)
      • Angular (0)
    • 운영체제 (17)
      • Linux (14)
      • Docker(vmware) (3)
    • 클라우드 (4)
      • aws (0)
      • aws_handson (4)
    • 개발문제해결 (25)
      • Exception (12)
      • 알고리즘 문제풀이 (13)
    • 그 외 개발관련 (23)
    • 일상 (1)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • chromium edge
  • ubuntu terminal
  • 문법 체크
  • github actions
  • angular cli
  • wsl2
  • docker ps
  • 빠른 시작 끄기
  • 정올알고리즘 정올 알고리즘
  • 크로미움 엣지
  • docker
  • wsl_update_x64
  • handson
  • vmmem
  • AWS
  • transit gateway peering
  • docker desktop
  • jdk14
  • 4700u
  • Github CLI
  • github
  • 키보드매핑
  • 라이젠
  • GIT
  • stackset
  • 일어키보드
  • cfn
  • alt tab
  • 빠른 시작 켜기
  • transit_gateway

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
타진

개발 그라운드

프로그래밍/Web

MVC Model2 패턴 / 간이 게시판 제작 기록 (4/4)

2017. 11. 11. 09:09
반응형



마지막으로 검색 방법에 대해 다루도록 하겠다


사실 여지껏 한 페이지 만들기에는 회원 테이블, 정보조회도 들어가있지만


게시글 조회와 거의 99% 똑같다


걍 빼도록 한다.




먼저 게시글 검색의 형태이다




코드는 이런 형태가 된다.



<form action="board-search" method="get">
<select name="searchCategory">
<option value="1">작성자</option>
<option value="2">글제목</option>
<option value="3">글제목 + 내용</option>
</select>
<input type="text" name="searchKeyword"
placeholder="키워드" required />
<input type="submit" value="검색" />
</form>


보통 검색페이지는 작성자, 글 제목, 글제목과 내용으로 분류된다


때문에 이러한 방식으로 구성하였고 board-search 서블릿의 doGet이 받아서

처리할 수 있게끔 form을 구성해준다


private BoardService boardService;

public BoardSearchServlet() {
super();
boardService = BoardServiceImple.getInstance();
}

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
int category = Integer.parseInt(request.getParameter("searchCategory"));
String keyword = request.getParameter("searchKeyword");

List<Board> list = boardService.select(category, keyword);
request.setAttribute("boardList", list);

RequestDispatcher dispatcher =
request.getRequestDispatcher("/WEB-INF/board/board-main.jsp");
dispatcher.forward(request, response);
}


select가 처리해주도록한다

(select_by_bno로 할걸 후회된다. 가독성이 많이 떨어져서 한참찾게되므로

혹시나 이 코드를 보시는 분들이 있으시다면 select_by_id로 만들도록 하자 ㅠ)


select도 마찬가지도 서비스 - Dao를 호출한다


@Override
public List<Board> read(int category, String keyword) {
ArrayList<Board> list = new ArrayList<>();
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
conn = ds.getConnection();
if (category == 1) {
pstmt = conn.prepareStatement(SQL_SELECT_BY_USERID);
pstmt.setString(1, "%" + keyword + "%");
} else if (category == 2) {
pstmt = conn.prepareStatement(SQL_SELECT_BY_TITLE);
pstmt.setString(1, "%" + keyword + "%");
} else if (category == 3) {
pstmt = conn.prepareStatement(SQL_SELECT_BY_TITLE_OR_CONTENT);
pstmt.setString(1, "%" + keyword + "%");
pstmt.setString(2, "%" + keyword + "%");
}

rs = pstmt.executeQuery();
while (rs.next()) {
int bno = rs.getInt(1);
String title = rs.getString(2);
String content = rs.getString(3);
String userid = rs.getString(4);
Date regdate = rs.getTimestamp(5);

Board b = new Board(bno, title, content, userid, regdate);
list.add(b);
}

} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
rs.close();
pstmt.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}

return list;
} // end read(int, String)

Dao에 기록된 코드는 위와 같다


작성자, 내용 등 스피너를 처리하기 위해


카테고리 형태로 매개변수를 받았으며


키워드는 String으로 받는다


"select * from test_board where userid like ? "
+ " order by bno desc";
"select * from test_board where title like ? "
+ " order by bno desc";
"select * from test_board "
+ " where title like ? or content like ? "
+ " order by bno desc";


sql문은 이와 같다



여기서 중요한 점은 sql문을 때려박을 때 

"%" + keyword + "%"

형태로 넣어줘야 한다

sql문에 %를 기로갛기가 매우 귀찮으니 이렇게 하자


(사실 방법이 없는 건 아니다. sql문을 다음과 같은 형태로 하게되면

"select * from test_board where title like '%' || ? || '%'"

가능은 한데 귀찮다. 걍 + %이 코드량도 적어지니 이와 같이 하도록 하자)




이렇게 sql 조회로 걸린 모든 board 형태의 오브젝트를 


return 하도록하자


이 리턴값은 서비스를 지나 컨트롤 서브릿에 도착하게 된다


위의 doGet에서 보았듯이


setAttribute로 boardList를 붙여서 


board-main으로 보내게 된다면


미리 입력해두었던 형태 테이블이 이 아이디를 잡아내고


표시하게 될것이다.







결과는 다음과 같다


ㄹ로 검색한 장면




검색 결과










이렇게 기본 뼈대는 끝났다


프레임워크를 사용하면 훠어얼씬 더 편하게 제작이 가능하겠지만

일단 모든 코드의 논리와 구조를 알기위해 작성해보았다.


여기까지 만들어놓고

앞으로는 회원 추가나 로그인 기능 등을 구현할 것 같다



반응형

'프로그래밍 > Web' 카테고리의 다른 글

JSP에서 쿠키와 세션  (0) 2017.11.11
MVC Model2 패턴 / 간이 게시판 제작 기록 (3/4)  (0) 2017.11.11
MVC Model2 패턴 / 간이 게시판 제작 기록 (2/4)  (0) 2017.11.11
    '프로그래밍/Web' 카테고리의 다른 글
    • Ajax - Asynchronous JavaScript And XML (1/2)
    • JSP에서 쿠키와 세션
    • MVC Model2 패턴 / 간이 게시판 제작 기록 (3/4)
    • MVC Model2 패턴 / 간이 게시판 제작 기록 (2/4)
    타진
    타진
    vulnerable1324@gmail.com

    티스토리툴바