1.INDEX.JSP
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE > <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> <script src="http://code.jquery.com/jquery-3.1.0.js"> </script> <% //context path: 웹프로젝트의 식별자 String path = request.getContextPath(); %> <script> $(document).ready(function(){ memo_list(); }); function memo_list(){ //함수 $.ajax({ //함수의 파라미터 url: "<%=path%>/memo_servlet/list.do", success : function(result) { //result : Response Text (서버의 응답텍스트) // div의 내용을 교체함 $("#divList").html(result); } }) } </script> </head> <body> <h2>한줄메모장</h2> <div id="divList">이곳에 목록이 출력됩니다.</div> </body> </html>
2.CONTROLLER
package memo; import java.io.IOException; import java.util.List; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; //memo로 들어오는 모든것 , 외부에서 볼수 없게 만드는 것 @WebServlet("/memo_servlet/*") public class MemoController extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("메모 서블릿"); // 컨텍스트 패스 String context = request.getContextPath(); // 요청한 url을 스트링으로 저장 String url = request.getRequestURL().toString(); MemoDAO dao = new MemoDAO(); // 없으면 -1 있으면 -1 이 아닌 다른 정수 if (url.indexOf("list.do") != -1) { List<MemoDTO> items = dao.memoList(); // 저장영역.setAttribute(key,value) //session.setAttribute //page.setAttribute request.setAttribute("items", items); //포워딩할 페이지 String page = "/memo/list.jsp"; //포워딩할 페이지의 정보 분석 객체 RequestDispatcher rd = request.getRequestDispatcher(page); //포워드 (forward) : 화면전환, 주소는 그대로 rd.forward(request, response); } } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
3. DTO 데이터 오브젝트
package memo; //dto(data transfer object , 데이터 전달 객체 ) //레코드 객체 // 마이바티스 사용시 oracle과 dto의 변수명이 같아야함 public class MemoDTO { private int idx; private String writer; private String memo; private String post_date; public int getIdx() { return idx; } public void setIdx(int idx) { this.idx = idx; } public String getWriter() { return writer; } public void setWriter(String writer) { this.writer = writer; } public String getMemo() { return memo; } public void setMemo(String memo) { this.memo = memo; } public String getPost_date() { return post_date; } public void setPost_date(String post_date) { this.post_date = post_date; } @Override public String toString() { return "MemoDTO [idx=" + idx + ", writer=" + writer + ", memo=" + memo + ", post_date=" + post_date + "]"; } public MemoDTO() { // TODO Auto-generated constructor stub } // idx와 날짜는 db에서 자동 입력이 된다. public MemoDTO(String writer, String memo) { super(); this.writer = writer; this.memo = memo; } }
4. DAO
package memo; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; import java.util.List; import config.DB; //DAO (DATA ACCESS OBJECT 데이터 처리 객체) //비즈니스 로직을 실행하는 클래스 // public class MemoDAO { public List<MemoDTO> memoList() { List<MemoDTO> items = new ArrayList<MemoDTO>(); Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { // DB가 static이라서 바로 접근 가능하다. conn = DB.dbConn(); // db연결자 리턴 String sql = "select * from memo order by idx desc"; pstmt = conn.prepareStatement(sql); // 결과값 리턴 rs = pstmt.executeQuery(); // 다 읽어 와라 결과셋.next() 다음 레코드가 있으면 true while (rs.next()) { // 데이터 그릇을 만들어서 oracle에서 불러온 데이터들을 담아준다. MemoDTO dto = new MemoDTO(); // 결과셋.get자료형("칼럼이름") dto.setIdx(rs.getInt("idx")); dto.setWriter(rs.getString("writer")); dto.setMemo(rs.getString("memo")); dto.setPost_date(rs.getString("post_date")); // list에 쌓인다. items.add(dto); } } catch (Exception e) { e.printStackTrace(); } finally {// 예외 발생여부와 상관없이 항상 실행 // resultset= > statement=> connection try { if (rs != null) { rs.close(); } } catch (Exception e2) { e2.printStackTrace(); } try { if (pstmt != null) { pstmt.close(); } } catch (Exception e2) { e2.printStackTrace(); } try { if (conn != null) { conn.close(); } } catch (Exception e2) { e2.printStackTrace(); } } return items; } }
5. LIST.JSP
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.util.List"%> <%@ page import="memo.MemoDTO"%> <!DOCTYPE > <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <% //컨트롤러에서 넘어온 값을 읽어옴 // request.getAttribute(key) //object 타입이라 형변환 해야함 List<MemoDTO> items = (List<MemoDTO>) request.getAttribute("items"); %> <table border="1"> <tr> <th>번호</th> <th>이름</th> <th>메모</th> <th>날씨</th> </tr> <% for (MemoDTO dto : items) { %> <tr> <td><%=dto.getIdx()%></td> <td><%=dto.getWriter()%></td> <td><%=dto.getMemo()%></td> <td><%=dto.getPost_date()%></td> </tr> <% } %> </table> </body> </html>