모도리는 공부중

21.01.19. JSP & Servlet - 메세지 전체삭제 본문

K-디지털 빅데이터 분석서비스 개발자과정 20.11.02~21.04.12/JAVA

21.01.19. JSP & Servlet - 메세지 전체삭제

공부하는 모도리 2021. 1. 19. 13:49
728x90
반응형

main에 가면 무조건 session에 있는 info에서 값을 가져온다. 로그인을 했으면 로그인한 정보가 있을 것이고 없으면 null로 나오게 설정을 해놓았다. 마찬가지로 이것을 이용해서 '나에게 온 메세지 확인하기'도 설정해보자.

하나의 메세지는 하나의 dto로 묶을 수 있다. 메세지 보내기할 때도 묶었듯이 dao로 묶어주도록 하자.

나에게 온 메세지는 하나일까? 그렇지 않고 가변적일 것이다. 여러 개를 받아와야하므로 '가변'과 '다수'를 충족하는 배열, ArrayList로 받아올 수 있게 코드를 만들어주는 것이 좋다.

<!-- Two -->
	<section id="two">
		<div class="inner">
			<header class="major">
				<h2>나에게 온 메세지 확인하기</h2>
			</header>
			<p></p>
			<ul class="actions">
				<% if(info == null){ %>
					<li>로그인을 하세요.</li>
				<% }else{ 
					MessageDAO dao = new MessageDAO();
					ArrayList<MessageDTO> list = dao.selectMessage(info.getEmail()); //메세지는 여러건 받아오니까 어레이리스트로.
					System.out.print("나에게 온 메세지 개수 : "+list.size()); %>
					<li><a href="#" class="button next scrolly">전체삭제하기</a></li>
				<% } %>
			</ul>
		</div>
	</section>

이제 여러분은 MessageDAO에 selectMessage를 만들어보도록 합시다.

public ArrayList<MessageDTO> selectMessage(String email){
	ArrayList<MessageDTO> list = new ArrayList();
	
	getConnection();
	String sql = "select * from web_message where receive_email=?";
//			메세지는 전체, 조건절에 리시브이메일과 인포이메일이 같은 것을 셀렉트해와라.
	try {
		psmt = conn.prepareStatement(sql);
		psmt.setString(1, email); // 매개변수로 받아온 로그인 이메일을 받아와서 물음표를 채워준다.
		rs = psmt.executeQuery(); // 표 형태로 된 곳을 한줄씩 내려가며 true, false 반환. true일 때 밑에 한 줄이 있다고 보며 한줄씩 내려간다.
		while(rs.next()) {
			int num = rs.getInt(1);
			String send_name = rs.getString(2);
			String receive_email = rs.getString(3);
			String content = rs.getString(4);
			String day =  rs.getString(5);
			
			MessageDTO dto = new MessageDTO(num, send_name, receive_email, content, day);
			list.add(dto); // dto를 사용하는 목적 중에서 한 번에 데이터를 돌려주기 위해 쓰는 목적에 해당.
			}
		
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} finally {
		close();
	}
	return list;
}

 

잘 만들어졌다면 main.jsp로 가서 실행하여 console창에 잘 출력되는지 확인.

출력을 확인했다면 이제 웹에서도 메세지가 잘 노출되도록 구현하도록 한다. 이왕 보여주는 거라면 깔끔하게 표 형태로 보여주는 것이 더 예쁘고 좋을 것이다. table태그를 사용하여 만들어보자.

<!-- Two -->
	<section id="two">
		<div class="inner">
			<header class="major">
				<h2>나에게 온 메세지 확인하기</h2>
			</header>
			<p></p>
			<ul class="actions">
				<% if(info == null){ %>
					<li>로그인을 하세요.</li>
				<% }else{ 
					MessageDAO dao = new MessageDAO();
					ArrayList<MessageDTO> list = dao.selectMessage(info.getEmail()); //메세지는 여러건 받아오니까 어레이리스트로.
				%>
					<table>
						<tr>
							<td>번호</td>
							<td>보낸사람</td>
							<td>내용</td>
							<td>날짜</td>
							<td>삭제</td>
						</tr>
						<% for (int i = 0; i < list.size(); i++) { %>
							<tr>
								<td><%= i+1 %></td>
								<td><%= list.get(i).getSend_name() %></td>
								<td><%= list.get(i).getContent() %></td>
								<td><%= list.get(i).getDay() %></td>
								<td>삭제</td>
							</tr>
						<% } %>
					</table>
					<li><a href="#" class="button next scrolly">전체삭제하기</a></li>
				<% } %>
			</ul>
		</div>
	</section>

삭제는 일단 글씨 구현만 하고 코드 작성 완료.

 

결과 확인 :

나트리스에게 하고 싶은 말을 썼는데 받는 사람이 나였네.. 이런.

지금 내 경우는 시간 순서도 깔끔하게 잘 가지고 왔지만 아닌 경우가 있다고 한다. 가지고 오기 빠른 순서대로 가져오니까? 라고 하는데.. 내것도 그랬다면 이해를 하고 진행했겠지만 솔직히 내것은 그렇지 않아서 일단 따라서 코드를 작성하도록 하겠다.

 

시간 순서대로 메세지가 쌓이는게 보통이다. 그럼 그것을 어디에서 해주는 것이 좋을까? main? 바로 MessageDAO이다. 우리가 작성한 sql문을 조금만 손봐주면 된다.

String sql = "select * from web_message where receive_email=? order by day desc";

이렇게 하면 시간 순서대로 메세지가 정렬되어 보여준다고 한다.

 

보류해둔 메세지 삭제를 진행하자. 일단 '전체삭제'부터. main.jsp에서 '전체삭제하기'가 적혀있는 태그에 하이퍼링크로 서블릿을 걸어주자.

<li><a href="RemoveAllMessageService" class="button next scrolly">전체삭제하기</a></li>

해당 서블릿 생성.

package com.controller;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import com.model.MemberDTO;
import com.model.MessageDAO;

@WebServlet("/RemoveAllMessageService")
public class RemoveAllMessageService extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		HttpSession session = request.getSession(); // 로그인정보는 session 안에 있는 
		MemberDTO info = (MemberDTO) session.getAttribute("info"); // info가 가지고 있다. session은 object타입이므로 다운캐스팅까지.
		MessageDAO dao = new MessageDAO();
		int cnt = dao.removeAll(info.getEmail()); // 로그인 정보와 일치하는지 확인해서 동일하다면 메세지 삭제를 진행하도록.
		
		if (cnt > 0) {
			System.out.println("메세지 전체삭제 성공");
		} else {
			System.out.println("메세지 전체삭제 실패");
		}
		
		response.sendRedirect("main.jsp#two");
	}

}

removeAll 메서드를 만들어준다.

public int removeAll(String email) {
	int cnt = 0;
	getConnection();
	String sql = "delete from web_message where receive_email = ?";
	try {
		psmt = conn.prepareStatement(sql);
		psmt.setString(1, email);
		cnt = psmt.executeUpdate(); //테이블 안에 결과 변화가 생겼다면 update.
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} finally {
		close();
	}
	return cnt;
}

참고로 나는 sql문에서 오류를 계속 일으켰다. 정상적으로 입력했는데도 불구하고 자꾸 invalid table name이라는 오류를 띄우며 삭제 실패로 이어졌다. 이유는 문장에 있었으니 바로..

String sql = "delete * from web_message where receive_email = ?";

delete 뒤에 있던 *이 문제를 일으킨 것. *을 삭제해주자 문제없이 전체삭제가 진행된 모습을 확인할 수 있었다.

DB도 깔끔히 삭제 완료

이렇게 오늘의 수업도 끝!

 

선생님이 알려주신 무료 템플릿 사이트에서 받은 압축파일을 풀어서 사용하는 방법.

index.html 상태로 사용해도 되지만 그렇게 쓰면 우리가 쓰고자하는 자바언어의 사용이 불가하다. 이 문제를 해결하는 방법?

코드를 전체 드래그해서 내가 만든 jsp파일에 복붙. 그렇게 하면 된다고 한다!(?)

 

이번 프로젝트.. 화이팅. 우리 모두 힘내봅시다.

728x90
반응형
Comments