웹프로젝트를 하면서 다양한 ORM(Object-Relational Mappging)을 경험하실 수 있는데요. 그 중에서 많이 쓰이는 mybatis를 이용해서 간단한 jsp 회원가입 예제를 꾸며보도록 하겠습니다.
일단 기본 베이스로 db가 연결되어 있으야 하므로 mybatis 세팅을 참고하셔서 oracle을 연결해 주시기 바랍니다.
1. 기본 흐름
순서 | 수행 |
1 | Jsp에서 요청 |
2 | JavaScript에서 유효성 검사 및 Submit |
3 | web.xml에서 servlet-mapping으로 해당 컨트롤러로 이동 |
4 | 해당 컨트롤러에서 받은 데이터를 회원 dto 클래스에 set |
5 | insert할 데이터를 db작업을 수행하기 위해 dao로 전달 |
6 | dao는 mybatis를 이용하여 db에 데이터를 insert하고 결과를 리턴 |
7 | Controller는 받은 결과에 따라 작업을 성공/실패로 출력 |
2. mybatis를 적용한 회원가입 예제 소스
프로젝트 구조
이클립스를 이용하여 프로젝트 구조를 잡아본 모습인데요. mybatis를 쓰시면 위와 같이 mybatis 세팅 파일과 xml을 이용하게 됩니다.
3. 테이블 생성
회원가입 시 데이터를 저장할 테이블을 생성해 줍니다.
create table guest(id varchar2(20), pw varchar2(20), name varchar2(15), nick varchar2(20), addr varchar2(40), email varchar2(30), birth date )
Joincontroller.java
package join; import java.io.IOException; import java.io.PrintWriter; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Joincontroller extends HttpServlet{ @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("UTF-8"); //req.setCharacterEncoding("EUC-KR"); //한글처리 JoinDTO dto = new JoinDTO(); JoinDAO dao = new JoinDAO(); PrintWriter out = resp.getWriter(); int result; dto.setId(req.getParameter("id")); dto.setPw(req.getParameter("pw")); dto.setName(req.getParameter("name")); dto.setNick(req.getParameter("nick")); dto.setAddr(req.getParameter("addr")); dto.setEmail(req.getParameter("email")); SimpleDateFormat sdf = new SimpleDateFormat("yyyy/mm/dd"); Date date = null; try { date = sdf.parse(req.getParameter("year")+"/"+req.getParameter("month")+"/"+req.getParameter("day")); //입력받은 년,월,일을 date 포맷으로 변경 } catch (ParseException e) { e.printStackTrace(); } dto.setBirth(date); result = dao.insertjoin(dto); if(result==0){ System.out.println("Faile"); }else{ System.out.println("Sucsses"); } } }
JoinDAO.java
package join; import myBatisSetting.SqlMapConfig; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; public class JoinDAO { SqlSessionFactory sessionf = SqlMapConfig.getSqlMapInstance(); SqlSession sqlsession; public JoinDAO() { sqlsession = sessionf.openSession(true); //true 로 할시 자동 commit } public int insertjoin(JoinDTO dto) { int result; result = sqlsession.insert("insertjoin",dto); return result; } }
JoinDTO.java
package join; import java.util.Date; public class JoinDTO { String id; String pw; String name; String nick; String addr; String email; Date birth; public JoinDTO() { // TODO Auto-generated constructor stub } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getPw() { return pw; } public void setPw(String pw) { this.pw = pw; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getNick() { return nick; } public void setNick(String nick) { this.nick = nick; } public String getAddr() { return addr; } public void setAddr(String addr) { this.addr = addr; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Date getBirth() { return birth; } public void setBirth(Date birth) { this.birth = birth; } }
Emp.xml
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="abab"> <insert id="insertjoin" parameterType="join.JoinDTO"> insert into guest(id,pw,name,nick,addr,email,birth) values(#{id},#{pw},#{name},#{nick},#{addr},#{email},#{birth}) </insert> </mapper>
Join.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script type="text/javascript"> function checkfield(){ document.addjoin.submit(); } </script> </head> <body> <center> <h1> 회원가입</h1> <form action="addjoinaction" name="addjoin" method="post"> <table style="text-align: left" width="400px"> <tr> <td>아이디</td><td ><input type="text" name="id" id="id" > <div id="ckid"></div> <tr> <td>비밀번호</td><td ><input type="password" name="pw" id="pw"> <tr> <td>비밀번호확인</td><td><input type="password" name="pw2" id = "pw2" > <tr> <td>이름</td><td><input type="text" name="name"> <tr> <td>닉네임</td><td><input type="text" name="nick"> <tr> <td>주소</td><td><input type="text" name="addr"> <tr> <td>이메일</td><td><input type="text" name="email" id ="email" onkeyup="checkemail()"> <tr> <td>생년월일</td><td><select name="year"> <%for(int i=2014; i>1949; i--){ %> <option value="<%=i%>"><%=i %>년</option> <%} %> </select> <select name="month"> <%for(int i=1; i<13; i++){ %> <option value="<%=i%>"><%=i %>월</option> <%} %> </select> <select name="day"> <%for(int i=1; i<31; i++){ %> <option value="<%=i%>"><%=i %>일</option> <%} %> </select> </table> <br> <table width="400px"> <tr><td style="text-align: center"> <input type="button" value="가입" onclick="checkfield()"> <input type="reset" value="취소"> </td> </tr> </table> </form> </div> </center> </body> </html>
4. 구동 결과
톰캣을 구동하시면 위와 같은 화면이 뜨는데요.
필요한 정보를 모두 입력한 후에 가입을 눌러줍니다.
입력한 값이 정상적으로 테이블에 저장되면 위와 같이 Sucsses가 뜨게 됩니다.
지정된 테이블을 확인해 보니 위와 같이 정상적으로 값이 삽입되었습니다.
※정상적으로 구동되지 않는 분들은 프로젝트 파일을 받으셔서 import 해보시기 바랍니다.
위의 jsp 회원가입 예제는 데이터를 DB에 저장하는 방법을 연습하기에 좋은 예제입니다.
데이터를 흐름을 파악하신 뒤 위의 소스를 보지 않고 자신만의 코드를 만들어 보시기 바랍니다.
답글 남기기