클라이언트에서 업로드한 파일을 서블릿에서 경로를 지정해 저장하고자 한다. 우선 업로드한 파일을 서블릿에서 처리하려면 form 태그에 enctype 속성을 추가해야한다. form 태그를 통해 서블릿에 요청으로 넘어온 데이터들은 하나의 HTTP Request Body에 들어가는데 multipart를 설정하면 그 안에서 각 데이터의 종류를 구분할 수 있게 된다. 그 다음 요청을 받는 서블릿에 @MultipartConfig 어노테이션을 추가한다. MultipartConfig 어노테이션에는 몇 가지 속성이 존재하며 생략할 수도 있다. 설정을 마친 뒤 서블릿에서 파일을 저장하는 구문을 작성하면 된다. 1. 파일 저장 경로 설정 File file = new File("D:/uploads"); if(!file.exis..
암호화 이름 그대로 입력받은 문자열을 암호로 바꾸어 알아볼 수 없게 만드는 일을 말한다. 보통 개인정보나 중요한 정보들을 보호하기 위해 사용한다. 내 경우에는 익명 게시판을 제작하려고 한다. 익명 게시판이기 때문에 게시글의 수정 / 삭제 권한을 확인할 방법을 따로 마련해야한다. 이를 위해 게시글 작성자는 게시글을 작성할 때 본인 확인을 위한 비밀번호를 추가로 작성한다. 이번 실습에서는 이 비밀번호를 DB에 저장하는 과정에서 사용해보려고 한다. public String encryptPass(String bPass) { MessageDigest md = null; try { md = MessageDigest.getInstance("SHA-256"); md.update(bPass.getBytes()); } c..
댓글과 대댓글 구현 게시판을 제작하면서 댓글과 대댓글을 구현하고자 한다. 게시글에 대해 댓글을 달 수 있고 해당 댓글에 대댓글을 달 수 있고 그리고 그 대댓글에 또 대댓글을 작성할 수 있는 형태이다. 데이터 베이스의 테이블 구조는 아래와 같다. 댓글 번호 PK 게시글 번호 회원 아이디 댓글 내용 작성일자 대상 댓글 번호(target_id) 여기서 핵심이 되는 부분은 대상 댓글 번호이다. 대상 댓글 번호 대상 댓글 번호는 만약 작성된 댓글이 대댓글일 경우 어떤 댓글에 작성된 댓글인지 표시하는 컬럼이다. 예를들어 처음 작성된 1번 댓글은 당연히 게시글에 대해 작성된 댓글이므로 대상 댓글 번호가 없다. 그러므로 해당 댓글의 대상 댓글 번호는 null이나 0이 될 수 있다. 그리고 2번 댓글을 작성하는데 이 댓..