빅데이터 Java 개발자 교육 - 34일차 물품판매 웹 이미지 추가하기 기능 [JSP 및 Servelt]

Jun_Gyu·2023년 3월 19일
0
post-thumbnail

지난시간에 이어 이번에는 이미지를 등록하고 물품별로 조회할 수 있는 기능을 추가하려고 한다.

먼저 사이트에 이미지를 출력할 수 있게끔 셋팅해보도록 하자.

페이지에 이미지 띄우기


안녕?

우리는 위의 고양이 사진을 사이트의 메인화면에 프로필로 사용할것이다.


먼저 webapp 하위폴더에 resources라는 폴더를 생성하여


UI로 사용해줄 파일들을 넣을 공간을 만들어주겠다.
이미지파일은 images폴더에 저장할것이다.


<img src="${pageContext.request.contextPath}/resources/images/5109431_agiLaciMHn_1659098198501.jpeg"
				style="width:90px; height:100px"/>

위의 코드에는 서블릿에 접근하는것이 아니라 images 폴더에서 바로 불러와서 사용할 수 있도록 ${pageContext.request.contextPath}를 사용하였다. (절대경로)

이를 jsp의 body에 적용하면

itemselect1.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>물품목록</title>
	</head>
	<body>
				<img src="${pageContext.request.contextPath}/resources/images/5109431_agiLaciMHn_1659098198501.jpeg"
				style="width:90px; height:100px"/>
	
				<form action="selectlist.do" method="get">
					<select name="type">
						<option value="name">물품명</option>
						<option value="content">물품내용</option>				
					</select>
					<input type="text" name="text" placeholder="검색어 입력" />
					<input type="submit" value="검색" />
				</form>
			<hr />
			<c:forEach var="obj" items="${list}">
			${obj.no}, ${obj.name}, ${obj.content},
			${obj.price}, ${obj.quantity}, ${obj.regdate}
			<button>물품1개수정</button>
			<button>물품1개삭제</button>
			<a href="insertimageone.do?itemno=${obj.no}"><button>이미지1개등록</button></a>
			<a href="selectimagelist.do?itemno=${obj.no}"><button>등록된이미지보기</button></a>
			<br />
			</c:forEach>
			<hr />
	</body>
</html>

와 같이 구성해줄 수 있겠다.

웹에서 실행하게 되면 위와같이 적용이 된 모습을 확인할 수 있다.


이번에는 물품별 사진을 등록, 조회하기 위한 기능을 추가해보도록 하겠다.

그전에 지난번 실습때 만들어 둔 itemselectlist1.jps에 아래와 같이 코드를 수정하였다.

<a href="insertimageone.do?itemno=${obj.no}"><button>이미지1개등록</button></a>
<a href="selectimagelist.do?itemno=${obj.no}"><button>등록된이미지보기</button></a>

이미지1개 등록 버튼을 눌렀을때 이동할 페이지 주소와 더불어, 등록된 이미지 보기 버튼과 주소를 생성& 할당해주었다.


DB에 이미지파일 등록하기

ItemImageMapper

@Insert( value = {
		"  INSERT INTO itemimage ( itemno, filename, filesize, filetype, filedata  )  ",
		"	VALUES (  ",
			"	#{obj.itemno},   #{obj.filename}, ",
			"   #{obj.filesize}, #{obj.filetype}, ",
			"   #{obj.filedata}  ) "
	} )
	public int insertItemImage(@Param("obj") ItemImage itemImage);

이미지파일당 존재하는 이름, 사이즈, 이미지 타입, 그리고 데이터까지 전송을 할 수 있도록 했다.

ItemImageInsertServlet

@WebServlet(urlPatterns = { "/seller/insertimageone.do" })

@MultipartConfig(fileSizeThreshold = 1024 * 1024 * 1, // M
		maxFileSize = 1024 * 1024 * 10, // 10M
		maxRequestSize = 1024 * 1024 * 100 // 100M
)

이미지를 다루는 Servlet의 경우에는 위와 같이 @MultipartConfig 어노테이션을 추가하여 이미지의 크기를 원하는 정도로 조절해야한다.

이를 적용하여 메소드를 아래와 같이 구성하였다.

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		// /seller/insertimageone.do?itemno=1004

		long no = Long.parseLong(request.getParameter("itemno")); 
        // <a href="insertimageone.do?itemno=${obj.no}"><button>이미지1개등록</button></a> 
        // ?iemno 는 name = itemno, 
        // ${obj.no}는 value = obj.no 를 뜻한다.

		request.setAttribute("itemno", no); // "itemno" = (long) no
		request.setAttribute("title", "물품이미지1개 등록"); // "title " = "물품이미지 1개 등록"
		request.getRequestDispatcher("/WEB-INF/itemimageinsert1.jsp").forward(request, response); 
        // 해당 jsp로 보냄

	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		ItemImageMapper mapper = MyBatisContext.getSqlSession().getMapper(ItemImageMapper.class);

		
		long itemno = Long.parseLong(request.getParameter("itemno"));
		long no = Long.parseLong(request.getParameter("no"));

		Part part = request.getPart("file");

		ItemImage obj = new ItemImage(); // 이미지 저장 dto
		obj.setItemno(itemno);
		obj.setItemno(no);
		obj.setFilename( part.getSubmittedFileName() ); // 첨부한 파일명
		obj.setFilesize( part.getSize() ); // 첨부한 파일크기
		obj.setFiletype( part.getContentType() ); // 첨부한 파일의 종류 (gif, jpg, png ...)
		obj.setFiledata( part.getInputStream().readAllBytes() ); // 첨부한 파일 실제 데이터
		
		int ret = mapper.insertItemImage(obj);
		
		if(ret == 1 ) {
			// 상황에 따라서 이동하는 페이지가 달라져야 함. ()
			String backurl = request.getParameter("backurl"); // 현재페이지 값을 저장하는 backurl 지정
			// response.sendRedirect("selectlist.do?itemno=X"); //성공시의 물품목록으로
			response.sendRedirect(backurl); // 성공시 각 상황에 맞도록 화면 전환 
		}
		else {
			response.sendRedirect("insertimageone.do?itemno="+ itemno); // 실패시 현재페이지로
		}
		// mapper를 만들어서 insert를 수행하면 DB에 추가가 됨.
	}

이를 jsp에 적용해보았다.

itemimageinsert1.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 lang="ko">
<head>
	<meta charset="UTF-8">
		<title>${title}</title>
</head>
	<body>
		<a href="selectlist.do">이전페이지로 이동</a>	
		<hr />
		
		<h3>${title}</h3>
		
		<!-- 주소창을 바꾸고 정보는 숨기고, 정보의 내용중에서는 파일도 있음. -->
		<form action="insertimageone.do" method="post" enctype="multipart/form-data">
		<input type="hidden" name="backurl" value="selectlist.do" />
		물품번호 1.(주소창의 값을 바로읽기) : <input type="text" value="${param.itemno}" name="itemno" readonly/><br />
		물품번호 2.(Servlet에서 받아오기)) : <input type="text" value="${itemno}" name="itemno2" readonly/><br />
		이미지 : <input type="file" name="file" /><br />
		<input type="submit" value="이미지등록" />
		</form>	
	</body>
</html>

물품번호 1.인 경우에는 현재 표시된 창에서 itemno를 파라미터를 이용해서 불러왔고,
물품번호 2.의 경우에는 doGet을 통해서 가져온 값을 받아온 경우이다. 둘 다 똑같은 값을 표시하지만, 물품번호 1의 경우에는 doGet을 사용하지 않고 사용하는 간단한 방법이 되겠다.

DB의 이미지파일 가져오기

이번에는 DB에 있는 사진들을 가져올 수 있도록 mapper부터 구성해보도록 하자.

ItemImageMapper

@Select( value = {
		"	SELECT * FROM itemimage  ",
		" 	WHERE no=#{no}	"	
	} )
	public ItemImage selectItemImageOne(@Param("no") long no);

사진별 시퀀스 넘버로 조회할 수 있도록 해주었다.

ItemImageServlet

// jsp에서 src에이미지의 위치를 설정하는 용도로 사용

// <img src="web01/item/image?no=1001" style="width:60px; height:60px" />

@WebServlet(urlPatterns = { "/item/image" })  // URL 지정
public class ItemImageServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;


	public ItemImageServlet() {
	}


	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		ItemImageMapper mapper = MyBatisContext.getSqlSession().getMapper(ItemImageMapper.class);
		
		long no = Long.parseLong( request.getParameter("no") );
		// no를 전달하여 ItemImage정보 1개 가져옴.
		ItemImage obj = mapper.selectItemImageOne(no);
		
		response.setContentType(obj.getFiletype());// 이건 이미지다. html이 아니다.
		response.setStatus(200); // 200은 정상적인 처리결과다.
		response.getOutputStream().write(obj.getFiledata()); // 이게 실제 정보이다.
		
		
		/* 지금까지는 jsp로 결과를 바로 전송해주었지만, 이미지의 경우 위와 같이 다른 방식으로 구성해주어야 한다.*/ 
		// 나중에 필기 더 자세하게 하기
	
	}
}

이미지를 가져오기 위한 Servlet의 경우에는 다른 Servlet과는 달리 JSP로 보내지 않는다.
그 이유는 불러온 사진 하나하나당 url을 지정해주기 위해서인데, 이는 DB에서 동적으로 여러 이미지들을 불러와서 사용할 수 있게 하기 위해서이다.

보통

request.getRequestDispatcher("/WEB-INF/**JSP의 주소**").forward(request, response);

처럼 처리 결과를 request를 이용하여 doGet메소드를 통해 JSP로 보내지만
그러지 않고 Servlet 내에서 응답 처리를 한다.




위를 이용하게 되면

이러한 식으로 등록된 이미지가 뜨게 된다.

하지만 지금의 방식은 등록되어있는 이미지 자체를 표시하는 것으로, 이를 이용하여 물품별로 등록된 사진들을 조회하고자 한다.

DB에서 사진 정보들을 불러와서 List로 나타낼 수 있도록 Mapper를 먼저 구성해주자.

ItemImageMapepr

	@Select( value = {
			"	SELECT no FROM itemimage  ",
			" 	WHERE itemno=#{no}	ORDER BY no DESC"	
		} )
		public List<Long> selectItemImageList(@Param("no") long no);

물품번호별로 확인이 가능하도록 SQL문을 작성했다.

다음으로는 Servlet이다.

ItemImageSelectListServlet (이름이 ㄹㅇ길다);;


@WebServlet(urlPatterns = { "/seller/selectimagelist.do" }) // 원래라면 이렇게 구성해주어야 함!
public class ItemImageSelectListServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;


	public ItemImageSelectListServlet() {
		super();
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		ItemImageMapper mapper = MyBatisContext.getSqlSession().getMapper(ItemImageMapper.class);

		long itemno = Long.parseLong(request.getParameter("itemno"));
    //  <a href="selectimagelist.do?itemno=${obj.no}"><button>등록된이미지보기</button></a>

		List<Long> no = mapper.selectItemImageList(itemno);

		// mapper로 itemno를 전달해서 해당하는 이미지번호만 리턴
		
		
		request.setAttribute("no", no );
		request.setAttribute("title", "등록된이미지");
		request.getRequestDispatcher("/WEB-INF/itemselectimage1.jsp").forward(request, response);


	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
	}
}

다음은 jsp이다.

itemselectimage1.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>${title}</title>
	</head>
	<body>
		<a href="selectlist.do">이전페이지로 이동</a>	
	<hr />
	<c:forEach var='tmp' items="${no}">
	이미지번호 : ${tmp}
	<img src="${pageContext.request.contextPath}/item/image?no=${tmp}" 
		 style="width:100px; height:100px">
		<form action="deleteimageone.do" method="post" style="display;inline-block">
				<input type="hidden" name="itemno" value="${param.itemno}"/>
				<input type="hidden" name="no" value="${tmp}"/>
			<input type="submit" value="삭제" />
		</form>
			<a href="updateimageone.do?no=${tmp}&itemno=${param.itemno}"><button>수정</button></a>
		
	<hr />
	</c:forEach>
	
		<form action="insertimageone.do" method="post" enctype="multipart/form-data">
		<input type="hidden" name="backurl" value="selectimagelist.do?itemno=${param.itemno}" />
		<input type="hidden" value="${param.itemno}" name="itemno" readonly/><br />		
		
		이미지 : <input type="file" name="file" /><br />
		등록하기 : <input type="submit" value="이미지등록" />
		</form>
		
	</body>
</html>

이번 jsp를 구성하면서
if문을 사용해서 데이터 등록에 성공유무에 따라 다음으로 넘어갈지, 아니면 해당 페이지에 머무를지에 대해서 backurl이라는 코드를 각각 구성해주었다. 이를 insertimageone.do주소지를 사용하는ItemImageInsertServlet에 있는 if문에 적용해주었으며, 추후에 각각의 페이지에서 backurl 명칭을 사용하여 편한 접근이 가능하도록 해주었다.

if문 이전에 먼저 itemselectimage1.jsp와
itemimageinsert1.jsp에 각각

<input type="text" name="backurl" value="되돌아가고자 하는 URL 주소" />

<form></form> 사이에 구성.

이후

if(ret == 1 ) {
			// 상황에 따라서 이동하는 페이지가 달라져야 함. ()
			String backurl = request.getParameter("backurl"); // 현재페이지 값을 저장하는 backurl 지정
			// response.sendRedirect("selectlist.do?itemno=X"); //성공시의 물품목록으로
			response.sendRedirect(backurl); // 성공시 각 상황에 맞도록 화면 전환 
		}
		else {
			response.sendRedirect("insertimageone.do?itemno="+ itemno); // 실패시 현재페이지로
		}

ItemImageInsertServlet에 생성해두었던 backurl을 데이터 등록 성공시 전환 페이지 조건으로 등록.

이렇게 하면 상황에 따라서 알맞은 페이지로 이동하게 된다.



이번에는 삭제 기능을 활성화해보겠다.

DB의 이미지파일 삭제

먼저 ItemImageMapper에 새로운 쿼리문을 추가했다.

ItemImageMapper

@Delete( value = {
			" 	DELETE FROM itemimage	",
			"	WHERE no = #{no} AND itemno = #{itemno}	"
			
		} )
	public int deleteItemImageListOne(@Param("no") long no,@Param("itemno") long itemno );

사진을 삭제하기 위해서 PK와 FK 둘다 전달하려는 모습이다.

itemselectimage1.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>${title}</title>
	</head>
	<body>
		<a href="selectlist.do">이전페이지로 이동</a>	
	<hr />
	<c:forEach var='tmp' items="${no}">
	이미지번호 : ${tmp}
	<img src="${pageContext.request.contextPath}/item/image?no=${tmp}" 
		 style="width:100px; height:100px">
         
      <!--------------------------------- 이부분!!------------------------------->   
		<form action="deleteimageone.do" method="post" style="display;inline-block">
				<input type="hidden" name="itemno" value="${param.itemno}"/>
				<input type="hidden" name="no" value="${tmp}"/>
			<input type="submit" value="삭제" />
		</form>
       <!------------------------------------------------------------------------->   

			<a href="updateimageone.do?no=${tmp}&itemno=${param.itemno}"><button>수정</button></a>
		
	<hr />
	</c:forEach>
	
		<form action="insertimageone.do" method="post" enctype="multipart/form-data">
		<input type="hidden" name="backurl" value="selectimagelist.do?itemno=${param.itemno}" />
		<input type="hidden" value="${param.itemno}" name="itemno" readonly/><br />		
		
		이미지 : <input type="file" name="file" /><br />
		등록하기 : <input type="submit" value="이미지등록" />
		</form>
		
	</body>
</html>

주석처리가 된 부분이 삭제 처리를 수행하는 버튼과, PK, FK를 전달하는 부분이다.

<form>태그로 작성이 되었고, method="post"라고 명시가 되어있기때문에 doPost메소드를 이용해야한다.

이번에는 Servlet이다.

ItemImageDeleteListOneServlet

@WebServlet(urlPatterns = { "/seller/deleteimageone.do" }) // 원래라면 이렇게 구성해주어야 함!
public class ItemImageDeleteListOneServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public ItemImageDeleteListOneServlet() {
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		ItemImageMapper mapper = MyBatisContext.getSqlSession().getMapper(ItemImageMapper.class);

		long no = Long.parseLong(request.getParameter("no")); // <input type="text" name="no" value="${tmp}"/>
		long itemno = Long.parseLong(request.getParameter("itemno")); // <input type="text" name="itemno" value="${param.itemno}"/>

		int ret = mapper.deleteItemImageListOne(no, itemno);

		response.sendRedirect("selectimagelist.do?itemno=" + request.getParameter("itemno"));

	}
}

<form>태그를 이용해서 받아온값들을 mapper에 있는deleteItemImageListOne 메소드로 전달해주면 삭제가 된다.


처음에는 데이터가 제대로 적요잉 되는지 input 타입을 "text"로 해주었지만,

정상적으로 물품과 이미지의 넘버값이 전달되는것을 확인한 이후

<input type="hidden" name="itemno" value="${param.itemno}"/>
<input type="hidden" name="no" value="${tmp}"/>

"hidden"으로 바꿔서

텍스트 박스를 숨겼다.

10008번의 데이터를 한번 삭제해보면..


삭제 기능이 잘 적용이 된 모습이다.

이번에는 수정이다.

DB의 이미지파일 수정하기 (덮어쓰기)

ItemImageMapper

	@Update( value = {
			"	UPDATE itemimage ",
			"	SET   ",
				"	filename =#{obj.filename} , ",
				"	filesize =#{obj.filesize} , ",
				"	filetype =#{obj.filetype} , ",
				"	filedata =#{obj.filedata}	",
			"	WHERE  no =#{obj.no}  AND  itemno =#{obj.itemno}	"
			
	} )
	public int updateItemImageOne(@Param("obj") ItemImage itemimage );
}

삭제기능과 마찬가지로 수정하고자 하는 이미지파일의 PK,FK값을 전달받게된다.

itemselectimage1.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>${title}</title>
	</head>
	<body>
		<a href="selectlist.do">이전페이지로 이동</a>	
	<hr />
	<c:forEach var='tmp' items="${no}">
	이미지번호 : ${tmp}
	<img src="${pageContext.request.contextPath}/item/image?no=${tmp}" 
		 style="width:100px; height:100px">
         
         
		<form action="deleteimageone.do" method="post" style="display;inline-block">
				<input type="hidden" name="itemno" value="${param.itemno}"/>
				<input type="hidden" name="no" value="${tmp}"/>
			<input type="submit" value="삭제" />
		</form>
       
        <!--------------------------------- 이부분!!------------------------------->
        
			<a href="updateimageone.do?no=${tmp}&itemno=${param.itemno}"><button>수정</button></a>
            
		<!------------------------------------------------------------------------->   
	<hr />
	</c:forEach>
	
		<form action="insertimageone.do" method="post" enctype="multipart/form-data">
		<input type="hidden" name="backurl" value="selectimagelist.do?itemno=${param.itemno}" />
		<input type="hidden" value="${param.itemno}" name="itemno" readonly/><br />		
		
		이미지 : <input type="file" name="file" /><br />
		등록하기 : <input type="submit" value="이미지등록" />
		</form>
		
	</body>
</html>

<a> 태그으로 처리를 해주었기 때문에, Servlet에서는 doGet 메소드를 사용해야 한다.

위의 기능을 처리해 줄 updateimageone.do의 주소명인 Servlet을 만들어 주었다.

ItemImageUpdateServlet (doGet)

@WebServlet(urlPatterns = { "/seller/updateimageone.do" }) 

@MultipartConfig(fileSizeThreshold = 1024 * 1024 * 1, // M
		maxFileSize = 1024 * 1024 * 10, // 10M
		maxRequestSize = 1024 * 1024 * 100 // 100M       
) // 이미지파일을 직접 다루는 Servlet은 위의 어노테이션 필요!

public class ItemImageUpdateServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public ItemImageUpdateServlet() {
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		request.setAttribute("title", "이미지 변경하기");
		request.getRequestDispatcher("/WEB-INF/itemimageupdate.jsp").forward(request, response);
	}
}

원래라면 위의 doGet메소드에

<a href="updateimageone.do?no=${tmp}&itemno=${param.itemno}"><button>수정</button></a>

itemselectimage1.jsp에서 no값과 itemno값 두가지를 request.getParameter를 이용하여 받아오려고 하였으나, itemimageupdate.jsp에서 파라미터를 사용하여 불러오고자 간단하게 doGet을 작성하였다.

그리고 정리하다보니 중요한 점을 놓치고 있었다.


⭐웹 구성하는 순서!!!⭐

먼저 사전에 설계했던 Table에 알맞도록 Dto를 생성하고, 기능을 실행하는 Mapper를 작성한 이후, 메인이 될 JSP의 Controller(Servlet)를 생성해준다.

이후 JSP를 생성하여 필요로 하는 기능들을 미리 구성해준 뒤, 각각의 주소를 할당해주고, 데이터 값들을 doGet 메소드에서 request를 이용하여 받아온다.

받아온 데이터를 활용하여 새로운 jsp를 생성하여 페이지를 할당하고, DB로 전송하고자 하는 데이터들을 doPost로 보내 Mapper를 통하여 DB로 전송한다.

간단히 요약하자면,

DTO생성 → Mapper구성 → Servlet생성 → JSP생성, doGet 메소드에 데이터값 저장 (or ${param})→ (jsp생성→Servlet, doPost로 DB데이터 전송 )반복


itemimageupdate.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>${title}</title>
	</head>
		<body>
		현재 이미지 : <img src="${pageContext.request.contextPath}/item/image?no=${param.no}"
			style="width:200px; height:200px"><br />
		
		<form action= "updateimageone.do" method="post" enctype="multipart/form-data">
			변경 이미지 첨부 : 
			<input type="text" name="no" value="${param.no}" />
			<input type="text" name="itemno" value="${param.itemno}" />
			<input type="file" name="file" />
			<input type="submit" value="이미지변경" />
			
		</form>

		</body>
</html>

위의 jsp를 이용하여 이미지 데이터값을 <form>태그로 받아준 뒤, servlet의 doPost로 보내준다.

그렇다면 이 데이터는 다시

ItemImageUpdateServlet (doPost)

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		ItemImageMapper mapper = MyBatisContext.getSqlSession().getMapper(ItemImageMapper.class);

		long itemno = Long.parseLong(request.getParameter("itemno"));
		long no = Long.parseLong(request.getParameter("no"));

		Part part = request.getPart("file");

		ItemImage obj = new ItemImage();
		obj.setItemno(itemno);
		obj.setNo(no);
		obj.setFilename(part.getSubmittedFileName()); // 첨부한 파일명
		obj.setFilesize(part.getSize()); // 첨부한 파일크기
		obj.setFiletype(part.getContentType()); // 첨부한 파일의 종류 (gif, jpg, png ...)
		obj.setFiledata(part.getInputStream().readAllBytes()); // 첨부한 파일 실제 데이터

		int ret = mapper.updateItemImageOne(obj);
		if (ret == 1) {
			request.setAttribute("itemno", itemno);
			response.sendRedirect("selectimagelist.do?itemno=" + itemno);
		}
	}

doPost를 통하여 Mapper를 거쳐 DB에 적용이 된다.


profile
시작은 미약하지만, 그 끝은 창대하리라

0개의 댓글