본문 바로가기

Backend/JSP & Servlet

[JSP & Servlet] JSP 내장객체를 활용하여 간단한 트위터 기능 구현

728x90

# "프로젝트로 배우는 자바 웹 프로그래밍 , 황희정 저" p236 의 트위터 구현 예제를 참고하여 만들었습니다.

 

예제에 추가적인 기능을 추가하여 구현했습니다.

1) 관리자로 로그인 시 다른 아이디의 글을 삭제 할 수 있는 기능

- "Admin"이라는 아이디로 로그인시 다른 아이디의 글들을 삭제할 수 있다.

 

2) 삭제기능

- 같은 아이디가 쓴 글을 삭제 할 수 있도록 하였다. 

- 다른 아이디의 글은 삭제 할 수 없다.

 

* 파일구성은 이렇게 4개로 구성되어있다. 데이터 베이스를 사용하지 않고 application 내장객체를 이용하므로 서버를 종료하고 다시킨다면 글에 대한 정보는 모두 삭제 됨을 참고한다. 

 

1. login.jsp

- 세션을 이용해 로그인을 한다.

2. tweet.jsp

- 글을 작성하는 로직

3. list.jsp

- 모든글을 출력해줌.

4. delete.jsp

- 글을 삭제하는 로직

 

1) login.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
	<title>twitter_login.jsp</title>
</head>
<body>
<div align="center">    
	<H2>트위터 로그인</H2>
	<form name="form1" method="POST" action="list.jsp">       
		<input type="text" name="username">    
		<input type="submit" value="로그인">
	</form>
</div>
</body>
</html>

 

2) list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%    
	request.setCharacterEncoding("UTF-8");
	String username = request.getParameter("username"); //아이디 = username
	if(username != null) {
		session.setAttribute("user",username);
	}
	String user = (String)session.getAttribute("user");
%>
<html>
<head>
	<title>twitter_list.jsp</title>
<script>
function check(){
	if(document.form1.msg.value ==""){
		alert("글을 입력해주세요");
		document.form1.msg.focus();
		return;
	} else{
		alert("트윗 등록 완료");
		document.form1.submit();
	}
}
</script>
</head>
<body>
	<div align=center>
	<H3>Twitter</H3><HR>
	<form action="tweet.jsp" method="POST" name=form1>
	@ <%=user%>  <br>
	<a href="login.jsp">다른 아이디로 로그인 하기</a><br><br>
	<input type="text" name="msg"/>
	<input name ="tweet" type="button" value="쓰기" onClick="check()">
	</form>
		<UL>
		<%
			// application 내장객체를 통해 msgs 이름으로 저장된 ArrayList를 가지고 옴
 			ArrayList <String> msgs = (ArrayList<String>) application.getAttribute("msgs"); 

			//msgs가 null 이 아닌 경우에만 목록 출력
			if(msgs != null) {
				for(int i = 0; i<msgs.size(); i++){
					String str = msgs.get(i);
					String [] split = str.split(":");
					
					if(split[0].equals(user) || user.equals("Admin")){ //Admin 일경우 처리하기. 
						out.println("<form name ='form2' method='post' action='delete.jsp'>"); //delete.jsp 로 보냄. 
						out.println("<li>"+ str);
						out.println("<input type='submit' value='삭제'></li>");
						out.println("<input type='hidden' name='user' value= "+ user +"/>"); // user값을 넘겨주기.
						out.println("<input type='hidden' name='msg' value= "+ split[1] +"/>");
						out.println("</form>");
					} else{
						out.println("<li>"+ msgs.get(i) +"</li>");
					}
				}
			}
		%>
		</UL>
		
	</div>
</body>
</html>

 

3) tweet.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*, java.text.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%        
//트위터 등록하는 로직
	request.setCharacterEncoding("UTF-8");
	String msg = request.getParameter("msg");
	String username = (String) session.getAttribute("user");
	
	ArrayList<String> msgs = (ArrayList<String>) application.getAttribute("msgs");
	
	if(msgs == null) {
		msgs = new ArrayList<String>();
		// application 에 ArrayList 저장
		application.setAttribute("msgs", msgs);
	}
	
	Date date = new Date();
	SimpleDateFormat f = new SimpleDateFormat("E MMM dd HH:mm", Locale.KOREA);
	
	msgs.add(username+":"+msg+" , "+ f.format(date));
	
	application.log(msg+"추가됨");
	response.sendRedirect("list.jsp");
%>

 

 

4) delete.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.*, java.text.*"%>
<%
	request.setCharacterEncoding("UTF-8");
	String username = (String) session.getAttribute("user");
	
	ArrayList<String>msgs = (ArrayList<String>)application.getAttribute("msgs");

	String msg = request.getParameter("msg").trim();
	System.out.println("삭제할 정보 :"+ msg);
	
	if(msgs != null) {
		//이건 돌아가면서 , id같은거, Admin인거 다 지우는 거임. 
		for(int i = 0; i < msgs.size(); i++){
			String str = msgs.get(i).trim();
			String [] split = str.split(":");
			String orgMsg = split[1];
			String realMsgArr[] = orgMsg.split(",");
			String realMsg = realMsgArr[0].trim();
			
			//같은 내용의 글은 지워지는 문제..
			if(split[0].equals(username) || username.equals("Admin")){
				//System.out.println(username + "의 삭제할 param : " +realMsg + " | 받아온것 :" + msg.trim());
				//System.out.println(realMsg.equals(msg.trim()));
				if(realMsg.trim().equals(msg.trim())){
					msgs.remove(i);
					System.out.println(str+"삭제");
				}
			}
		}
	}
	response.sendRedirect("list.jsp");	
%>

zeroco로 로그인 한 실행결과
손님 1로 로그인한 결과
Admin 관리자로 로그인한 결과

 

# 참고

 

IT CookBook, 프로젝트로 배우는 자바 웹 프로그래밍

컴퓨터 관련학과 학생과 IT 전문학원에서 자바 웹 프로그래밍을 처음 배우려는 학생을 대상으로 한다. 자바 프로그래밍 경험이 있으면 좋지만 웹에 대한 전반적인 내용만 알아도 충분히 이해할

www.hanbit.co.kr

 

728x90