JSP 강의 Day03

주세환·2023년 3월 16일
0

JSP

목록 보기
3/16

수정기능 추가

<a href="updateone.do?no=${brd.no}"><intput type="button" value="수정" /></a>

boardselectone1.jsp에서 수정창을 수정한다.


controller에 BoardSelectServlet을 생성하여

@WebServlet(urlPatterns = {"/board/updateone.do"})

@WebServlet을 추가하고

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		BoardMapper mapper = MyBatisContext.getSqlSession().getMapper(BoardMapper.class);
		// ?no=45
		long no = Long.parseLong(request.getParameter("no"));
		
		// mapper를 호출해서 결과값 받기
		Board board = mapper.selectBoardOne(no);
		
		// view로 값 전달
		request.setAttribute("obj", board);
		
		// view 표시
		request.getRequestDispatcher("/WEB-INF/boardupdateone1.jsp").forward(request, response);
        
	
	}

doGet 수정

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		BoardMapper mapper = MybatisContext.getSqlSession().getMapper(BoardMapper.class);
		
		// 전송되는 4개의 데이터를 받음
		long no = Long.parseLong(request.getParameter("no")); // view의 name값과 매칭
		String title = request.getParameter("title"); // view의 name값과 매칭
		String content = request.getParameter("content"); // view의 name값과 매칭
		String writer = request.getParameter("writer"); // view의 name값과 매칭
		
		// 여기는 데이터의 변경(추가, 수정, 삭제)를 수행하고
		Board obj= new Board();
		obj.setNo(no);
		obj.setTitle(title);
		obj.setContent(content);
		obj.setWriter(writer);		
		
		int ret = mapper.updateBoardOne(obj);
		// a태의 기능을 이용해서 페이지를 바꿈
		if(ret == 1) {
		response.sendRedirect("selectone.do?no=" + no);
		}
		else {
			response.sendRedirect("updateone.do?no=" + no);
		}
	}

	// get(조회), post(추가), delete(삭제), put(수정), patch(일부의 수정)

doPost를 수정한다.

<%@ 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>
	<h3>게시글수정</h3>
	<form action="updateone.do" method="post">
	글번호 : <input type="text" value="${obj.no}" name="no" readonly/><br/>
	글제목 : <input type="text" value="${obj.title}"name="title"/><br/>
	글내용 : <textarea rows="6" name="content">${obj.content}</textarea><br />
	작성자 : <input type="text" value="${obj.writer}"name="writer"/><br/>
	조회수 : <input type="text" value="${obj.hit}" readonly/><br/>
	날짜 : <input type="text" value="${obj.regdate}" readonly/><br/>
	<input type="submit" value="게시글수정" />
	<a href="selectone.do?no=${obj.no}"></a><button>이전페이지이동</button>
	</form>
</body>
</html>

WEB-INF에 boardupdateone1.jsp를 생성하여 위코드로 변경한다.


이제 결과를 확인해보자.

18번으로 들어와서 수정을 눌러보면

위 사진처럼 화면이 뜬다.

모든 항목을 18로 변경하였다.
여기서 글번호, 조회수, 날짜는 readonly를 적어놨기 때문에 수정이 불가능하다.

작성 후 게시글 수정을 누르면 이렇게 수정된 결과를 확인할 수 있다.


여기서 이전페이지이동을 누르면 다시

이 화면으로 넘어갈 수 있다.


Seller

시퀀스, 테이블 생성

h2로 이동하여 시퀀스와 테이블을 생성.

물품 1개 등록페이지

@WebServlet(urlPatterns = {"/seller/insertone.do"})
public class ItemInsertServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	ItemMapper mapper = MybatisContext.getSqlSession().getMapper(ItemMapper.class);
       
  
    public ItemInsertServlet() {
        super();
        
    }


	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setAttribute("title", "물품1개등록");
		request.getRequestDispatcher("/WEB-INF/iteminsert1.jsp").forward(request, response);
	}


	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 전달된 값 받기 (4개)
		// int ret = mapper를 이용해서 추가수행
		Item obj = new Item();
		obj.setName(request.getParameter("name"));
		obj.setContent(request.getParameter("content"));
		obj.setPrice(Long.parseLong(request.getParameter("price")));
		obj.setQuantity(Long.parseLong(request.getParameter("quantity")));
		
		int ret = mapper.insertItemOne(obj);
		if(ret == 1) {
			response.sendRedirect("selectlist.do");
		}
		else {
			response.sendRedirect("insertone.do");
		}
		
	}

}

가장 비슷한 boardselectlist를 복붙해서 ItemInsertServlet.java 파일을 만들어 작성한다.

<%@ 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>
		<h3>${title}</h3>
		<form action="insertone.do" method="post">
			물품명 : <input type="text" name="name" /><br />
			물품설명 : <textarea rows="6" name="content" /></textarea><br />
			가격 : <input type="number" name="price" /><br />
			수량 : <input type="number" name="quantity" /><br />
			<input type="submit" value="등록하기" />
		</form>
	</body>
</html>

WEB-INF에 iteminsert1.jsp 생성

seller/insertone.do로 이동하면 위 화면이 생긴다.

dto에 item, itemimage 클래스를 생성한다.

config.addMapper(ItemMapper.class);
			config.addMapper(Table2Mapper.class);

ItemMapper, Table2Mapper를 생성한 후 mybatis config 추가한다.

	@Insert({
		" INSERT INTO item (name, content, price, quantity) ",
		" VALUES(#{obj.name}, #{obj.content}, #{obj.price}, #{obj.quantity}) "
	})
	public int insertItemOne(@Param("obj") Item obj);

ItemMapper 작성


이제 실행해보자

seller/insertone.do에 들어가 작성하고 등록을 눌러보자.


selectlist.do를 아직 만들지 않았으니 현재까지 문제없음.


물품목록 페이지

@WebServlet(urlPatterns = {"/seller/selectlist.do"})
public class ItemSelectServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
       
  
    public ItemSelectServlet() {
        super();
        
    }


	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		ItemMapper mapper = MybatisContext.getSqlSession().getMapper(ItemMapper.class);
		
		// 서버주소/seller/selectlist.do  ?type=name&text=1
		String type = request.getParameter("type");
		String text = request.getParameter("text");
		if(type == null) {
			type = "name";
		}
		if(text == null) {
			text = "";
		}
		
		// 검색하고자하는 커럼의 종류, 검색어,
		List<Item> list = mapper.selectItemList(type,text);
		
		// 2. view로 값 전달
		request.setAttribute("list", list);
		
		// 3. view 표시
		request.getRequestDispatcher("/WEB-INF/itemselectlist1.jsp").forward(request, response);
	}


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

}

ItemSelectServlet 생성하여 위처럼 작성

@Select({
		" Select i.* FROM item i WHERE ${column} like '%' || #{text} || '%' "
	})
	public List<Item> selectItemList(@Param("column") String column, @Param("text")String text);

Mapper에 추가

<meta charset="UTF-8">
<title>물품목록</title>
</head>
	<body>	
	
		<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>			
			<button>이미지1개등록</button>
			<br />
		</c:forEach>
		<hr />
	</body>

itemselectlist1.jsp생성

이렇게 리스트가 뜬다면 성공.

2를 검색하면 물품명이 2인 항목들이 나온다.


이미지 1개 등록페이지

<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>
			<br />
		</c:forEach>

로 수정하고 이미지등록을 누르면

insertimageone.do를 생성하지 않았으니 404 오류가 뜬다.

@WebServlet(urlPatterns = {"/seller/insertimageone.do"})
public class ItemImageInsertServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	ItemMapper mapper = MybatisContext.getSqlSession().getMapper(ItemMapper.class);
       
  
    public ItemImageInsertServlet() {
        super();
        
    }


	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setAttribute("title", "물품이미지1개등록");
		request.getRequestDispatcher("/WEB-INF/itemimageinsert1.jsp").forward(request, response);
	}

ItemImageInsertServlet을 생성한다.

<%@ 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>
		<h3>${title}</h3>
		물품번호 : <input type="text" /><br />
		이미지 : <input type="file" /><br />
		<input type="submit" value="이미지등록"/>
	</body>
</html>

itemimageinsert1.jsp를 생성한다.

이미지1개 등록을 눌렀을 때 위 화면이 나온다면 성공.

//		/seller/insertimageone.do?itemno=2
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		long itemno = Long.parseLong(request.getParameter("itemno")); 
		request.setAttribute("title", "물품이미지1개등록");
		request.setAttribute("itemno", itemno); // value="$itemno}"
		
		request.getRequestDispatcher("/WEB-INF/itemimageinsert1.jsp").forward(request, response);
	}

ItemImageInsertServlet을 이렇게

	<body>
		<h3>${title}</h3>										
		<!-- 주소창을 바꾸고 정보는 숨겨서, 정보의 내용중에는 파일도 있음.		 파일 첨부할 때 필요함 -->
		<form action="insertimageone.do" method="post" enctype="multipart/form-data">
			물품번호(주소창의 값을 바로 읽기) : <input type="text" value="${param.itemno}" readonly /><br />
			물품번호(2번 단계) : <input type="text" value="${itemno}" name="itemno" readonly /><br />
			이미지 : <input type="file" name="file"/><br />
			<input type="submit" value="이미지등록"/>
		</form>
	</body>

itemimageinsert1.jsp를 이렇게 수정하면

위 사진처럼 수정된다.
물품번호(주소창의 값을 바로 일기)는 itemimageinsert1.jsp만 수정하여 url에 있는 값을 바로 불러올 수 있다.
물품번호(2번 단계)는 ItemImageInsertServlet도 같이 수정해서 각 번호의 key를 가져오는 방법이다.


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

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		long itemno = Long.parseLong( request.getParameter("itemno") );
		Part part = request.getPart("file");
				
		ItemImage obj = new ItemImage();
		obj.setItemno(itemno); //물품번호
		obj.setFilename( part.getName() ); //첨부한 파일명
		obj.setFilesize( part.getSize() ); //첨부한 파일크기
		obj.setFiletype( part.getContentType() ); //첨부한 파일의 종류, gif, jpg, png ...
		obj.setFiledata( part.getInputStream().readAllBytes() ); // 첨부한 파일 실제 데이터
		
		
	}

ItemImageInsertServlet에서 위 코드를 추가하자.

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

ItemImageMapper를 생성하여 위 코드를 작성하고

config.addMapper(ItemImageMapper.class);

Mapper를 만들었으니 MybatisContext에도 추가해야한다.

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		ItemImageMapper mapper = MybatisContext.getSqlSession().getMapper(ItemImageMapper.class);
		
		long itemno = Long.parseLong( request.getParameter("itemno") );
		Part part = request.getPart("file");
				
		ItemImage obj = new ItemImage();
		obj.setItemno(itemno); //물품번호
		obj.setFilename( part.getSubmittedFileName() ); //첨부한 파일명
		obj.setFilesize( part.getSize() ); //첨부한 파일크기
		obj.setFiletype( part.getContentType() ); //첨부한 파일의 종류, gif, jpg, png ...
		obj.setFiledata( part.getInputStream().readAllBytes() ); // 첨부한 파일 실제 데이터
		
		//mapper를 만들어서 insert를 수행하면 DB에 추가됨.
		int ret = mapper.insertItemImageOne(obj);
		
		if(ret == 1) {
			response.sendRedirect("selectlist.do"); // 성공시 물품목록으로
		}
		else {
			response.sendRedirect("insertimageone.do?itemno="+itemno); // 실패시 현재 페이지로
		}
	}

ItemImageInsertServlet의 doPost도 이렇게 수정하자.

insertimageone.do로 가서 이미지 파일선택을 눌러 사진을 선택하니 옆에 파일 이름이 생겼다.

등록을 누르니 목록으로 이동하였다.
이미지 등록에 성공하면 목록으로 이동하도록 했으니 오류없이 성공했다는 뜻이다.

0개의 댓글