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");
%>
# 참고
728x90
'Backend > JSP & Servlet' 카테고리의 다른 글
[JSP & Servlet] WAS에서 제공하는 Connection Pool 이용하는 방법 (0) | 2021.02.22 |
---|---|
[JSP & Servlet] include 지시어와 include 액션태그의 차이점 (0) | 2021.02.19 |
[JSP & Servlet] Servlet을 통하여 JSP 기본 태그 알아보기 (0) | 2021.02.18 |
[JSP & Servlet] 페이지 이동 방식 forward와 redirect 방식의 차이 (0) | 2021.02.18 |
[JSP & Servlet] Servlet 의 실행과정 (0) | 2021.02.18 |