2024. 2. 22. 12:50ㆍ2023.11.21-2024.05.31
BoardService.java > detail 수정
// 2024.02.16
public BoardDTO detail(int no) { // 파라미터에 따라 아래 값이 달라지니까 보드컨트롤러에서 reNo를 써도 여기서 no로 쓰면 된다.
// 문자? util에 숫자로 변경해주는 메소드 만들기
//2024.02.22 psd 요구사항 확인
//로그인 했어?-? 읽음 수 올리기
if(util.getSession().getAttribute("mid") != null) {
//DTO 객체 만들기 = 번호 +아이디
BoardDTO dto = new BoardDTO;
dto.setBoard_no(no);
dto.setMid((String) util.getSession().getAttribute("mid"));
boardDAO.countUP(dto);
}
return boardDAO.detail(no);
}
BoardDAO>countUP 만들어주기. 리턴은 없음
public void countUP(BoardDTO dto) {
//리턴 없음
sqlSession.insert("board.countUP", dto);
}
board-mapper.xml
<!-- 2024.02.22 -->
<insert id= "countUP" parameterType="boardDTO">
FROM visitcount (board_no, mno)
VALUES (#{board_no}, (SELECT mno FROM member WHERE mid=#{mid}))
</insert
>이렇게 했을때 1개 ID로 들어가는대로 다 체크 되서 다시 만들기로함
한개의 ID당 1번만 조회되도록 체크
BoardService> alreadyRead 추가
// 2024.02.16
public BoardDTO detail(int no) { // 파라미터에 따라 아래 값이 달라지니까 보드컨트롤러에서 reNo를 써도 여기서 no로 쓰면 된다.
// 문자? util에 숫자로 변경해주는 메소드 만들기
//2024.02.22 psd 요구사항 확인
//2022.02.22 로그인 했어?-? 읽음 수 올리기
if(util.getSession().getAttribute("mid") != null) {
//DTO 객체 만들기 = 번호 +아이디
BoardDTO dto = new BoardDTO();
dto.setBoard_no(no);
dto.setMid((String) util.getSession().getAttribute("mid"));
int result = boardDAO.alredyRead(dto);
if(result == 0) {
boardDAO.countUP(dto);
}
}
return boardDAO.detail(no);
}
BoardDAO > alreadyRead 적기
//2022.02.22 읽음수 올리기
public int alreadyRead(BoardDTO dto) {
return sqlSession.selectOne("board.alreadyRead",dto);
}
board-mapper>alreadyRead 쿼리문 적기
<select id= "alredyRead" parameterType="boardDTO" resultType="Integer">
SELECT count(*)
FROM visitcount
WHERE board_no=#{board_no} AND mno=(SELECT mno FROM member WHERE mid=#{mid})
</select>
이렇게 읽음 수가 올라간다.
3인 것은 alreadyRead 쓰기 전 내가 3번 들어가서 체크 된것.
아래 1개 , 1개는 alreadyRead 이후 1개씩 체크 된 것.
*수정했는데 왜 했는지는 모르겠고, 결과는 같다.
BoardService >detail 수정
// 2024.02.16
public BoardDTO detail(int no) { // 파라미터에 따라 아래 값이 달라지니까 보드컨트롤러에서 reNo를 써도 여기서 no로 쓰면 된다.
// 문자? util에 숫자로 변경해주는 메소드 만들기
//2024.02.22 psd 요구사항 확인
//2022.02.22 로그인 했어?-? 읽음 수 올리기
if(util.getSession().getAttribute("mid") != null) {
// DTO 만들기 : 아이디, 비번
BoardDTO dto = new BoardDTO();
dto.setBoard_no(no);
dto.setMid((String) util.getSession().getAttribute("mid")); // if문으로 읽었는지 다시 물어보기
boardDAO.countUP(dto);
}
return boardDAO.detail(no);
}
board-mapper.xml 수정
<!-- 2024-02-22 -->
<insert id="countUP" parameterType="boardDTO">
<selectKey keyProperty="board_count" resultType="Integer" order="BEFORE">
SELECT count(*)
FROM visitcount
WHERE board_no=#{board_no} AND mno=(SELECT mno FROM member WHERE mid=#{mid})
</selectKey>
<if test="board_count == 0">
INSERT INTO visitcount (board_no, mno)
VALUES (#{board_no}, (SELECT mno FROM member WHERE mid=#{mid}))
</if>
<if test="board_count != 0">
SELECT count(*) FROM dual
</if>
</insert>
</mapper>
쿼리가 길어지고, 마이바티스가 알아서 선택하게 해준다.
댓글 좋아요 표시
<!-- 2024.02.22 like,ip,time 이미지 -->
<div class="col-2"><img alt="ip" src="./img/ip.png">${c.cip }</div>
<div class="col-2"><img alt="time" src="./img/time.png">${c.cdate }</div>
<div class="col-1">
<img alt="like" src="./img/like.png" onclick="like(${c.no })">
${c.clike }
</div>
img > 이름에 맞게 사진 넣어주기
function like(cno) 만들어주기
//2024.02.22
function like(cno){
Swal.fire("좋아요를 누릅니다.","","succcess");
}
//2024.02.22
function like(cno){
Swal.fire("좋아요를 누릅니다.","","succcess");
location.href="./likeUp?no=${detail.board_no}&cno="+cno;
}
하트를 누르면 cno로 간다.
BoardController >likeUp 만들기
// 2024-02-22 댓글 좋아요 요구사항 확인 psd
@GetMapping("/likeUp")
public String likeUp(@RequestParam("no") String no, @RequestParam("cno") String cno) {// board_no=no, cno=cno
if (util.intChek(no) && util.intChek(cno)) {
CommentDTO dto = new CommentDTO();
dto.setBoard_no(0);
dto.setNo(0);
return "redirect:/detail?no=" + dto.getBoard_no();
} else {
return "redorect:/error";
}
}
}
유틸에 추가하기
//숫자인지 검사하는 메소드
public boolean intChek(String str) {
try {
Integer.parseInt(str);
return true;
} catch(Exception e) {
return false;
}
}
}
BoardService>likeUp
// 2024.02.22
public int likeUp(CommentDTO dto) {
return boardDAO.liekUp(dto);
}
BoardDAO>likeUp
//2022.02.22 댓글 좋아요 올리기
public int liekUp(CommentDTO dto) {
return sqlSession.update("board.likeUp", dto);
}
board-mapper>likeUp
<update id="likeUp" parameterType="commentDTO">
UPDATE comment SET clike = clike + 1 WHERE cno=#{no}
</update>
menu.jsp>
./myInfo@${sessionScope.mid }"> 추가
<div class="collapse navbar-collapse" id="navbarResponsive">
<ul class="navbar-nav text-uppercase ms-auto py-4 py-lg-0">
<li class="nav-item"><a class="nav-link" href="./board">게시판</a></li>
<li class="nav-item"><a class="nav-link" href="./notice">공지사항</a></li>
<c:choose>
<c:when test="${sessionScope.mid ne null }">
<li class="nav-item"><a class="nav-link" href="./myInfo@${sessionScope.mid }"> ${sessionScope.mname }님</a></li>
<li class="nav-item"><a class="nav-link" href="./logout">로그아웃</a></li>
</c:when>
<c:otherwise>
<li class="nav-item"><a class="nav-link" href="./login">로그인</a></li>
</c:otherwise>
</c:choose>
</ul>
</div>
</div>
</nav>
Login Controller > 책 366~376
// 2024.02.22 http://172.30.1.220/myInfo@mask
@GetMapping("/myInfo@{id}")
public String myInfo(@PathVariable("id") String id) {
System.out.println("id : " + id);
return "myinfo";
}
콘솔창에 mask나오기, 주소창에도 나오기
myInfo.jsp > 로그인 복사해서 만들기
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<meta name="description" content="" />
<meta name="author" content="" />
<title>Trinity Company - My info</title>
<!-- Favicon-->
<link rel="icon" type="image/x-icon" href="assets/favicon.ico" />
<link rel="shortcut icon" type="image/x-icon" href="assets/favicon.ico" />
<link rel="apple-touch-icon" sizes="57x57" href="assets/apple-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="assets/apple-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="assets/apple-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="assets/apple-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="assets/apple-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="assets/apple-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="assets/apple-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="assets/apple-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="assets/apple-icon-180x180.png">
<link rel="icon" type="image/png" sizes="192x192" href="assets/android-icon-192x192.png">
<link rel="icon" type="image/png" sizes="32x32" href="assets/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="96x96" href="assets/favicon-96x96.png">
<link rel="icon" type="image/png" sizes="16x16" href="assets/favicon-16x16.png">
<link rel="manifest" href="assets/manifest.json">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="msapplication-TileImage" content="/ms-icon-144x144.png">
<meta name="theme-color" content="#ffffff">
<!-- Font Awesome icons (free version)-->
<script src="https://use.fontawesome.com/releases/v6.3.0/js/all.js" crossorigin="anonymous"></script>
<!-- Google fonts-->
<link href="https://fonts.googleapis.com/css?family=Montserrat:400,700" rel="stylesheet" type="text/css" />
<link href="https://fonts.googleapis.com/css?family=Roboto+Slab:400,100,300,700" rel="stylesheet" type="text/css" />
<!-- Core theme CSS (includes Bootstrap)-->
<link href="css/styles.css" rel="stylesheet" />
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
</head>
<body id="page-top">
<!-- Navigation-->
<%@ include file="menu.jsp" %>
<!-- login-->
<section class="page-section" id="my-info">
<div class="d-flex justify-content-center">
<div class="text-center">
<div>
등록한 e-mail로 인증 번호가 발송되었습니다.
email을 확인 후 인증번호를 확인하세요.
<form action="">
<input type="number" name="namber">
<button>인증하기</button>
</form>
</div>
</div>
</div>
</section>
<!-- Bootstrap core JS-->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.3/dist/js/bootstrap.bundle.min.js"></script>
<!-- Core theme JS-->
<script src="js/scripts.js"></script>
<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *-->
<!-- * * SB Forms JS * *-->
<!-- * * Activate your form at https://startbootstrap.com/solution/contact-forms * *-->
<!-- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *-->
<script src="https://cdn.startbootstrap.com/sb-forms-latest.js"></script>
</body>
</html>
메일 생성하기(outlook)
이거 기억하기. 나중에 적어줘야한다.
'2023.11.21-2024.05.31' 카테고리의 다른 글
20240226 스프링(갤러리 상세보기(detail), 갤러리 컨트롤러/서비스 상속만들기 , 공지게시판) (1) | 2024.02.26 |
---|---|
20240223 스프링(파일 체크, 파일 업로드 , 갤러리 만들기) (0) | 2024.02.23 |
20240221 스프링(로그인-글쓰기 버튼, 댓글쓰기, 수정,삭제, ip) (0) | 2024.02.21 |
20240221 스프링(글쓰기, 댓글쓰기 ip, 엔터키처리) (1) | 2024.02.21 |
240220 스프링(로그인, 로그아웃) (0) | 2024.02.20 |