JSP

[JSP] servlet 활용 _ 갤러리만들기

(งᐛ)ว 2023. 11. 2. 01:49
728x90

필요한 파일을 먼저 세팅하자

 


 

 

갤러리정보를 데이터베이스에 테이블 추가했다고 가정함 (테이블명 : PHOTO) 추가방법은 이전글 JDBC_1 참고

 

DBService.java파일은 그대로 사용가능 (캡쳐생략)

VO / DAO (앞으로는 DAO파일 호출이 서블렛에서 이루어짐)

 

 

 

photo.css (외부스타일시트참조 예정) 

더보기
@charset "UTF-8";

*{margin:0; padding:0;}

#main_box h1{text-align : center;
	     text-shadow : 3px 3px 5px gray;
	     color : white;}
			 
#main_box{width : 800px;
	  margin : 0 auto;}

#photo_box{margin : 20px auto;
	   width : 710px;
	   height : 665px;
	   border : 1px solid blue;
	   padding : 10px;
	   overflow : auto;
	   box-shadow : 5px 5px 10px gray;
	}			 	
	
.photo_type{
	width:150px;
	height:200px;
	border:1px solid green;
	float:left;
	margin:10px;
}	

.photo_type img{
	display : block;
	margin: auto;
	width : 98%;
	height : 150px;	
}

 

 

photo_list.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!-- 코어 라이브러리 -->
    
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Insert title here</title>
		<!-- 외부 스타일시트 참조 -->
		<link rel = "stylesheet" href="css/photo.css">
		
		<script src="js/httpRequest.js"></script>
		<script type="text/javascript">
			function del(f){
				var idx = f.idx.value;
				var pwd = f.pwd.value; //원본비밀번호
				var pwd2 = f.pwd2.value; //우리가 입력한 비밀번호
				
				if(pwd != pwd2){
					alert("비밀번호가 일치하지 않습니다.");
					return;
				}
				
				if(!confirm("삭제하시겠습니까?")){
					return;
				}
				
				//ajax사용해보자 
				var url = "photo_del.do";
				var param = "idx="+idx+"&filename="+f.filename.value;
				
				sendRequest(url,param,finRes,"POST"); //finRes : 콜백함수
			}			
			
			function finRes(){
				if(xhr.readyState == 4 && xhr.status == 200){
					
					//서블릿으로부터 도착한 데이터 읽어오기
					var data = xhr.responseText;
					
					//넘겨받은 data는 ""로 묶인 문자열로 인식하기 때문에 실제 json데이터로 변환해야함
					var json = eval(data); //eval함수 : 문자열안에 수식이 있으면 실제로 실행시켜줌
					
					if(json[0].param=='yes'){
						alert("삭제성공");
					}else{
						alert("삭제실패");
					}
					
					location.href="list.do";
				}	
			}
			
			
		</script>
	</head>
	<body>
		<div id="main_box">
			<h1>:::PhotoGallery:::</h1>
			<div align="center" style="margin:10px;">
				<input type = "button" value = "사진등록" onclick="location.href='insert_form.jsp'">
			</div>
		
			<div id = "photo_box">
				<!-- 맨 처음엔 리스트에 아무것도 없으므로 실행해도 아무것도 뜨지 않음 -->
				<c:forEach var="vo" items="${list}">
					
					<div class = "photo_type">
						<img src="upload/${vo.filename}">
						<div class = "title">${vo.title}</div>
						
						<form>
							<!-- 원본 일련번호 -->
							<input type="hidden" name="idx" value="${vo.idx}">
							<input type="hidden" name="pwd" value="${vo.pwd}">
							<input type="hidden" name="filename" value="${vo.filename}">
							<div align = "center">
								<input type="password" name="pwd2" size="5">
								<input type = "button" value = "삭제" onclick="del(this.form)">
							</div>
						</form>
						
					</div>
					
				</c:forEach>
			</div>
		
		</div>
	</body>
</html>

 

 

PhotoListAction.java

URL mappings 수정명 : /list.do

package action;

import java.io.IOException;

/**
 * Servlet implementation class PhotoListAction
 */
@WebServlet("/list.do")
public class PhotoListAction extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		//DAO 호출하기 
		List<PhotoVO> list = PhotoDAO.getInstance().selectList();
	
		//출력하려면 서블렛 객체 4가지 중 request영역에 바인딩을 해주자 
		request.setAttribute("list", list);
		
		//request영역에 바인딩된 데이터를 어떤 jsp에서 사용할 것인지 포워딩하자 
		RequestDispatcher disp = request.getRequestDispatcher("photo_list.jsp");
		disp.forward(request, response);
	
	}

}

 

 

insert_form.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>Insert title here</title>
		<script type="text/javascript">
			function send(f){
				var title = f.title.value;
				var pwd = f.pwd.value;
				var photo = f.photo.value;
				
				if(title==""){
					alert("제목을 입력하세요.");
					return;
				}
				
				f.submit();
				
			}
		</script>
	</head>
	<body>
		<form action="insert.do" method="post" enctype="multipart/form-data">
			<table border = "1" align="center">
				<caption>사진등록하기</caption>
				<tr>
					<th>제목</th>
					<td><input name = "title"></td>
				</tr>
				<tr>
					<th>비밀번호</th>
					<td><input name = "pwd" type="password"></td>
				</tr>
				<tr>
					<th>등록할사진</th>
					<td><input name = "photo" type="file"></td>
				</tr>
				<tr>
					<td colspan = "2" align="center">
					<input type="button" value="등록하기" onclick="send(this.form)">
					<input type="button" value="목록으로" onclick="location.href='list.do'"> <!-- db에서 조회한내용을 보여줘야하므로 list.do로 돌아간다 -->
				</tr>
			</table>
		</form>
	</body>
</html>

 

 

PhotoInsertAction.java

URL mappings 수정명 : /insert.do

package action;

import java.io.File;

/**
 * Servlet implementation class PhotoInsertAction
 */
@WebServlet("/insert.do")
public class PhotoInsertAction extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//insert.do?title=aaa&pwd=1111&photo=%^%^%^
		
		String web_path = "/upload";
		ServletContext application = request.getServletContext();
		String path = application.getRealPath(web_path);
		System.out.println(path);
		
		int max_size = 1024*1024*100;
		MultipartRequest mr = new MultipartRequest(request, path, max_size, "utf-8", new DefaultFileRenamePolicy()); //절대경로에 파일 업로드까지 됨 
		
		
		String filename = "";
		File f = mr.getFile("photo");
		if(f!=null) {
			filename=f.getName();
		}
		
		String title= mr.getParameter("title");
		String pwd = mr.getParameter("pwd");
		String id = request.getRemoteAddr();
		
		PhotoVO vo = new PhotoVO();
		vo.setTitle(title);
		vo.setPwd(pwd);
		vo.setFilename(filename);
		vo.setIp(id);
		
		int res = PhotoDAO.getInstance().insert(vo);
		
		if(res>=1) {
			response.sendRedirect("list.do");
		}
	}


}

 

 

DAO 

 

 

PhotoDelAction.java

URL mappings 수정명 : /photo_del.do

package action;

import java.io.File;

/**
 * Servlet implementation class PhotoDelAction
 */
@WebServlet("/photo_del.do")
public class PhotoDelAction extends HttpServlet {
	private static final long serialVersionUID = 1L;

	/**
	 * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// Photo_del.do?idx=3&filename=aaaa
		
		request.setCharacterEncoding("UTF-8"); //POST 방식으로 넘길때 데이터깨짐방지 
		
		int idx= Integer.parseInt(request.getParameter("idx"));
		String filename= request.getParameter("filename"); //절대경로의 파일도 삭제해야하므로 필요
		
		String web_path = "/upload";
		ServletContext app = request.getServletContext();
		String path = app.getRealPath(web_path);
		
		System.out.println(path);
		
		int res = PhotoDAO.getInstance().delete(idx);
	
		
		if(res>0) {
			File f= new File(path,filename); //파일클래스 객체가 경로로 접근하여 파일이름을 찾는다
			if(f.exists()){
				f.delete(); //path경로에 파일 제거 
			}
		}
		
		String param="no";
		if(res>0) {
			param="yes";
		}
		
		//결과값은 param을 json구조로 포장 
		String resultStr = String.format("[{'param':'%s'}]",param); //yes or no
		
		//resultStr값을 가지고 콜백 메서드로 복귀
		response.getWriter().print(resultStr);
	}

}

 

 

DAO 

 

 

결과

 

 

 

 

728x90

'JSP' 카테고리의 다른 글

[JSP] 쿠키와 세션  (0) 2023.11.04
[JSP] servlet 활용 _ 사용자목록만들기  (0) 2023.11.03
[JSP] servlet 활용 _ 파일업로드  (0) 2023.11.02
[JSP] JSON  (0) 2023.11.01
[JSP] Ajax  (0) 2023.11.01