>> 2021/12/24~2022/01/20 : 28일의 기록 <<
- 해주세요 (help) 게시판 CRUD
- 팀원들과 DB 통일, 테이블명, 경로명 변경
- 변경사항에 따른 경로 재설정, 연결
- 글 작성 시 로그인한 회원 정보가 자동으로 전달되어 직접 작성하지 않도록
- 필터 작성, 로그인 하지 않으면 글쓰기 불가하도록
- 작성자가 아니면 글 수정/삭제 불가하도록
- 조회수 카운트 기능 추가
- 글쓰기 링크 게시판 화면에 띄우기, 연결
- 어제 날아간 코드 복붙
- 댓글이 달려있어도 게시글을 지울 수 있도록 수정
- 작성자가 아니면 글 수정/삭제 페이지를 '경로로도' 접근할 수 없도록 수정
- 태그 정하고 해주세요 게시판(register, modify)에 적용
- 태그 not null, default "기타" 로 변경
- 태그 게시판 (list, post) 에 표시되도록 추가
- 태그 선택하지 않으면 사다주세요 선택되는 문제 -> 선택하지 않으면 기타로 등록되도록 수정
- list, post 에 c:out 작성하여 script 공격 막기
- 게시글 수정되면 ‘수정됨’ 뜨도록
- innerNav 에 페이지 최상단으로 올라가는 버튼 추가
- edit profile 드롭다운이 innerNav 뒤로 가려지는 문제 해결
- 게시판 (list) 에 작성자 닉네임 표시되도록 추가
- 지역별로 게시글 분류
- 지역 선택시 바로 쿼리에 전달 안되는 문제 해결
- register, modify 폰트 바꾸고 css 일부 수정
- 줄바꿈 반영되어 보여지도록 수정
- 일상생활, 동네소식 게시판 구현
- 일상생활, 동네소식 게시판도 로그인 안하면 글작성 못하도록 수정 (필터에 추가)
- 일상생활, 동네소식 댓글 등록 안되는 문제 해결 (DB 문제)
- 댓글에 대댓글 달 수 있도록 대댓글 기능 추가
- 대댓글 달리면 게시글 삭제 안되는 문제 해결 (테이블에 boardId 컬럼 추가)
- 신고기능 추가
- @RestController -> @Controller 변경하여 포워딩 작동하도록
- 결국 controller 두개로 분리
- 신고관리 게시판 만들기
- 신고관리게시판 관리자만 접근 가능하도록
- 게시글 삭제하면 해당 게시글의 신고내역도 모두 삭제되도록 함
- 게시글은 남겨두고 신고내역만 삭제 가능하도록 함
- 로그인 해야 신고 가능하도록 수정
- 신고관리게시판에 신고 상세사유 있는 경우 tooltip 으로 뜨도록 함
- 관리자가 댓글, 대댓글 삭제 못하는 문제 해결 (controller 수정)
- 신고관리 게시판 카테고리별(게시글/댓글) 필터링 기능 추가, css
- 대댓글 정렬 문제 해결
- 댓글/대댓글 삭제하면 해당 댓글/대댓글의 신고내역도 모두 삭제되도록 함
- 댓글 정렬 변경 (최신 댓글이 아래에 위치하도록)
- 댓글, 대댓글 글자수 최대 200자로 변경
- 일상생활, 동네소식 게시판에도 변경사항 적용
- 동네신문고 게시판에 좋아요 추가
- 일상생활 게시판에 대댓글 안 달리는 문제 해결
- 신고 시 게시판 이름 제대로 넘어가도록 수정
- 해주세요 게시판 글 수정에만 태그에 빌려주세요 있는 것 삭제
- 신문고 게시판에 부족한 기능 추가
- 게시판에 테스트로 작성된 글 모두 삭제하고, 새로 예시 글 작성
- 경로 수정 /controller1/ → ${pageContext.request.contextPath }/
> 게시판 CRUD
0. DB 에 테이블 만들기
1. VO 작성 (class)
2. mapper.xml 작성 (file)
3. mapper.java 작성 (interface)
4. service 작성 (class)
5. controller 작성 (class)
6. jsp 작성 (jsp)
mapper.xml
- 테이블 전체 조회: List<VO> / 한 row 조회 - VO / 한 column 조회 - list / 한 칸 조회 - string
- select: resultType 작성
- nickname 도 같이 불러오기: 기존 getList 에 JOIN 하여 한번에 작성 (단, VO 에도 컬럼명 추가)
- insert: useGeneratedKeys="true" keyProperty="id" keyColumn="id" 작성
- default 값으로 불러올 것들은 쿼리에 작성하지 말 것
- update: 이미 default 값이 들어가있는 updated 는 쿼리에서 직접 NOW() 값을 넣어줘야 함
> modify 화면에서 remove 가 작동하지 않는 (수정으로 작동하는) 문제
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" referrerpolicy="no-referrer"></script>
↑ 이 코드를 modify.jsp 에 붙여넣기

> 태그 select
register.jsp, modify.jsp 에서 태그를 여러개 중에 선택할 수 있도록

select 안에 option 태그 작성, value 로 값 전달
disabled: 선택 불가, selected: 선택되어있음
태그를 선택하지 않으면 기타로 등록되도록 함
> modify 에서 글 작성 시 등록해놓은 태그가 선택되어있도록 하기
<c:if test="">selected</c:if> 를 option 태그 안에 작성

> 글 작성 시 로그인한 회원 정보가 자동으로 전달되어 사용자가 직접 작성하지 않도록 하기
memberId - hidden
location, nickname - readonly

sessionScope.loginUser
↓ UserController
email 로 회원 정보를 읽어와 vo 에 저장, vo 를 loginUser 에 저장

↓ UserService, UserMapper.java, UserMapper.xml



sessionScope
→

https://m.blog.naver.com/0192141606/70184767551 (출처)
> 로그인 하지 않으면 글쓰기, 수정 못하도록 - 필터 생성, web.xml 에 매핑 작성
CheckLogInFilter 필터 생성, doFilter 다음과 같이 작성

web.xml

* 12/14 수업 참고
> 작성자가 아니면 게시글 수정/삭제 (modify) 불가능 하도록
1) 수정/삭제 버튼이 뜨지 않도록 설정 - post.jsp
<c:if test=""> </c:if> 안에 버튼 넣기
test 에서 ${session.Scope.loginUser.id eq post.memberId} 로 로그인한 유저의 id가 게시글의 memberId와 동일한지 확인

2) 경로로도 접근할 수 없도록 설정 - HelpController

Controller 의 GetMapping("/modify") 의 기존 코드에 위와같이 작성
로그인한 회원의 정보를 loginUser 로 받아와서 uvo
게시글의 id 로 해당 게시글의 정보를 받아와서 hvo
if 문 - 유저의 id 와 게시글의 memberId 가 다르면 all/list 로 리디렉트
session.getAttribute("loginUser")
> 경로
1. "${pageContext.request.contextPath}/(경로)"
2. req.getContextPath()+"(경로)"
↓ 참고1

https://sooblair84.tistory.com/18 (출처)
↓ 참고2

https://byul91oh.tistory.com/203(출처)
+ https://tokkicode.tistory.com/45 참고
> 조회수 카운트
1) mapper.xml

2) mapper.java

3) service

4) controller

post 로의 getMapping 에서 service.upViews(id) 실행
> 댓글이 달려있어도 게시물을 삭제할 수 있도록 - Service 에 @Transactional
댓글이 달려있을 때 게시글을 삭제하려고 하면 다음과 같은 문제가 발생
Cannot delete or update a parent row: a foreign key constraint fails (team.tb_reply_help, CONSTRAINT tb_reply_help_ibfk_1 FOREIGN KEY (boardId) REFERENCES tb_board_help (id))
즉, 댓글의 boardId 가 게시글의 id 를 참조하고 있기 때문에 (외래키) - 삭제 불가능
↓
(12/22 수업 참고)
1) Reply(댓글) mapper.xml 에 작성

2) Reply(댓글) mapper.java 에 작성

3) Help (게시글) service 에 작성


댓글 삭제 코드를 추가하고
@Transactional 작성하여 댓글을 지우고 게시글을 지우는 작업을 묶어서 한번에 처리하도록 함
> updated 와 inserted 가 다르면 (수정됨) 표시되도록

같지 않으면 ne

https://itnewvom.tistory.com/4 (참고)
> innerNav 에 페이지 최상단으로 올라가는 버튼 추가
https://tokkicode.tistory.com/39 (참고)
https://tokkicode.tistory.com/33?category=999654 (참고)


> edit profile 드롭다운이 innerNav 뒤로 가려지는 문제 해결
z-index
https://aboooks.tistory.com/83 (참고)
↓ header

↓ innerNav

→ z-index 가 999 로 가장 큰 header 의 dropdown 이 가장 위에 위치하도록 수정함
> c:out 으로 script 공격 막기


> 줄바꿈이 반영되어 보여지도록 수정
https://offbyone.tistory.com/326 (참고)

'course 2021 > Project' 카테고리의 다른 글
03. 끝 (0) | 2022.01.26 |
---|---|
02. 기록(2) (1) | 2022.01.26 |
01. 시작 (0) | 2021.12.27 |
>> 2021/12/24~2022/01/20 : 28일의 기록 <<
- 해주세요 (help) 게시판 CRUD
- 팀원들과 DB 통일, 테이블명, 경로명 변경
- 변경사항에 따른 경로 재설정, 연결
- 글 작성 시 로그인한 회원 정보가 자동으로 전달되어 직접 작성하지 않도록
- 필터 작성, 로그인 하지 않으면 글쓰기 불가하도록
- 작성자가 아니면 글 수정/삭제 불가하도록
- 조회수 카운트 기능 추가
- 글쓰기 링크 게시판 화면에 띄우기, 연결
- 어제 날아간 코드 복붙
- 댓글이 달려있어도 게시글을 지울 수 있도록 수정
- 작성자가 아니면 글 수정/삭제 페이지를 '경로로도' 접근할 수 없도록 수정
- 태그 정하고 해주세요 게시판(register, modify)에 적용
- 태그 not null, default "기타" 로 변경
- 태그 게시판 (list, post) 에 표시되도록 추가
- 태그 선택하지 않으면 사다주세요 선택되는 문제 -> 선택하지 않으면 기타로 등록되도록 수정
- list, post 에 c:out 작성하여 script 공격 막기
- 게시글 수정되면 ‘수정됨’ 뜨도록
- innerNav 에 페이지 최상단으로 올라가는 버튼 추가
- edit profile 드롭다운이 innerNav 뒤로 가려지는 문제 해결
- 게시판 (list) 에 작성자 닉네임 표시되도록 추가
- 지역별로 게시글 분류
- 지역 선택시 바로 쿼리에 전달 안되는 문제 해결
- register, modify 폰트 바꾸고 css 일부 수정
- 줄바꿈 반영되어 보여지도록 수정
- 일상생활, 동네소식 게시판 구현
- 일상생활, 동네소식 게시판도 로그인 안하면 글작성 못하도록 수정 (필터에 추가)
- 일상생활, 동네소식 댓글 등록 안되는 문제 해결 (DB 문제)
- 댓글에 대댓글 달 수 있도록 대댓글 기능 추가
- 대댓글 달리면 게시글 삭제 안되는 문제 해결 (테이블에 boardId 컬럼 추가)
- 신고기능 추가
- @RestController -> @Controller 변경하여 포워딩 작동하도록
- 결국 controller 두개로 분리
- 신고관리 게시판 만들기
- 신고관리게시판 관리자만 접근 가능하도록
- 게시글 삭제하면 해당 게시글의 신고내역도 모두 삭제되도록 함
- 게시글은 남겨두고 신고내역만 삭제 가능하도록 함
- 로그인 해야 신고 가능하도록 수정
- 신고관리게시판에 신고 상세사유 있는 경우 tooltip 으로 뜨도록 함
- 관리자가 댓글, 대댓글 삭제 못하는 문제 해결 (controller 수정)
- 신고관리 게시판 카테고리별(게시글/댓글) 필터링 기능 추가, css
- 대댓글 정렬 문제 해결
- 댓글/대댓글 삭제하면 해당 댓글/대댓글의 신고내역도 모두 삭제되도록 함
- 댓글 정렬 변경 (최신 댓글이 아래에 위치하도록)
- 댓글, 대댓글 글자수 최대 200자로 변경
- 일상생활, 동네소식 게시판에도 변경사항 적용
- 동네신문고 게시판에 좋아요 추가
- 일상생활 게시판에 대댓글 안 달리는 문제 해결
- 신고 시 게시판 이름 제대로 넘어가도록 수정
- 해주세요 게시판 글 수정에만 태그에 빌려주세요 있는 것 삭제
- 신문고 게시판에 부족한 기능 추가
- 게시판에 테스트로 작성된 글 모두 삭제하고, 새로 예시 글 작성
- 경로 수정 /controller1/ → ${pageContext.request.contextPath }/
> 게시판 CRUD
0. DB 에 테이블 만들기
1. VO 작성 (class)
2. mapper.xml 작성 (file)
3. mapper.java 작성 (interface)
4. service 작성 (class)
5. controller 작성 (class)
6. jsp 작성 (jsp)
mapper.xml
- 테이블 전체 조회: List<VO> / 한 row 조회 - VO / 한 column 조회 - list / 한 칸 조회 - string
- select: resultType 작성
- nickname 도 같이 불러오기: 기존 getList 에 JOIN 하여 한번에 작성 (단, VO 에도 컬럼명 추가)
- insert: useGeneratedKeys="true" keyProperty="id" keyColumn="id" 작성
- default 값으로 불러올 것들은 쿼리에 작성하지 말 것
- update: 이미 default 값이 들어가있는 updated 는 쿼리에서 직접 NOW() 값을 넣어줘야 함
> modify 화면에서 remove 가 작동하지 않는 (수정으로 작동하는) 문제
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js" referrerpolicy="no-referrer"></script>
↑ 이 코드를 modify.jsp 에 붙여넣기

> 태그 select
register.jsp, modify.jsp 에서 태그를 여러개 중에 선택할 수 있도록

select 안에 option 태그 작성, value 로 값 전달
disabled: 선택 불가, selected: 선택되어있음
태그를 선택하지 않으면 기타로 등록되도록 함
> modify 에서 글 작성 시 등록해놓은 태그가 선택되어있도록 하기
<c:if test="">selected</c:if> 를 option 태그 안에 작성

> 글 작성 시 로그인한 회원 정보가 자동으로 전달되어 사용자가 직접 작성하지 않도록 하기
memberId - hidden
location, nickname - readonly

sessionScope.loginUser
↓ UserController
email 로 회원 정보를 읽어와 vo 에 저장, vo 를 loginUser 에 저장

↓ UserService, UserMapper.java, UserMapper.xml



sessionScope
→

https://m.blog.naver.com/0192141606/70184767551 (출처)
> 로그인 하지 않으면 글쓰기, 수정 못하도록 - 필터 생성, web.xml 에 매핑 작성
CheckLogInFilter 필터 생성, doFilter 다음과 같이 작성

web.xml

* 12/14 수업 참고
> 작성자가 아니면 게시글 수정/삭제 (modify) 불가능 하도록
1) 수정/삭제 버튼이 뜨지 않도록 설정 - post.jsp
<c:if test=""> </c:if> 안에 버튼 넣기
test 에서 ${session.Scope.loginUser.id eq post.memberId} 로 로그인한 유저의 id가 게시글의 memberId와 동일한지 확인

2) 경로로도 접근할 수 없도록 설정 - HelpController

Controller 의 GetMapping("/modify") 의 기존 코드에 위와같이 작성
로그인한 회원의 정보를 loginUser 로 받아와서 uvo
게시글의 id 로 해당 게시글의 정보를 받아와서 hvo
if 문 - 유저의 id 와 게시글의 memberId 가 다르면 all/list 로 리디렉트
session.getAttribute("loginUser")
> 경로
1. "${pageContext.request.contextPath}/(경로)"
2. req.getContextPath()+"(경로)"
↓ 참고1

https://sooblair84.tistory.com/18 (출처)
↓ 참고2

https://byul91oh.tistory.com/203(출처)
+ https://tokkicode.tistory.com/45 참고
> 조회수 카운트
1) mapper.xml

2) mapper.java

3) service

4) controller

post 로의 getMapping 에서 service.upViews(id) 실행
> 댓글이 달려있어도 게시물을 삭제할 수 있도록 - Service 에 @Transactional
댓글이 달려있을 때 게시글을 삭제하려고 하면 다음과 같은 문제가 발생
Cannot delete or update a parent row: a foreign key constraint fails (team.tb_reply_help, CONSTRAINT tb_reply_help_ibfk_1 FOREIGN KEY (boardId) REFERENCES tb_board_help (id))
즉, 댓글의 boardId 가 게시글의 id 를 참조하고 있기 때문에 (외래키) - 삭제 불가능
↓
(12/22 수업 참고)
1) Reply(댓글) mapper.xml 에 작성

2) Reply(댓글) mapper.java 에 작성

3) Help (게시글) service 에 작성


댓글 삭제 코드를 추가하고
@Transactional 작성하여 댓글을 지우고 게시글을 지우는 작업을 묶어서 한번에 처리하도록 함
> updated 와 inserted 가 다르면 (수정됨) 표시되도록

같지 않으면 ne

https://itnewvom.tistory.com/4 (참고)
> innerNav 에 페이지 최상단으로 올라가는 버튼 추가
https://tokkicode.tistory.com/39 (참고)
https://tokkicode.tistory.com/33?category=999654 (참고)


> edit profile 드롭다운이 innerNav 뒤로 가려지는 문제 해결
z-index
https://aboooks.tistory.com/83 (참고)
↓ header

↓ innerNav

→ z-index 가 999 로 가장 큰 header 의 dropdown 이 가장 위에 위치하도록 수정함
> c:out 으로 script 공격 막기


> 줄바꿈이 반영되어 보여지도록 수정
https://offbyone.tistory.com/326 (참고)

'course 2021 > Project' 카테고리의 다른 글
03. 끝 (0) | 2022.01.26 |
---|---|
02. 기록(2) (1) | 2022.01.26 |
01. 시작 (0) | 2021.12.27 |