WEB
[요구사항]
a.jsp 에서는 방문자의 이름을 등록합니다.
a 페이지에서 설정한 이름으로 b.jsp 에서 댓글을 쓸수있습니다.
c.jsp 에서 댓글을 등록하는 로직을 구현해주세요.
사용자가 a<->b 페이지를 이동해도 댓글을 써왔던 목록들은 유지됩니다.
[a.jsp]
<body>
<form action="b.jsp" method="POST">
이름 : <input type="text" name="name" placeholder="이름 작성" required />
<input type="submit" value="등록" />
</form>
</body>
[b.jsp]
<body>
<%
session.setAttribute("user", request.getParameter("name"));
%>
<a href="a.jsp">처음으로 돌아가기</a>
<hr>
<form action="c.jsp" method="POST">
<%= session.getAttribute("user") %>님의 댓글 : <input type="text" name="re" placeholder="댓글 작성" />
<input type="submit" value="댓글 등록" />
</form>
<hr>
<ul>
<% for(){ %>
<li></li>
<% } %>
</ul>
</body>
딱 여기까지 쓰고 어버버 거림 for,,, for인데,,,
[c.jsp]
<body>
<%
ArrayList<String> datas = new ArrayList<String>();
datas.add(request.getParameter("re"));
%>
</body>
c.jsp에서도 여기까지 쓰고 어버버 거림 리스트... 리스트인데....
어쩔 수 없이 아쿠마(지피티)와 손을 잡음
- 사용자가 a.jsp에서 이름을 등록합니다.
- 등록된 이름으로 b.jsp에서 댓글을 작성할 수 있습니다.
- 댓글 작성 폼이 c.jsp로 전송되고, c.jsp는 댓글을 세션에 저장한 후 b.jsp로 리디렉션합니다.
- b.jsp는 세션에서 댓글 목록을 가져와 표시합니다.
악마가 알려준 방법
(사실 코드도 짜줌)
a.jsp는 똑같고
[b.jsp]
<body>
<%
session.setAttribute("user", request.getParameter("name"));
// 추가된 부분
// 댓글list가 저장된 세션을 list에 저장
ArrayList<String> comments = (ArrayList<String>) session.getAttribute("re");
if (comments == null) { // list가 비어있다면
comments = new ArrayList<String>(); // 새 list 생성
session.setAttribute("re", comments); // 새 list 세션에 저장
}
%>
<a href="a.jsp">처음으로 돌아가기</a>
<hr>
<form action="c.jsp" method="POST">
<%= session.getAttribute("user") %>님의 댓글 : <input type="text" name="re" placeholder="댓글 작성" />
<input type="submit" value="댓글 등록" />
</form>
<hr>
<ul>
// 추가된 부분
<%
for (String cmt : comments) { // 세션에서 꺼내온 list를 돌면서
%>
<li><%= cmt %></li> // 출력
<%
}
%>
</ul>
</body>
[c.jsp]
<%
// ArrayList<String> datas = new ArrayList<String>();
// datas.add(request.getParameter("re"));
//추가된 부분
// 세션에 저장된 이름을 userName에 저장
String userName = (String) session.getAttribute("user");
if (userName == null) { // userName이 비어있다면
response.sendRedirect("a.jsp"); // a.jsp로 이동
return;
}
// 댓글 작성 form에서 받은 댓글 내용을 comment에 저장
String comment = request.getParameter("re");
// 세션에 저장되어 있는 댓글 목록을 comments list에 저장
ArrayList<String> comments = (ArrayList<String>) session.getAttribute("re");
if (comments == null) { 댓글 목록이 비어있다면 새 댓글 목록 생성
comments = new ArrayList<String>();
}
// form에서 넘겨 받은 댓글 내용이 비어있지 않다면
if (comment != null && !comment.isEmpty()) {
// 유저 이름과 댓글 내용을 댓글 목록에 저장
comments.add(userName + " >> " + comment);
// 댓글 목록을 다시 세션에 저장
session.setAttribute("re", comments);
}
// b.jsp로 이동
response.sendRedirect("b.jsp");
%>
session은 Object 타입이기 때문에 형변환을 해줘야함
댓글을 작성했을 때 어떻게 이 전 유저의 댓글까지 남겨 둘지를 고민
==> 댓글 목록을 저장할 세션을 생성
알쏭달쏭한 jsp의 세계 훠훠
'javaboiii의 Web > JSP' 카테고리의 다른 글
Web - JSP 페이지 처리 (0) | 2024.08.12 |
---|---|
Web - JSP 페이지 이동 및 데이터 전송 방법 (0) | 2024.08.09 |
Web - JSP 예제2 (0) | 2024.08.08 |
Web - JSP) 내장 객체 (0) | 2024.08.07 |
Web - JSP 기초 (0) | 2024.08.06 |