[220126] 프로젝트 3일차

oxllz·2022년 1월 26일
0

교육

목록 보기
37/41

방명록 만들기

사용된 파일
Model - SpringVO.java, SpringDAO.java, SpringDAO_SpringImpl.java
View - view_list.jsp
Controller - CtrlTest.java

디자인은 bootstrap과 css 를 사용했다.


테이블 생성

CREATE TABLE micro_T(
    no INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    content VARCHAR(500)
);

Model

SpringVO.java

  • 프로퍼티 선언 ( 멤버변수 + getter + setter )

SpringDAO.java

  • 인터페이스
  • 데이터베이스의 데이터를 처리할 메서드 작성
    • public List findAll() throws Exception;
    • public int add( SpringVO pvo ) throws Exception;
    • public int del( SpringVO pvo ) throws Exception;

SpringDAO_SpringImpl.java

  • implements SpringDAO
  • SpringDAO 의 메서드 오버라이딩
    @Override
    public List<SpringVO> findAll() throws Exception {
        RowMapper<SpringVO> rm = new RowMapper<SpringVO>() {
            @Override
            public SpringVO mapRow(ResultSet rs, int arg1) throws SQLException {
                SpringVO vo = new SpringVO();
                vo.setNo( rs.getInt("no") );
                vo.setContent( rs.getString("content") );
                return vo;
            }
        };
        List<SpringVO> rl = jdbcTemplate.query("SELECT * FROM micro_T", rm);
        return rl;
    } 
    @Override
    public int add(SpringVO pvo) throws Exception {
        int uc = 0;
        PreparedStatementSetter pss = new PreparedStatementSetter() {
            @Override
            public void setValues(PreparedStatement stmt) throws SQLException {
  		// 한글문제를 해결하기위해 따로 함수를 만들어 사용. Controller 부분에서 설명한다.
                stmt.setString( 1, Util.han(pvo.getContent()) );
            }
        };
        jdbcTemplate.update("INSERT INTO micro_T VALUES(default, ?)",  pss );
        return uc;
    }
    @Override
    public int del(SpringVO pvo) throws Exception {
        int uc = 0;
        PreparedStatementSetter pss = new PreparedStatementSetter() {
            @Override
            public void setValues(PreparedStatement stmt) throws SQLException {
                stmt.setInt( 1, pvo.getNo() );
            }
        };
        jdbcTemplate.update("DELETE FROM micro_T WHERE no=?",  pss );
        return uc;
    }

Controller

CtrlTest

@Controller
public class CtrlTest

클래스 이름 위에 @Controller 명시

테이블 내용 가져오기

    @RequestMapping("/bangmyung.do")
    public ModelAndView list() throws Exception {
        List<SpringVO> rl = springDao.findAll();
        ModelAndView mnv = new ModelAndView();
        mnv.setViewName("view_list");
        mnv.addObject("list", rl);
        return mnv;
    }

view_list.jsp 로 forward 시 테이블 내용을 list 에 담아 정보를 같이 보낸다.


텍스트 박스 내용을 테이블에 넣기

    @RequestMapping("/add.do")
    public String add( @ModelAttribute SpringVO vo ) throws Exception {    
        if( vo.getContent() == null || vo.getContent().equals("") ) {
            return "redirect:bangmyung.do?ecode=invalid_content";
        }
        else {
            springDao.add( vo );
            return "redirect:bangmyung.do";
        }
    }

textarea 의 내용을 POST 방식으로 넘겨받아 @ModelAttribute 시키려고 했더니 한글이 깨져서 해결하느라 시간을 엄청나게 보냈다..

    public static String han( String a ) {
        try {
            byte[] bs = a.getBytes("8859_1");
            a = new String( bs, "utf-8" );
        }
        catch( IOException e ) {}
        return a;
    }

따로 함수를 만들어 add() 메서드에서 INSERT 시에 사용했다.


삭제 버튼 누르면 삭제되게 구현

@RequestMapping("/del.do")
public String del( @ModelAttribute SpringVO vo ) throws Exception {
        springDao.del( vo );
        return "redirect:bangmyung.do";
}

View

view_list.jsp

EL 을 사용하여 테이블 구현

<table class="table table-hover table-bordered table-striped">
        <thead>
            <tr>
                <th style="width:15%">번호</th>
                <th>내용</th>
                <th style="width:15%">삭제</th>
            </tr>
        </thead>
    
        <q:forEach items="${list}" var="t">
            <tr>
                <td><span>${t.no}</span></td>
                <td><span>${t.content}</span></td>
                <!-- X 를 누르면 /del.do 로 이동한다. ( CtrlTest의 del() 함수 호출) -->
                <td><a href="del.do?no=${t.no}">X</a></td>
            </tr>
        </q:forEach>
    </table>

form 태그를 사용하여 텍스트박스와 제출버튼 구현

    <form method="POST" action="add.do">
        <div class="form-group">
            <label for="abcd">내용을 적어주세요</label>
            <textarea id="abcd" class="form-control bana" name="content" rows="5"></textarea>
        </div>
        <div class="form-group" style="margin-bottom:20px">
            <input class="form-control bana nana" type="submit"/>
        </div>
    </form>

디자인에 사용한 코드는 따로 올리지 않는다.

0개의 댓글