코딩항해기
[실습/JSP] 댓글 프로그램 만들기 (+풀이 0807) 본문
[실습]
배운 내용을 적절히 활용해서 다음 내용 구현하기.
a.jsp에서는방문자의 이름을 등록한다.
a에서 설정한 이름으로 b.jsp에서 댓글을 쓸 수 있다.
c.jsp에서 댓글을 등록하는 로직을 구현하기.
사용자가 a↔b페이지를 이동해도 댓글을 써왔던 목록들은 유지된다.
[로직]
- a에서 입력받은 이름을 세션에 저장하며 b로 이동한다.
- b에서 댓글 내용을 입력받아 c로 이동하며,
- c에서는 사용자 명과 함께 댓글이 세션에 저장된다.
- b로 이동하여 댓글을 추가 입력받거나 댓글을 보여준다.
a.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>a</title>
</head>
<body>
<h1>A</h1>
<form action="b.jsp" method="POST">
<input type="text" name="name" placeholder="사용자 명을 입력하세요." required>
<input type="submit" value="입장">
</form>
</body>
</html>
b.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.ArrayList"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>b</title>
</head>
<body>
<%
if(request.getParameter("name") != null){//넘어오는 값이 있다면
session.setAttribute("user", request.getParameter("name"));//세션 user명 갱신
}
%>
<h1>B</h1>
<a href="a.jsp">처음으로 돌아가기</a>
<hr>
<form action="c.jsp" method="POST">
<%= session.getAttribute("user") %>님의 댓글 :
<input type="text" name="reply" placeholder="댓글 내용을 입력하세요." required>
<input type="submit" value="댓글 등록">
</form>
<hr>
<ul>
<%
if(session.getAttribute("replyList") != null){ //댓글이 한 개라도 있다면
try{
for(String reply : (ArrayList<String>)session.getAttribute("replyList")){
out.println("<li>"+reply+"</li>"); //댓글 출력
}
}
catch(ClassCastException e){
e.printStackTrace();
}
}
%>
</ul>
</body>
</html>
c.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.ArrayList"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>c</title>
</head>
<body>
<%
ArrayList<String> replyList = new ArrayList<>();//댓글리스트
if(session.getAttribute("replyList") != null){ //기존 댓글 내역이 있다면
try{
replyList.addAll((ArrayList<String>)session.getAttribute("replyList"));
//새 댓글리스트에 옮겨주기
}
catch(ClassCastException e){
e.printStackTrace();
}
}
replyList.add(session.getAttribute("user")+"님 >> "+request.getParameter("reply")); //저장할 데이터
session.setAttribute("replyList", replyList);//세션 댓글리스트 갱신
response.sendRedirect("b.jsp");//페이지 이동
%>
</body>
</html>
[결과]
[풀이 후 보완할 점]
가독성을 높이고 하드코딩을 방지하기 위해 변수를 선언해 상단 배치하고 사용하는 것이 좋다.
c.jsp는 V파트가 아니므로 화면이 필요없다. !Document html 태그들이 전부 필요없다.
지금은 댓글이 새로 들어올 때마다 new가 실행되는데 첫 댓글 때만 만들어지도록 하면 new를 줄일 수 있다.
session에서 ArrayList를 받아와서 값을 넣으면 된다. (캐스팅을 해주지 않아 관련 메서드가 뜨지 않았던 것이다.)
더보기
b
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="java.util.ArrayList"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>b</title>
</head>
<body>
<%
String name = request.getParameter("name");
String user = ""+session.getAttribute("user");
if(name != null){//넘어오는 값이 있다면
session.setAttribute("user", name);//세션 user명 갱신
}
%>
<h1>B</h1>
<a href="a.jsp">처음으로 돌아가기</a>
<hr>
<form action="c.jsp" method="POST">
<%= user %>님의 댓글 :
<input type="text" name="reply" placeholder="댓글 내용을 입력하세요." required>
<input type="submit" value="댓글 등록">
</form>
<hr>
<ul>
<%
ArrayList<String> replyList = (ArrayList<String>)session.getAttribute("replyList");
if(replyList != null){ //댓글이 한 개라도 있다면
try{
for(String reply : replyList){
out.println("<li>"+reply+"</li>"); //댓글 출력
}
}
catch(ClassCastException e){
e.printStackTrace();
}
}
else{
out.println("<div style='color:gray;'>아직 작성된 댓글이 없습니다...</div>");
}
%>
</ul>
</body>
</html>
c
'problem solving > 과제&실습 코딩' 카테고리의 다른 글
[실습/JSP] JSP 로그인 회원가입 연습하기 (1) | 2024.08.08 |
---|---|
[실습/JSP] 장바구니 프로그램 만들기 (+풀이 0807) (0) | 2024.08.07 |
[과제/JSP] JSP 기초 연습을 위한 회원가입 구현하기 (0) | 2024.08.06 |
[실습/JAVA] 쇼핑몰 프로그램에 웹크롤링 묻히기 (+풀이 0726) (0) | 2024.07.25 |
[실습/JAVA] 파일 입출력 연습하기 (+풀이 0725) (0) | 2024.07.25 |