수정기능 추가
<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를 적어놨기 때문에 수정이 불가능하다.
작성 후 게시글 수정을 누르면 이렇게 수정된 결과를 확인할 수 있다.
여기서 이전페이지이동을 누르면 다시
이 화면으로 넘어갈 수 있다.
h2로 이동하여 시퀀스와 테이블을 생성.
@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인 항목들이 나온다.
<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로 가서 이미지 파일선택을 눌러 사진을 선택하니 옆에 파일 이름이 생겼다.
등록을 누르니 목록으로 이동하였다.
이미지 등록에 성공하면 목록으로 이동하도록 했으니 오류없이 성공했다는 뜻이다.