21.02.17

29685 단어 MVCMVC

[게시판만들기]

[글 목록]

[controller]
private void dual(HttpServletRequest req, HttpServletResponse resp) 
	throws ServletException, IOException {
	req.setCharacterEncoding("UTF-8");
	String uri = req.getRequestURI();
	String ctx = req.getContextPath();
	String sub = uri.substring(ctx.length());
		
	//웬만한건(파라메터추출, DAO호출, View에 반납) 서비스에서 다 처리하도록, 
   	//컨트롤러에서는 분기만 !
	//그러기 위해서 req와 resp를 서비스에 전달
	BoardService service = new BoardService(req,resp);
	switch(sub){
		
	case "/":
		System.out.println("리스트 요청");
		service.list();
		break;
		
	case "/write":
		System.out.println("글쓰기 요청");
		service.write();
		break;
	case "/del":
		System.out.println("삭제요청");
		service.del();
		break;
	}		
}
[BoardService]
public void list() throws ServletException, IOException {		
	ArrayList<BoardDTO> list = dao.list();//DB사용(ㅇ)
	System.out.println(list.size());
	req.setAttribute("list", list); //list담아보내기
	RequestDispatcher dis = req.getRequestDispatcher("list.jsp");//list.jsp로 보내기
	dis.forward(req, resp);
}
[BoardDAO]
public ArrayList<BoardDTO> list() {
	String sql = "SELECT idx,subject,user_name,bHit FROM bbs ORDER BY idx DESC";
	ArrayList<BoardDTO> list = new ArrayList<BoardDTO>();
		
	try {
	  ps = conn.prepareStatement(sql);
	  rs = ps.executeQuery();
	  while(rs.next()) {
	    BoardDTO dto = new BoardDTO();
	    dto.setIdx(rs.getInt("idx"));
	    dto.setSubject(rs.getString("subject"));
	    dto.setUser_name(rs.getString("user_name"));
	    dto.setbHit(rs.getInt("bHit"));
	    list.add(dto);
	  }
	} catch (SQLException e) {
	    e.printStackTrace();
	} finally {
	    resClose();
	}
	return list;
}
1. 이 서버를 실행하면 바로 올수 있도록 Webservlet으로 "/"를 받아준다.
2. "/"으로 들어올 경우 service.list()실행
3. BoardService에서는 dao.list()를 실행해 return값을 BoardDTO타입으로 받는 list를 만들어준다.
4. BoardDAO에서는 SELECT문으로 글 목록을 내림차순으로 불러온다.
5. rs값을 받아와서 dto에 담아준뒤 그 dto를 하나씩 list에 넣고 list를 반환한다.
6. 반환된 list가 BoardService의 list에 담기고 list를 담아 list.jsp로 이동한다.

[글쓰기]

[BoardService]
public void write() throws ServletException, IOException {
	String name = req.getParameter("userName");
	String subject = req.getParameter("subject");
	String content = req.getParameter("content");
	System.out.println(name+"/"+subject+"/"+content);
		
	String msg="글쓰기에 실패했습니다.";
	String page="writeForm.jsp";
	if(dao.write(name,subject,content)) {
	    page="/";
	    msg="글쓰기에 성공 했습니다.";
	}
	req.setAttribute("msg", msg);
	RequestDispatcher dis = req.getRequestDispatcher(page);
	dis.forward(req, resp);
}
[BoradDAO]
public boolean write(String name, String subject, String content) {
	boolean success = false;
	String sql = "INSERT INTO bbs(idx,user_name,subject,content)
    			VALUES(bbs_seq.NEXTVAL,?,?,?)";
	try {
	    ps = conn.prepareStatement(sql);
	    ps.setString(1, name);
	    ps.setString(2, subject);
	    ps.setString(3, content);
	    if(ps.executeUpdate()>0) {
		success = true;
	    }
	} catch (SQLException e) {
	    e.printStackTrace();
	} finally {
	    resClose();
	}
	return success;	
}
1.controller에서 "/write"로 들어오게 되면 BoardService의 wirte()가 실행된다.
2. BoardService에서는 writeForm.jsp에서 보낸 파라메터값을 받아 변수에 담는다.
3. 그 변수들을 dao.write()에 인자값으로 담아 실행시킨다.
4. BoardDAO에서는 글작성을 위한 INSERT쿼리를 준비시킨다.
5. idx는 미리 설정해둔 시퀀스 값으로 넣어준다.
6. 인자값으로 받아온 name,subject,content를 각각 ?에 대응시킨 후 쿼리를 실행한다.
7. 이 때 쿼리가 정상실행 됐다면 success가 true가 되어 반환한다.
8. 이 반환 값은 BoardService로 가서 성공 시 메세지와 함께 "/"페이지로 이동하게 된다.
9. 실패시 해당 메세지와 함께 writeForm.jsp로 이동한다.

[글 삭제]

[BoardService]
public void del() throws ServletException, IOException {
	String idx = req.getParameter("idx");
	System.out.println("삭제할 idx : " + idx);
	String page="/";
	String msg="삭제에 실패 했습니다.";
	if(dao.del(idx)) {
		msg="삭제에 성공 했습니다.";
	}
	req.setAttribute("msg", msg);
	RequestDispatcher dis = req.getRequestDispatcher(page);
	dis.forward(req, resp);
}
[BoardDAO]
public boolean del(String idx) {
	boolean success = false;
	String sql ="DELETE FROM bbs WHERE idx=?";
	try {
	    ps = conn.prepareStatement(sql);
	    ps.setString(1, idx);
	    if(ps.executeUpdate()>0) {
		success = true;
	    }
	} catch (SQLException e) {
	    e.printStackTrace();
	} finally {
	    resClose();
	}
	System.out.println("delete OK : "+ success);
	return success;
}
1.controller에 "/del"로 들어오게 되면 BoardService에 del()이 실행된다.
2. list.jsp에서 보낸 파라메터값을 변수에 넣고 인자값으로 담아 BoardDAO의 del()을 실행시킨다.
3. BoardDAO에서는 DELETE쿼리문을 준비하고 인자값으로 받은 idx를 ?에 대응 시킨다.
4. 쿼리 실행뒤 정상 실행 되었다면 반환값을 true로 아니라면 false로 한다.
5. 성공이나 실패시 해당 메세지와 함께 "/"로 보내진다.

좋은 웹페이지 즐겨찾기