써머노트,, 나는 왜 글꼴 선택이 안될까...
일단 해결해보는중..
<script src="/resources/summernote/summernote-lite.js"></script>
<script src="/resources/summernote/lang/summernote-ko-KR.js"></script>
<link rel="stylesheet" href="/resources/summernote/summernote-lite.css">
<!-- <script src="/resources/summernote/summernote-bs4.min.js"></script> -->
<!-- <link href="/resources/summernote/summernote-bs4.min.css" rel="stylesheet"> -->
이 파일들을 주석 처리하는 것으로 해결
게시글 조회 시 조회수 오르기
BoardService 쪽에 mid 와 board_no 를 담아 boardCountUp 이라는 메소드 생성
public BoardDTO detail(int no) {
// 로그인 한 사용자면 조회수 올리기
if (util.getMid() != null) {
BoardDTO dto = new BoardDTO();
dto.setBoard_no(no);
dto.setMid(util.getMid());
boardRepository.boardCountUp(dto);
}
return boardRepository.detail(no);
}
해서 mybatis 에서 처리해보기
<insert id="boardCountUp" parameterType="boardDTO">
<selectKey keyProperty="board_count" resultType="Integer" order="BEFORE">
select count(*) as board_count from visitcount
where board_no=#{board_no} and mno=(SELECT mno FROM member WHERE mid=#{mid})
</selectKey>
<choose>
<when test="board_count == 0">
insert into visitcount (board_no, mno)
values (#{board_no}, (SELECT mno FROM member WHERE mid=#{mid}))
</when>
<otherwise>
select 0 from dual
</otherwise>
</choose>
</insert>
조회한 적이 없으면 조회수 증가인데 0 이 아니면 이라는 조건이 없으니 오류 발생
결국 아무것도 하지 않는 쿼리문으로 땜빵..
댓글 좋아요 만들기
댓글에 하트 아이콘 생성
<i class="xi-heart-o" onclick="clikeUp(${comment.no})"></i>${comment.clike }
클릭 시 좋아요 수 올리기
function clikeUp(cno) {
location.href="./clikeUp?bno=${detail.board_no}&cno=" + cno;
}
BoardController 에서 잡기
@GetMapping("/clikeUp")
public String clikeUp(@RequestParam("bno") String bno, @RequestParam String cno)
들어온 값이 int 타입이 맞는지 체크하기
if (util.intCheck(bno) && util.intCheck(cno)) {
들어온 값이 맞으면 통과해서 dto 에 세팅 후 값 넘기기
if (util.intCheck(bno) && util.intCheck(cno)) {
CommentDTO dto = new CommentDTO();
dto.setBoard_no(util.str2Int(bno));
dto.setNo(util.str2Int(cno));
int result = boardService.clikeUp(dto);
쭉 가서 넘기고 board-mapper 설정하기
<update id="clikeUp" parameterType="commentDTO">
<![CDATA[
update comment set clike = clike + 1
where board_no = #{board_no} and cno = #{no}
]]>
</update>
값을 다시 돌려받아 정상 작동 시 페이지 새로고침하기
int result = boardService.clikeUp(dto);
if (result == 1) {
String referer = util.req().getHeader("Referer");
return "redirect:"+ referer; }
else {
return "redirect:/error";
}
페이지 새로고침 말고 댓글 시작점으로 가고싶으면
이렇게 원하는 위치의 id 값을 넣어줌
return "redirect:/detail?no=" + bno + "#commentHr";
myInfo 만들기, 책 366p, 376p
menu.jsp 에서 myInfo 들어갈 때 이제 id 값도 같이 넣어줌
<a class="nav-link" href="./myInfo@${sessionScope.mid }">${sessionScope.mname } 님</a></li>
Controller 에서 id 값을 받아 변수로 사용할 수 있음
@GetMapping("/myInfo@{id}")
public String myInfo(@PathVariable("id") String mid) {
System.out.println("mid" + mid);
return "myInfo";
}
정상 작동 확인
이제 이메일 보내보기, pom.xml 에 해당 라이브러리 추가
<!-- https://mvnrepository.com/artifact/org.apache.commons/commons-email -->
<!-- 메일 보내기 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-email</artifactId>
<version>1.5</version>
</dependency>
Controller 에 myInfo 메소드 만들기
@GetMapping("/myInfo@{id}")
public String myInfo(@PathVariable("id") String mid) throws Exception {
// 메일 보내기
String emailAddr = "-----@outlook.kr";
String name = "-----";
String passwd = "-----";
String hostName = "smtp-mail.outlook.com";
// 포트 번호
int port = 587;
// 이메일 보내기
SimpleEmail simpleEmail = new SimpleEmail();
simpleEmail.setCharset("utf-8");
simpleEmail.setDebug(true);
simpleEmail.setHostName(hostName); // 보내는 서버 설정
simpleEmail.setAuthentication(emailAddr, passwd); // 보내는 사람 인증
simpleEmail.setSmtpPort(port); // 사용할 포트번호
simpleEmail.setStartTLSEnabled(true); // 인증방법
simpleEmail.setFrom(emailAddr, name); // 보내는 사람 mail, 보내는 사람 이름
simpleEmail.addTo("ppj2130@gmail.com"); // 받는 사람
simpleEmail.setSubject("인증번호"); // 제목
simpleEmail.setMsg("인증번호 1234"); // 내용
simpleEmail.send(); // 보내기
return "myInfo";
}
이메일 보내는 것을 util 로 보낸 다음 우리는 util.sendEmail 식으로만 보낼 수 있게 처리
주석을 이용하여 추후 사용 시 가독성을 늘릴 수 있게 처리
// 메일 보내기
/**
* @param email {@code String} 받을 이메일 주소
* @param key {@code String} 인증번호
* @throws EmailException
*/
public void sendEmail(String email, String key) throws EmailException {
String emailAddr = "-----" // 보낼 이메일 주소
String name = "-----"; // 보내는 사람
String passwd = "-----"; // 비밀번호
String hostName = "smtp-mail.outlook.com"; // 이메일 host 주소
// 포트 번호
int port = 587;
// 이메일 보내기
SimpleEmail simpleEmail = new SimpleEmail();
simpleEmail.setCharset("utf-8");
simpleEmail.setDebug(true);
simpleEmail.setHostName(hostName); // 보내는 서버 설정
simpleEmail.setAuthentication(emailAddr, passwd); // 보내는 사람 인증
simpleEmail.setSmtpPort(port); // 사용할 포트번호
simpleEmail.setStartTLSEnabled(true); // 인증방법
simpleEmail.setFrom(emailAddr, name); // 보내는 사람 mail, 보내는 사람 이름
simpleEmail.addTo(email); // 받는 사람
simpleEmail.setSubject("인증번호"); // 제목
simpleEmail.setMsg("인증번호는 " + key + " 입니다."); // 내용
simpleEmail.send(); // 보내기
}
key 를 만드는 util 도 하나 생성
밀리초를 seed 로 넣어 난수를 생성하는 코드, 항상 다른 값이 들어가니 거의거의 다른 값이 항상 나옴
public String createKey() {
Random random = new Random(System.currentTimeMillis());
return "" + random.nextInt(10) + random.nextInt(10) + random.nextInt(10) + random.nextInt(10) + random.nextInt(10);
}
@RestController 라는 애노테이션을 넣으면 비동기 통신 전용으로 사용할 수 있음
내부 메소드의 @Responsebody 는 빼도 됨
@RestController // 비동기 통신 전용 Controller
public class RestFullController {
RestService 생성하기
@Service
public class RestService {
@Autowired
private RestRepository restRepository;
@Autowired
private Util util;
public int sendEmail() {
if (util.getMid() != null) {
// 메일 발송 및 key 저장하기
String email = getEmail((String) util.getMid());
String key = util.createKey();
System.out.println(key);
MemberDTO dto = new MemberDTO();
dto.setMemail(email);
dto.setMkey(key);
dto.setMid(util.getMid());
setKey(dto);
// util.sendEmail(email, key);
return 1;
} else {
return 0;
}
}
public String getEmail(String mid) {
return restRepository.getEmail(mid);
}
public int setKey(MemberDTO dto) {
return restRepository.setKey(dto);
}
}
RestRepository 생성
@Repository
public class RestRepository {
@Autowired
private SqlSession sqlSession;
public String getEmail(String mid) {
return sqlSession.selectOne("rest.getEmail", mid);
}
public int setKey(MemberDTO dto) {
return sqlSession.update("rest.setKey", dto);
}
}
rest-mapper 새로 생성 후 설정
<mapper namespace="rest">
<select id="getEmail" parameterType="String" resultType="String">
select memail from member where mid = #{mid}
</select>
<update id="setKey" parameterType="memberDTO">
update member set mkey = #{mkey} where mid = #{mid} and memail = #{memail}
</update>
</mapper>
DB 에 key 값이 제대로 저장되는지 확인
ajax 로 값 처리하는 것 확인
function emailAuth() {
$.ajax({
url : './emailAuth',
type : 'post',
dataType : 'text', // 수신 값
success : function(result) {
if (result == 1) {
Swal.fire({
title : "인증번호를 발송했습니다.",
showConfirmButton : false,
icon : "success",
timer : 1500
});
} else {
Swal.fire({
title: "문제가 발생하였습니다.",
showConfirmButton : false,
icon : "warning",
timer : 1500
});
}
},
error : function(request, status, error) {
Swal.fire("에러요", "", "error");
}
});
}
'Spring' 카테고리의 다른 글
240226 스프링 프로젝트 (2) | 2024.02.26 |
---|---|
240223 스프링 프로젝트 (0) | 2024.02.23 |
240221 스프링 프로젝트 (2) | 2024.02.21 |
240220 스프링 프로젝트 (0) | 2024.02.20 |
240219 스프링 프로젝트 (0) | 2024.02.19 |