my sql 연결 <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.41</version> </dependency>
@RequestMapping("/tour") << 요론식으로 앞에 적을 경로를 미리 지정해둘수 있는데 @Controller public class GongjiController { @RequestMapping("/write") << RequestMapping 시에는 위에 미리 적어둔 경로를 생략해도 되지만 public String write() { return "/tour/write"; << return 받을때는 경로를 다 적어줘야한다 (헷갈릴수있다) } @RequestMapping("/list") public String list() { return "/tour/list"; } @RequestMapping("/content") public String content() { return "/tour/content"; } }
폴더간 경로 이동은 여태 하던거와 같다 ../ << 폴더 뒤로이동 <예) ../board/list
public void list(Model model) throws Exception { String sql = "select *from board order by id desc"; PreparedStatement pstmt = conn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery(); // rs 를 dto >> ArrayList에 담기 ArrayList<BoardDto> blist = new ArrayList<BoardDto>(); while(rs.next()) { BoardDto bdto = new BoardDto(); bdto.setTitle(rs.getString("title")); bdto.setName(rs.getString("name")); bdto.setPwd(rs.getString("pwd")); bdto.setId(rs.getInt("id")); bdto.setWriteday(rs.getString("writeday")); blist.add(bdto); } model.addAttribute("blist",blist); }
@RequestMapping("/list") public String list(Model model) throws Exception { BoardDao bdao = new BoardDao(); bdao.list(model); return "/list"; }
write_ok 에서 할일을 다하고 문서이동을 list로 갈때 list 함수를 실행하고 이동 할 수 있게
redirect를 사용한다 ( 문서 자체를 요청할때 사용 )예) return "redirect:/list";
한글인코딩 관련 코드는 수정 해야보임
encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 encodingFilter /*
mapping 되는것과 return 보내는 값이 다를때 보통 "redirect:/이름";
하지만 같은 문서에서 redirect 하면 안돼요 무한루프여요
Controller 부분 readnum @RequestMapping("/readnum") public String readnum(BoardDto bdto) throws Exception { BoardDao bdao = new BoardDao(); bdao.readnum(bdto); //bdao.readnum(bdto.getId()); << 한개의 값만 필요할땐 하나만 보내도 된다. return "redirect:/content?id="+bdto.getId(); } }
한개의 값만 가져와서 쓸때는
public void readnum(BoardDto bdto) throws Exception { String sql = "update board set readnum=readnum+1 where id=?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setInt(1, bdto.getId()); pstmt.executeUpdate(); pstmt.close(); conn.close(); }
Controller 부분 delete
@RequestMapping("/delete") public String delete(HttpServletRequest request) throws Exception { String id = request.getParameter("id"); BoardDao bdao = new BoardDao(); bdao.delete(id); return "redirect:/list"; }
Dao 부분 delete
public void delete(String id) throws Exception { String sql = "delete from board where id=?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, id); pstmt.executeUpdate(); pstmt.close(); conn.close(); }
Controller 부분 update_ok 비밀번호체크
@RequestMapping("/update_ok") public String update_ok(BoardDto bdto) throws Exception { BoardDao bdao = new BoardDao(); int chk = bdao.update_ok(bdto); if(chk==0) return "redirect:/content?id="+bdto.getId(); else return "redirect:/update?id="+bdto.getId(); }
Dao 부분 update_ok
public int update_ok(BoardDto bdto) throws Exception { String sql ="update board set title=?,name=?,content=? where id=?"; if(isPwdCheck(bdto.getId(),bdto.getPwd())) { PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setString(1, bdto.getTitle()); pstmt.setString(2, bdto.getName()); pstmt.setString(3, bdto.getContent()); pstmt.setInt(4, bdto.getId()); pstmt.executeUpdate(); pstmt.close(); conn.close(); return 0; 리턴으로 0,1 보내주고 Controller에서 return부분에서 if(imsi==0,1)문으로 이동 할 곳을 처리 } else { conn.close(); return 1; } }
딜리트도 위와 같음
혹시 까먹었을까봐 ispwdCheck적어둠
public boolean isPwdCheck(int id, String pwd) throws Exception { String sql = "select pwd from board where id=?"; PreparedStatement pstmt = conn.prepareStatement(sql); pstmt.setInt(1, id); ResultSet rs = pstmt.executeQuery(); rs.next(); if(pwd.equals(rs.getString("pwd"))) return true; else return false; }
그럼 이만 아디오스