본문 바로가기

HTML

240131 HTML 홈페이지 만들기

오늘은 댓글 관리, ip 관리, 미디어 쿼리 만들기

 

어제 못한 댓글 관리 만들기

게시글이랑 비슷함

이번에는 DTO 를 사용하여 만듦, 댓글 jsp 와 Servlet 을 만들고

Get 방식에서는 댓글 전체 리스트를 출력하는 리스트를 세팅

  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    AdminDAO dao = new AdminDAO();
    
    List<CommentDTO> list = dao.commentList();
    request.setAttribute("list", list);
    
    RequestDispatcher rd = request.getRequestDispatcher("/admin/comments.jsp");
    rd.forward(request, response);
  }

 

댓글 jsp 에서 삭제 여부를 수정하면

post 에서 del 값을 받아 수정하기

  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // System.out.println(request.getParameter("del"));
    // System.out.println(request.getParameter("cno"));
    String del = request.getParameter("del").equals("1") ? "0" : "1";
    AdminDAO dao = new AdminDAO();
    int result = dao.updateComments(request.getParameter("cno"), del);
    
    PrintWriter pw = response.getWriter();
    pw.print(result);
  }

 

댓글 조회 및 수정하는 method

  public int updateComments(String cno, String del) {
    int result = 0;
    Connection conn = dbConn.getConn();
    PreparedStatement pstmt = null;
    String sql = "update comment set cdel=? where cno=?";

    try {
      pstmt = conn.prepareStatement(sql);
      pstmt.setString(1, del);
      pstmt.setInt(2, Util.str2Int(cno));
      result = pstmt.executeUpdate();
    } catch (SQLException e) {
      e.printStackTrace();
      System.out.println("AdminDAO - updateComments 에러");
    } finally {
      close(conn, pstmt, null);
    }
    return result;
  }

 

  public List<CommentDTO> commentList() {
    List<CommentDTO> list = new ArrayList<>();
    Connection conn = dbConn.getConn();
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    String sql = "select c.cno, c.board_no, SUBSTRING(REPLACE(c.ccomment, '<br>', ' '),1, 15) as ccomment, "
        + "if(date_format(c.cdate,'%Y-%m-%d') = date_format(current_timestamp(),'%Y-%m-%d'), "
        + "date_format(c.cdate,'%h:%i'),date_format(c.cdate,'%Y-%m-%d')) AS cdate, "
        + "c.clike, m.mno, m.mid, m.mname, c.cip , c.cdel "
        + "from (comment c join member m on(c.mno = m.mno)) "
        + "order by c.cno desc";
    try {
      pstmt = conn.prepareStatement(sql);
      rs = pstmt.executeQuery();

      while (rs.next()) {
        CommentDTO dto = new CommentDTO();
        dto.setCno(rs.getInt("cno"));
        dto.setBoard_no(rs.getInt("board_no"));
        dto.setCcomment(rs.getString("ccomment"));
        dto.setCdate(rs.getString("cdate"));
        dto.setClike(rs.getInt("clike"));
        dto.setDel(rs.getString("cdel"));
        dto.setIp(rs.getString("cip"));
        dto.setMno(rs.getInt("mno"));
        dto.setMname(rs.getString("mname"));
        list.add(dto);
      }
    } catch (SQLException e) {
      e.printStackTrace();
      System.out.println("AdminDAO commentList 오류");
    } finally {
      close(conn, pstmt, rs);
    }
    return list;
  }

 

IP 관리

 

기존 ip log 에서 ip 목록들 확인하기

  public List<Map<String, Object>> ipList() {
    List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
    Connection conn = dbConn.getConn();
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    String sql = "SELECT * FROM iplog order by ino desc";
    
    try {
      pstmt = conn.prepareStatement(sql);
      rs = pstmt.executeQuery();
      while (rs.next()) {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("no", rs.getString("ino"));
        map.put("ip", rs.getString("iip"));
        map.put("date", rs.getString("idate"));
        map.put("url", rs.getString("iurl"));
        map.put("data", rs.getString("idata"));
        list.add(map);
      }
    } catch (SQLException e) {
      e.printStackTrace();
      System.out.println("AdminDAO - ipList 오류");
    } finally {
      close(conn, pstmt, rs);
    }
    return list;
  }

 

여기서 jsp 에 검색 기능을 넣음, 검색하는 명령이 들어오면 다른 method 로 실행

  public List<Map<String, Object>> ipList(String ip) {
    List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
    Connection conn = dbConn.getConn();
    PreparedStatement pstmt = null;
    ResultSet rs = null;
    String sql = "SELECT * FROM iplog WHERE iip LIKE concat('%', ?,'%') order by ino desc";
    
    try {
      pstmt = conn.prepareStatement(sql);
      pstmt.setString(1, ip);
      rs = pstmt.executeQuery();
      
      while (rs.next()) {
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("no", rs.getString("ino"));
        map.put("ip", rs.getString("iip"));
        map.put("date", rs.getString("idate"));
        map.put("url", rs.getString("iurl"));
        map.put("data", rs.getString("idata"));
        list.add(map);
      }
    } catch (SQLException e) {
      e.printStackTrace();
      System.out.println("AdminDAO - ipList 오류");
    } finally {
      close(conn, pstmt, rs);
    }
    return list;
  }

 

검색 값 유무에 따라 set 을 다르게 진행

  protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    AdminDAO dao = new AdminDAO();
    // List<Map<String, Object>> list = null;
    List<Map<String, Object>> list2 = dao.ipCount();
    
    if (request.getParameter("search") == null || request.getParameter("search").isBlank()) {
      // list = dao.ipList();
      request.setAttribute("ipList", dao.ipList());
    } else {
      // list = dao.ipList(request.getParameter("search"));
      request.setAttribute("ipList", dao.ipList(request.getParameter("search")));
    }
    
    request.setAttribute("ipCount", list2);
    
    RequestDispatcher rd = request.getRequestDispatcher("/admin/ip.jsp");
    rd.forward(request, response);
  }

 

IP 에 클릭하면 ip 가 바로 검색될 수 있게 처리

<c:forEach items="${ipList }" var="row">
  <tr class="row${row.no }">
    <td class="ino w1">${row.no }</td>
    <td class="w2"><a href="./ip?search=${row.ip }">${row.ip }</a></td>
    <td class="w3">${row.date }</td>
    <td class="w2">${row.url }</td>
    <td class="w2">${row.data }</td>
  </tr>
</c:forEach>

 

url 도 검색하면 해당 url 이 검색될 수 있게 해야하는데,,

어떻게 2개를 한꺼번에 처리할 수 있을까

'HTML' 카테고리의 다른 글

240201 HTML 홈페이지 만들기  (2) 2024.02.01
240130 HTML 홈페이지 만들기  (0) 2024.01.30
240129 HTML 홈페이지 만들기  (0) 2024.01.29
240126 HTML 홈페이지 만들기  (1) 2024.01.26
240125 HTML 홈페이지 만들기  (0) 2024.01.25