minlog
article thumbnail

๐Ÿ’ก  ๊ฒŒ์‹œํŒ์— ์ถ”๊ฐ€๋˜์–ด์•ผ ํ•  ๊ธฐ๋Šฅ 

ํŽ˜์ด์ง• ๊ตฌํ˜„ / ๋ฆฌ์ŠคํŠธ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ ๊ตฌํ˜„ / ๊ฒŒ์‹œ๋ฌผ ์ €์žฅ ์‹œ ์ฒจ๋ถ€ํŒŒ์ผ ์ €์žฅ, ์ˆ˜์ •, ์‚ญ์ œ /  ์ƒ์„ธ ํŽ˜์ด์ง€ ์กฐํšŒ์ˆ˜ ์ถ”๊ฐ€ 

 

๊ธฐ์กด ๊ฒŒ์‹œ๋ฌผ์˜ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฟŒ๋ ค์ฃผ๊ณ  ์žˆ๋˜  getList( ) ๋ฉ”์„œ๋“œ๋Š” ์ „์ฒด ๊ฒŒ์‹œ๋ฌผ์„ ํ•œํŽ˜์ด์ง€์— ๋ฟŒ๋ ค์ฃผ๊ณ  ์žˆ์—ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์•ž์„œ ํŽ˜์ด์ง•์„ ๋งŒ๋“ค์—ˆ๊ณ ,  ํ•œ ํŽ˜์ด์ง€๋‹น ๋“ค์–ด๊ฐˆ ๊ฒŒ์‹œ๋ฌผ์˜ ์ˆ˜๋ฅผ ์ •์˜ํ–ˆ๋‹ค.

 

 

[ Project / Servlet · JSP ] 1์ฐจ ๊ณผ์ œ Model 2 ๋ฐฉ์‹ - (1) ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ ( ํŽ˜์ด์ง• ๋ฒ„ํŠผ ๊ธฐ๋Šฅ )

1์ฐจ ๊ณผ์ œ๋Š” VO์™€ DAO๋ฅผ ์‚ฌ์šฉํ•œ Model 2 ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ ๊ฒŒ์‹œํŒ ๋งŒ๋“ค๊ธฐ์ด๋‹ค. ์ตœ๊ทผ ๋ฐฐ์šด ๊ฒƒ๋“ค์„ ํ™œ์šฉํ•ด ๋ณด๊ธฐ ์œ„ํ•œ ํ”„๋กœ์ ํŠธ์ธ๋ฐ, ๊ธฐ๋ณธ์ ์ธ ๊ฒŒ์‹œํŒ ๋ฆฌ์ŠคํŠธ ์ถœ๋ ฅ, ์ƒ์„ธ ํŽ˜์ด์ง€, ์ˆ˜์ •, ์‚ญ์ œ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋˜

jimin-log.tistory.com

 

๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š”  getList( )  ๋ฉ”์„œ๋“œ๋„ ํ•œํŽ˜์ด์ง€๋‹น ๋“ค์–ด๊ฐ€๋Š” ๊ฒŒ์‹œ๋ฌผ ๋‚ด์šฉ๋งŒ ๋ฟŒ๋ ค์ค„ ์ˆ˜ ์žˆ๋„๋ก ์ˆ˜์ • ๋˜์–ด์•ผํ•œ๋‹ค.

์ด๋ฒˆ์—๋Š” ํ•œ ํŽ˜์ด์ง€๋‹น ๊ฒŒ์‹œ๋ฌผ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‚˜๋ˆ„์–ด ๋ฟŒ๋ ค์ฃผ๋Š” ๊ธฐ๋Šฅ๊ณผ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•ด๋ณด๋ ค๊ณ ํ•œ๋‹ค.

 

 

๐Ÿ’ก ๋ฆฌ์ŠคํŠธ์— ํ•„์š”ํ•œ ๋‚ด์šฉ

1 ) ํ•œ ํŽ˜์ด์ง€ ๋‹น  ๊ฒŒ์‹œ๋ฌผ ์ˆ˜ ( 10๊ฐœ )

2 ) ํŽ˜์ด์ง€ ์ด๋™ํ•˜๋ฉด ๊ฒŒ์‹œ๋ฌผ์˜ ๋ณ€ํ™”  ( start / end)

     1ํŽ˜์ด์ง€ = 1๋ฒˆ๋ถ€ํ„ฐ 10๋ฒˆ ๊ฒŒ์‹œ๋ฌผ ๋…ธ์ถœ  

     2ํŽ˜์ด์ง€ = 11๋ฒˆ๋ถ€ํ„ฐ 20๋ฒˆ ๊ฒŒ์‹œ๋ฌผ ๋…ธ์ถœ

3 ) ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰์‹œ ๊ฒŒ์‹œ๋ฌผ ๋ณ€ํ™”

 

 

 

 

 

1. ๋ฆฌ์ŠคํŠธ ๊ตฌํ˜„

๐Ÿซ BoardVo.java

๋จผ์ € ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฝ‘์•„์ฃผ๊ธฐ ์œ„ํ•ด์„œ BoardVo๋„ ์—ฐ๊ด€์ด ๋˜์–ด ์žˆ์–ด ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š”์ง€๋งŒ ํ™•์ธ์„ ํ•ด๋ณด์ž.

๊ฐ ๊ฒŒ์‹œ๋ฌผ์˜ ๋‚ด์šฉ์„ ๋ฐ›์•„์ฃผ๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜๋“ค์ด ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค.  ๊ทธ๋ฆฌ๊ณ  ๋ฆฌ์ŠคํŠธ์— ๋“ค์–ด๊ฐ€๋Š” ๋‚ด์šฉ๋“ค์„ ๋‹ด์€ ์ƒ์„ฑ์ž๋„ ์žˆ๋‹ค.

public class BoardVo {
	private int num;
	private int no;
	private String title;
	private String content;
	private int hit;
	private String regDate;
	private int userNo;
	private String userName;
	
    ...
   
    
    // ๋ฆฌ์ŠคํŠธ ๊ฐ์ฒด
	public BoardVo(int no, String title, String content, int hit, String regDate, int userNo, String userName) {
		this(no, title, hit, regDate, userNo, userName);
		this.content = content;
	}

	
    ...
   
}

 

 

๐Ÿซ BoardDao.java

public List < BoardVo > getList ( ) ;

๊ธฐ์กด ๋ฆฌ์ŠคํŠธ ๋ฉ”์„œ๋“œ๋Š” ํŽ˜์ด์ง€ ๊ฐ’๊ณผ ํ‚ค์›Œ๋“œ ๊ฐ’์„ ๋ฐ›์•„์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์—ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๊ฒ€์ƒ‰ ํ‚ค์›Œ๋“œ,  ํŽ˜์ด์ง€ ๊ฐ’ ์„ ๋ฐ›์•„์ฃผ์–ด ์‚ฌ์šฉํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด ๋ฉ”์„œ๋“œ์— ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์—ˆ๋‹ค.

public List<BoardVo> getList(String kwd,String nowPage);

 

 

๐Ÿซ BoardDaoImpl.java

1.  ๊ฒ€์ƒ‰์–ด, ํ˜„์ œํŽ˜์ด์ง€๋ฅผ ๋ฐ›๋Š” ๊ฒŒ์‹œ๋ฌผ ๋ชฉ๋ก์กฐํšŒ

public List<BoardVo> getList(String kwd,String nowPage) {
	
    ...
    
}

 

1) ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐ’์œผ๋กœ ๋ฐ›์€ ํ‚ค์›Œ๋“œ์™€ ํŽ˜์ด์ง€ ๋ฒˆํ˜ธ๊ฐ€ ํ˜น์‹œ null๊ฐ’์„ ๋ฐ›์„ ๊ฒฝ์šฐ ์ดˆ๊ธฐํ™” ํ•ด์ค€๋‹ค.

if(kwd == null) kwd = "";
if(nowPage == null) nowPage = "1";

 

2) ํŽ˜์ด์ง€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ–ˆ์„ ๊ฒฝ์šฐ ๋ฐ›์•„์˜ค๋Š” ๋ฆฌ์ŠคํŠธ์˜ ์‹œ์ž‘๊ณผ ๋์ด ๋ณ€๊ฒฝ๋˜์–ด์•ผํ•œ๋‹ค.

ํŽ˜์ด์ง• ์ƒ์„ฑ์ž์— ๊ฐ’์„ ๋„ฃ์–ด start์™€ end ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค.

ex) 2ํŽ˜์ด์ง€ ํด๋ฆญ์‹œ >  11๋ฒˆ ๋ถ€ํ„ฐ 20๋ฒˆ ์ถœ๋ ฅ 

pageingVo pageing = getListCount(kwd ,nowPage);
int start = pageing.getStart();
int end = pageing.getEnd();

 

3) SQL๋ฌธ์— ๋„ฃ๊ธฐ ์œ„ํ•ด ๊ฐ’ ์ˆ˜์ •

์•ž ๋’ค๋กœ ์–ด๋–ค ๊ฐ’์ด ์žˆ์–ด๋„ ํ•ด๋‹น ํ‚ค์›Œ๋“œ๊ฐ€ ์žˆ์œผ๋ฉด ๊ฒ€์ƒ‰์ด ๋˜๊ฒŒ ํ•˜๋ ค๋ฉด ํ‚ค์›Œ๋“œ์— %๋ฅผ ์ถ”๊ฐ€ํ•ด์ฃผ์–ด์•ผํ•œ๋‹ค.

String kwdup = "%" + kwd + "%";

 

4)  DB ์—ฐ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜๊ฐ’์„ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ์ค€๋น„

๋ฉ”์„œ๋“œ ๋ฐ˜ํ™˜ ๊ฐ’์„ ๊ตฌํ•ด์ฃผ๋Š” ๋ถ€๋ถ„์ด ์‹คํ–‰์ด ๋˜์ง€ ์•Š๋”๋ผ๋„ ๊ฐ’์ด ์—†์–ด์„œ ์˜ค๋ฅ˜๊ฐ€ ๋‚˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด ๋ฐ˜ํ™˜๋˜๋Š” List๋ฅผ ์ดˆ๊ธฐํ™”ํ•ด์ค€๋‹ค.

DB๊ฐ€ ์ ‘์†์ด ๋˜๊ณ  ๋‚ด์šฉ์ด ์ž˜ ์‹คํ–‰๋œ๋‹ค๋ฉด, try ์•ˆ์—์„œ ์‹ค์ œ๋กœ ์ฟผ๋ฆฌ๋ฌธ์„ ์ด์šฉํ•ด ๊ฐ’์„ ๋ฐ›๊ณ  List์— ๋„ฃ์–ด์„œ ๋ฉ”์„œ๋“œ์˜ ๋ฐ˜ํ™˜๊ฐ’์œผ๋กœ ์ „๋‹ฌ๋œ๋‹ค.

Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
List<BoardVo> list = new ArrayList<BoardVo>();


try {
    conn = getConnection();

 

5)  SQL๋ฌธ 

๊ฒ€์ƒ‰์„ ํ•˜๋ฉด ์ œ๋ชฉ, ๋‚ด์šฉ, ๊ธ€์“ด์ด, ์ž‘์„ฑ์ผ ์•ˆ์—์„œ ํ•ด๋‹น ํ‚ค์›Œ๋“œ๊ฐ€ ์žˆ๋Š”์ง€ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

์•ž์—์„œ ๋ฐ›์•„์ค€ ์‹œ์ž‘ ๋ฒˆํ˜ธ์™€ ๋งˆ์ง€๋ง‰ ๋ฒˆํ˜ธ๋„ ๋„ฃ์–ด์ค˜์„œ ํ•œ ํŽ˜์ด์ง€์— ๋“ค์–ด๊ฐˆ ๋ฆฌ์ŠคํŠธ๋งŒ ์ถ”์ถœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

    // 3. SQL๋ฌธ ์ค€๋น„ / ๋ฐ”์ธ๋”ฉ / ์‹คํ–‰
    String query = "SELECT b.*" + 
            "FROM (" + 
            "		SELECT ROWNUM num,T1.NO,T1.TITLE,T1.HIT,T1.REG_DATE ,T1.CONTENT,T1.USER_NO,T2.NAME  " + 
            "		FROM (SELECT * " + 
            "				FROM BOARD " + 
            "				ORDER BY REG_DATE desc)T1  " + 
            "		INNER JOIN USERS T2  " + 
            "		ON (T1.USER_NO = T2.NO)  " + 
            "		WHERE T1.TITLE LIKE ? " + 
            "		OR T1.CONTENT LIKE  ? " + 
            "		OR T1.REG_DATE LIKE ? " + 
            "		OR T2.NAME LIKE ?) b " + 
            "WHERE num BETWEEN ? AND ?";

    pstmt = conn.prepareStatement(query);
    pstmt.setString(1, kwdup);
    pstmt.setString(2, kwdup);
    pstmt.setString(3, kwdup);
    pstmt.setString(4, kwdup);
    pstmt.setInt(5, start);
    pstmt.setInt(6, end);

    rs = pstmt.executeQuery();
    // 4.๊ฒฐ๊ณผ์ฒ˜๋ฆฌ
    while (rs.next()) {

        int num = rs.getInt("num");
        int no = rs.getInt("no");
        String title = rs.getString("title");
        String content = rs.getString("content");
        int hit = rs.getInt("hit");
        String regDate = rs.getString("reg_date");
        int userNo = rs.getInt("user_no");
        String userName = rs.getString("name");

 

5)  ์ถ”์ถœํ•œ ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ’๋“ค์„ BoardVo๋กœ ๋„ฃ์–ด์ฃผ๊ณ  list๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.

๊ฒŒ์‹œ๋ฌผ์ด ์ž…๋ ฅ๋œ ๋‚ ์งœ๊ฐ€ ์ฟผ๋ฆฌ๋ฌธ์—์„œ sysdate๋กœ ๋“ค์–ด๊ฐ€ ๋…„๋„,์›”,์ผ,์‹œ๊ฐ„์ด ๋ชจ๋‘ ์ถœ๋ ฅ๋˜๊ฒŒ ๋˜์–ด์žˆ๋‹ค.

๋…„๋„ - ์›” - ์ผ ๋กœ ์ถœ๋ ฅํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‚ ์งœ ํฌ๋ฉง์„ ๋ณ€๊ฒฝํ•˜์—ฌ BoardVo ์— ๊ฐ’์„ ๋„ฃ์–ด์ฃผ์—ˆ๋‹ค.

	// ๋‚ ์งœ ํฌ๋ฉง ๋ณ€๊ฒฝ ( ๋…„๋„ ์†Œ๋ฌธ์ž / ์›” ๋Œ€๋ฌธ์ž / ์ผ ์†Œ๋ฌธ์ž )
        DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); // ํฌ๋ฉง ์„ค์ •
        Date date = formatter.parse(regDate); // ํฌ๋ฉง์„ ๋ฐ์ดํ„ฐ ํƒ€์ž…์œผ๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค. 
        String regDate1 = formatter.format(date); // ๋ฐ์ดํ„ฐํ˜•์„ ๋‹ค์‹œ String ํƒ€์ž…์œผ๋กœ ๋ณ€๊ฒฝ
        
        BoardVo vo = new BoardVo(num, no, title,content, hit, newdate, userNo, userName);


        list.add(vo);
    }

} catch (SQLException | ParseException e) {
    System.out.println("error:" + e);
} finally {
    // 5. ์ž์›์ •๋ฆฌ
    try {
        if (pstmt != null) pstmt.close();
        if (conn != null) conn.close();
    } catch (SQLException e) {
        System.out.println("error:" + e);
    }
}
return list;

}

 

 

 

๐Ÿซ BoardServlet.java

request.setCharacterEncoding("UTF-8");
String actionName = request.getParameter("a");

 

1. ์ „์ฒด ๊ฒŒ์‹œ๋ฌผ ๋ชฉ๋ก ์กฐํšŒ 

pageingVo pageing = dao.getListCount(kwd,nowpage);

if ("list".equals(actionName)) {
        request.setCharacterEncoding("utf-8");
        String kwd = request.getParameter("kwd");
        String nowpage = request.getParameter("nowPage");
        // ์ดˆ๊ธฐํ™”
        if(kwd == null) kwd = "";
        if(nowpage == null) nowpage = "1";
        // ๋ฆฌ์ŠคํŠธ ๊ฐ€์ ธ์˜ค๊ธฐ
        BoardDao dao = new BoardDaoImpl();
        List<BoardVo> list = dao.getList(kwd,nowpage);
        pageingVo pageing = dao.getListCount(kwd,nowpage);
        // ๋ฆฌ์ŠคํŠธ ํ™”๋ฉด์— ๋ณด๋‚ด๊ธฐ
        request.setAttribute("pageing", pageing);
        request.setAttribute("list", list);
        WebUtil.forward(request, response, "/WEB-INF/views/board/list.jsp");

}

 

2 . ๊ฒ€์ƒ‰

List<BoardVo> list = dao.getList(kwd,nowpage);

else if ("search".equals(actionName)) {
    request.setCharacterEncoding("utf-8");
    String kwd = request.getParameter("kwd");
    String nowpage = request.getParameter("nowPage");


    if(kwd == null) kwd = "";
    if(nowpage == null) nowpage = "1";

   // ๋ฆฌ์ŠคํŠธ ๊ฐ€์ ธ์˜ค๊ธฐ
    BoardDao dao = new BoardDaoImpl();			
    List<BoardVo> list = dao.getList(kwd,nowpage);
    // ์ „์ฒด ๊ฐฏ์ˆ˜ ๋ฐ ํŽ˜์ด์ง€์ง• ์„ค์ • ์…‹ํŒ…
    pageingVo pageing = dao.getPaging(kwd,nowpage);

    // ๋ฆฌ์ŠคํŠธ ํ™”๋ฉด์— ๋ณด๋‚ด๊ธฐ
    request.setAttribute("pageing", pageing);
    request.setAttribute("list", list);
    String url = "/WEB-INF/views/board/list.jsp";
    WebUtil.forward(request, response, url);
}

 

 

๐Ÿซ List.jsp

1.  ๊ฒ€์ƒ‰ ์ฐฝ

๊ฒ€์ƒ‰ ํผ(form) Post ํ˜•์‹์œผ๋กœ BoardServlet.java ์— ์ „๋‹ฌ ํ•˜๊ณ  ์žˆ๋‹ค.

a ํƒœ๊ทธ๋กœ ์‹คํ–‰ ๊ฐ’์„ search๋กœ ์ „๋‹ฌ /  nowPage ์ดˆ๊ธฐ ๊ฐ’์„ ์ฒ˜์Œ์— 1ํŽ˜์ด์ง€๋กœ ์ „๋‹ฌํ•ด์ค€๋‹ค. kwd๋กœ ๊ฒ€์ƒ‰ ๊ฐ’์„ ์ „๋‹ฌํ•ด์ฃผ๊ณ  ๋งŒ์•ฝ ํ‚ค์›Œ๋“œ ๊ฐ’์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌ ๋ฐ›์•˜์„๊ฒฝ์šฐ,  value ๊ฐ’์— ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋„ฃ์–ด์ค˜์„œ ๊ฒ€์ƒ‰ ํ›„์—๋„ ํ‚ค์›Œ๋“œ๊ฐ€ ์‚ฌ๋ผ์ง€์ง€ ์•Š๊ฒŒ ํ‘œ์‹œํ•ด์ค€๋‹ค.

<form id="search_form" action="/mysite_jimin/board" method="post">
    <input type="hidden" name="a" value="search">
    <input type="hidden" name="nowPage" value="1">
    <input type="text" id="kwd" name="kwd" value="${param.kwd}">
    <input type="submit" value="์ฐพ๊ธฐ">
</form>

 

2.  ๊ฒŒ์‹œ๋ฌผ ๋ฆฌ์ŠคํŠธ

1 ) list ๊ฐ€ ์—†์„ ์‹œ ๋…ธ์ถœ๋  ๋‚ด์šฉ

<c:if test="${list.size() == 0}">
 ...
</c:if>

 

2 ) list ๊ฐ€ ์žˆ์œผ๋ฉด ๋ฐ˜๋ณตํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค.

<c:forEach items="${list}" var="vo">
...
</c:forEach>

 

<table class="tbl-ex">
    <tr>
        <th>๋ฒˆํ˜ธ</th>
        <th>์ œ๋ชฉ</th>
        <th>๋‚ด์šฉ</th>
        <th>๊ธ€์“ด์ด</th>
        <th>์กฐํšŒ์ˆ˜</th>
        <th>์ž‘์„ฑ์ผ</th>
        <th>&nbsp;</th>
    </tr>
    <c:if test="${list.size() == 0}">
        <tr>
            <td colspan="7" style="text-aling:center;">๋‚ด์šฉ์ด ์—†์Šต๋‹ˆ๋‹ค</td>
        </tr>
    </c:if>		
    <c:forEach items="${list}" var="vo">
        <tr>
            <td>${vo.num }</td>
            <td><a href="/mysite_jimin/board?a=read&no=${vo.no }&nowPage=${pageing.nowPage}&kwd=${param.kwd}">${vo.title}</a></td>
            <td>${vo.content}</td>
            <td>${vo.userName}</td>
            <td>${vo.hit}</td>
            <td>${vo.regDate}</td>
            <td>
                <c:if test="${authUser.no == vo.userNo }">
                    <a href="/mysite_jimin/board?a=delete&no=${vo.no }&nowPage=7" class="del">์‚ญ์ œ</a>
                </c:if>
            </td>
        </tr>
    </c:forEach>
</table>

 

 

profile

minlog

@jimin-log

ํฌ์ŠคํŒ…์ด ์ข‹์•˜๋‹ค๋ฉด "์ข‹์•„์š”โค๏ธ" ๋˜๋Š” "๊ตฌ๋…๐Ÿ‘๐Ÿป" ํ•ด์ฃผ์„ธ์š”!