Servlet&JSP
Step02_DB (jsp INSERT)
bono.html
2022. 8. 16. 12:30
본 게시글은 이전 게시글에서 만든 페이지에 INSERT 기능을 추가하는 내용의 게시글이다.
2022.08.12 - [java] - Step02_DB (jsp SELECT)
index.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>
</head>
<body>
<h1>인덱스 페이지 입니다.</h1>
<ul>
<li><a href="member/list.jsp">회원목록보기</a></li>
</ul>
</body>
</html>
list.jsp
<%@page import="test.member.dto.MemberDto"%>
<%@page import="java.util.List"%>
<%@page import="test.member.dao.MemberDao"%>
<%@page import="test.util.DbcpBean"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//MemberDao 객체의 참조값을 얻어와서
MemberDao dao=MemberDao.getInstance();
//회원목록을 얻어온다.
List<MemberDto> list=dao.getList();
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>/member/list.jsp</title>
</head>
<body>
<div class="container">
<a href="insertform.jsp">회원추가</a>
<h1>회원 목록입니다.</h1>
<table>
<thead>
<tr>
<th>번호</th>
<th>이름</th>
<th>주소</th>
</tr>
</thead>
<tbody>
<%for(MemberDto tmp:list) {%>
<tr>
<td><%=tmp.getNum() %></td>
<td><%=tmp.getName() %></td>
<td><%=tmp.getAddr() %></td>
</tr>
<%} %>
</tbody>
</table>
</div>
</body>
</html>
회원 추가 링크를 추가했다. 링크를 누르면 insertform.jsp 로 이동한다.
insertform.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>
</head>
<body>
<div class="container">
<h1>회원 추가 폼 입니다.</h1>
<form action="insert.jsp" method="post">
<div>
<label for="name">이름</label>
<input type="text" name="name" id="name"/>
</div>
<div>
<label for="addr">주소</label>
<input type="text" name="addr" id="addr"/>
</div>
<button type="submit">추가</button>
</form>
</div>
</body>
</html>
정보를 입력할 수 있는 form을 구성하였다. form action을 설정해서 버튼 클릭시 insert.jsp로 이동한다.
dbupdate 템플릿 만들기
아래의 코드는 dbupdate 템플릿에 사용한 코드이다
Connection conn=null;
PreparedStatement pstmt=null;
int updatedRowCount=0;
try {
conn=new DbcpBean().getConn();
//실행할 sql 문
String sql="";
pstmt=conn.prepareStatement(sql);
//? 값을 바인딩 할게 있으면 바인딩하기
//insert, update, delete 를 수행하고 변화된 row 의 갯수를 리턴 받기
updatedRowCount=pstmt.executeUpdate();
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
if(pstmt!=null)pstmt.close();
if(conn!=null)conn.close();
}catch(Exception e) {}
}
//변화된 row 의 갯수가 0 보다 크면 작업 성공
if(updatedRowCount > 0) {
return true;
}else {//그렇지 않으면 작업 실패
return false;
}
MemberDao의 insert 메소드 작성에 앞서 INSERT, DELETE, UPDATE의 작성 양식이 비슷하기 때문에 템플릿을 만들었다. (이전 게시글의 dbselect와 html 템플릿 제작과 방식이 같다.)
MemberDao.java
이전 게시글에서 사용하던 MemberDao에서 insert 메소드를 추가하였다.
아래의 코드는 추가한 insert 메소드이며 위에서 만들어둔 dbupdate 템플릿을 활용하여 일부(sql 문과 바인딩)만 수정하였다.
//인자로 전달되는 MemberDto 객체에 담긴 회원의 이름과 주소를 DB 에 저장하는 메소드
public boolean insert(MemberDto dto) {
Connection conn=null;
PreparedStatement pstmt=null;
int updatedRowCount=0;
try {
conn=new DbcpBean().getConn();
//실행할 sql 문
String sql="INSERT INTO member"
+ " (num, name, addr)"
+ " VALUES(member_seq.NEXTVAL, ?, ?)";
pstmt=conn.prepareStatement(sql);
//? 값을 바인딩 할게 있으면 바인딩하기
pstmt.setString(1, dto.getName());
pstmt.setString(2, dto.getAddr());
//insert, update, delete 를 수행하고 변화된 row의 갯수를 리턴받기
updatedRowCount=pstmt.executeUpdate();
}catch(Exception e) {
e.printStackTrace();
}finally {
try {
if(pstmt!=null)pstmt.close();
if(conn!=null)conn.close();
}catch(Exception e) {}
}
if(updatedRowCount > 0) {
return true;
}else {//그렇지 않으면 작업 실패
return false;
}
}
insert.jsp
<%@page import="test.member.dto.MemberDto"%>
<%@page import="test.member.dao.MemberDao"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//post 방식 전송 파라미터 추출할때 한글깨지지 않도록
request.setCharacterEncoding("utf-8");
//1. 폼 전송되는 name 과 addr 를 추출한다.
String name=request.getParameter("name");
String addr=request.getParameter("addr");
//MemberDto 객체에 회원 정보를 담고
MemberDto dto=new MemberDto();
dto.setName(name);
dto.setAddr(addr);
//2. DB 에 저장한다.
MemberDao dao=MemberDao.getInstance();
//MemberDao 객체를 이용해서 DB 에 저장을 하고 성공여부를 리턴 받는다.
boolean isSuccess=dao.insert(dto);
//3. 응답한다.
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>/member/insert.jsp</title>
</head>
<body>
<div class="container">
<h1>알림</h1>
<%if(isSuccess){ %>
<p>
<strong><%=name %></strong>의 정보를 추가 했습니다.
<a href="list.jsp">확인</a>
</p>
<%}else{ %>
<p>
회원정보 추가 실패!
<a href="insertform.jsp">다시 입력</a>
</p>
<%} %>
</div>
</body>
</html>