240123 게시판 만들기(ip 띄우기 /log)
2024. 1. 23. 12:15ㆍ2023.11.21-2024.05.31
본문글, 댓글창에 다 띄우기
footer.jsp 추가
<%@page import="com.sukgi.util.Util"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
여기는 푸터입니다. 회사 정보 / 정보보안 책임자 / 연락처 / 주소
당신의 아이피 : <%=Util.getIP(request)%>
Util.java 추가, 특수기호,엔터키 처리, 아이피 중간 하트로 가리기
// 01.23 ip 얻어오기
public static String getIP(HttpServletRequest request) {
String ip = request.getHeader("X-FORWARDED-FOR");
if (ip == null) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (ip == null) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ip == null) {
ip = request.getRemoteAddr();
}
return ip;
}
//2024.01.23 HTML 태그를 특수기호로 변경하기 << >>
public static String removeTag(String str) {
str = str.replaceAll("<", "<");
str = str.replaceAll(">", ">");
return str;
}
//2024.01.23 엔터키 처리
public static String addBR(String str) {
return str.replaceAll("(\r\n|\r|\n|\n\r)", "<br>");
}
//2024.01.23 아이피 중간을 하트로 가리기 172.30.1.22 -> 172.♡.1.22
public static String ipMasking(String ip) {
if (ip.indexOf('.') != -1) {
StringBuffer sb = new StringBuffer();// 멀티스레드 환경에서도 동기화 지원
sb.append(ip.substring(0, ip.indexOf('.')+1));
sb.append("♡");
sb.append(ip.substring(ip.indexOf('.',ip.indexOf('.')+1)));
return sb.toString();
} else {
return ip;
}
}
BoardList.java 추가
//2024.01.23 log
Map<String, Object> log = new HashMap<String, Object>();
log.put("ip", Util.getIP(request));
log.put("url", "./board");
log.put("data", "page="+page);
LogDAO logDAO = new LogDAO();
logDAO.write(log);
LogDAO.java 만들기
package com.sukgi.dao;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Map;
public class LogDAO extends AbstractDAO {
//abstract로 이동시켰습니다.
// 오버로딩 기법 적용 (AbstractDAO에 적어서 상속받아도 됨.)
// public void write(String ip, String url, String data) {
// Connection con = db.getConnection();
// PreparedStatement pstmt = null;
// String sql = "INSERT INTO iplog(iip, iurl, idata) VALUES (?,?,?)";
//
// try {
// pstmt = con.prepareStatement(sql);
// pstmt.setString(1, ip);
// pstmt.setString(2, url);
// pstmt.setString(3, data);
//
// pstmt.execute();
//
// } catch (SQLException e) {
// e.printStackTrace();
// } finally {
// close(null, pstmt, con);
// }
// }
public void write(Map<String, Object> log) {
Connection con = db.getConnection();
PreparedStatement pstmt = null;
String sql = "INSERT INTO iplog(iip, iurl, idata) VALUES (?,?,?)";
try {
pstmt = con.prepareStatement(sql);
pstmt.setString(1, (String) log.get("ip"));
pstmt.setString(2, (String) log.get("url"));
pstmt.setString(3, (String) log.get("data"));
pstmt.execute();
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(null, pstmt, con);
}
}
}
AbstractDAO.java 추가
// 2024.01.23 ip
public void logwrite(String ip, String url, String data) {
Connection con = db.getConnection();
PreparedStatement pstmt = null;
String sql = "INSERT INTO iplog(iip, iurl, idata) VALUES (?,?,?)";
try {
pstmt = con.prepareStatement(sql);
pstmt.setString(1, ip);
pstmt.setString(2, url);
pstmt.setString(3, data);
pstmt.execute();
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(null, pstmt, con);
}
}
MemberDAO.java
// 2024.01.23
public List<Map<String, Object>> readData(MemberDTO dto) {
List<Map<String, Object>> data = new ArrayList<Map<String, Object>>();
Connection conn = db.getConnection();
PreparedStatement pstmt = null;
ResultSet rs = null;
String sql = "SELECT * FROM visitcount WHERE mno=(SELECT mno FROM member WHERE mid=?)";
try {
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, dto.getMid());
rs = pstmt.executeQuery();
// 한개면 IF, 여러개면 WHILE
while (rs.next()) {
Map<String, Object> e = new HashMap<String, Object>();
e.put("vno", rs.getInt("vno"));
e.put("board_no", rs.getInt("board_no"));
e.put("mno", rs.getInt("mno"));
e.put("vdate", rs.getString("vdate"));
data.add(e);
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
close(rs, pstmt, conn);
}
return data;
}
BoardDTO.java 변경
public String getIp() {
return Util.ipMasking(ip);
}
CommentDTO.java > ip 추가하기
package com.sukgi.dto;
public class CommentDTO {
private int cno, board_no, clike, mno;
private String comment, mid, mname, cdate, ip;
public int getCno() {
return cno;
}
public void setCno(int cno) {
this.cno = cno;
}
public int getBoard_no() {
return board_no;
}
public void setBoard_no(int board_no) {
this.board_no = board_no;
}
public int getClike() {
return clike;
}
public void setClike(int clike) {
this.clike = clike;
}
public int getMno() {
return mno;
}
public void setMno(int mno) {
this.mno = mno;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
public String getMid() {
return mid;
}
public void setMid(String mid) {
this.mid = mid;
}
public String getMname() {
return mname;
}
public void setMname(String mname) {
this.mname = mname;
}
public String getCdate() {
return cdate;
}
public void setCdate(String cdate) {
this.cdate = cdate;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
}
Comment.java > 댓글에 특수기호, 줄바꿈 가능하게 만들기
// 2024.01.23 오는 값에서 특수기호 <,>, 변경하기
//줄바꿈처리해주기
//2024.01.23 HTML에서 태그를 특수기호로 변경하기
commentcontent = Util.removeTag(commentcontent);
//2024.01.23 엔터처리 /r /n /nr
commentcontent =Util.addBR(commentcontent);
Detail.java
// 데이터베이스에 질의하기
BoardDAO dao = new BoardDAO();// 숫자야? 물어본거
//2024.01.23
LogDAO log = new LogDAO();
dao.logwrite(Util.getIP(request), "./detail", "no="+no);
//로그인한 회원이라면 읽음수 올리기 2024-01-19 프레임워크 프로그래밍 01/31까지
HttpSession session = request.getSession();
if(session.getAttribute("mid") != null) {
//bno, mno
dao.countUp(no,(String)session.getAttribute("mid"));
}
Imdex.java > 인덱스에 로그 가져오기.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//2024.01.23
LogDAO log = new LogDAO();
log.logwrite(Util.getIP(request), "./index", "no="+null);
//response.sendRedirect("index.jsp");
RequestDispatcher rd = request.getRequestDispatcher("index.jsp");
rd.forward(request, response);
}
Login.java > 아이피 저장하기
//2024.01.23 아이피 저장하기
Map<String, Object> log = new HashMap<String, Object>();
log.put("ip", Util.getIP(request));
log.put("url", "./login");
log.put("data", "id:"+dto.getMid()+", pw:"+dto.getMpw() + " 결과 : " + dto.getCount());
LogDAO logDAO = new LogDAO();
logDAO.write(log);
Write.java > 태그 넣을때 오류안타나게 하기
//2024.01.23
title = Util.removeTag(title);
detail.jsp > 아이피 나타내기
<div class="detailCOUNT">${detail.ip } / ${detail.count }</div>
<!-- 댓글 출력창 -->
<div class="cdate">${co.ip } / ${co.cdate }</div>
'2023.11.21-2024.05.31' 카테고리의 다른 글
240125 게시판만들기(댓글 수정) (0) | 2024.01.25 |
---|---|
240124 게시판 만들기(댓글창 삭제, 수정) (1) | 2024.01.24 |
240123 게시판 만들기(방문흔적 찾아가기) (1) | 2024.01.23 |
기록 (0) | 2024.01.20 |
240118 join.jsp, Join.java, IDcheck.java 만들기 (0) | 2024.01.18 |