서블릿 - 회원가입과 로그인
1. 서블릿 프로젝트 생성
1.1 이클립스에서 우클릭
1.2 Dynamic Web Project 선택
1.3 프로젝트 이름 작성
1.4 Web.xml 생성 체크 !!!
context root나 content directory 명을 바꿀수 있지만
프로젝트가 많아지면 헤깔리기 때문에 디폴트 추천
1.5 ojdbc, mybatis Jar 추가
다이나믹 웹 프로젝트는 WEB-INF 안에 Lib 폴더가 있다
여기에 넣으면되며, 빌드 패스를 통해 추가했을때, 문제가 되어 고생하였다.
다이나믹 웹일때는 이곳에 넣자!!
1.6 서블릿 프로젝트 구조
2. 서블릿 프로젝트 생성
[실습] 회원가입과 로그인
Project : memberservlet (Context)
Folder : member
File : write.html
login.html
script.js
Package : member.action
Servlet : WriteServlet.java → web.xml에 등록 ★
LoginServlet.java
Package : member.dao
Class : MemberDAO.java
Package : member.bean
Class : MemberDTO.java 또는 MemberBean.java 또는 MemberVO.java
회원가입 : registration.html |
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>회원가입</title> <link rel="stylesheet" href="//code.jquery.com/ui/1.11.4/themes/smoothness/jquery-ui.css"> <script src="//code.jquery.com/jquery.min.js"></script> <script src="//code.jquery.com/ui/1.11.4/jquery-ui.min.js"></script> <script type="text/javascript"> window.onload = function(){ appendYear(); appendMonth(); appendDay();
$(function() { $("#Datepicker").datepicker({ showOn: "both", buttonImage: "button.png", buttonImageOnly: true }); }); } function checkId(){ var checkId = $("input[name='memId']").val();
if(checkId != "" && typeof checkId != "undefined"){
spath ="http://localhost:8080/memberservlet/checkIdProc?memId="+checkId; $.ajax({ url : spath, dataType:'text', type:'get', success : function(data) {
alert(data) }, error : function(data){ alert("err") } }); } }
function appendYear(){ var date = new Date(); var year = date.getFullYear(); var selectValue = document.getElementById("year"); //대상의 id var optionIndex = 0; for(var i=year-100;i<=year;i++){ selectValue.add(new Option(i+"년",i),optionIndex++); } } function appendMonth(){ var selectValue = document.getElementById("month"); //대상의 id var optionIndex = 0; for(var i=1;i<=12;i++){ selectValue.add(new Option(i+"월",i),optionIndex++); } } function appendDay(){ var selectValue = document.getElementById("day"); //대상의 id var optionIndex = 0; for(var i=1;i<=31;i++){ selectValue.add(new Option(i+"일",i),optionIndex++); } } $(function() { $( "#memBirthPicker" ).datepicker({ dateFormat: 'yy-mm-dd' }); }); </script> </head> <body> <h2>회원가입</h2><br> <form name="registrationForm" action="registrationProc" method="post"> <table> <tr> <td>이름</td> <td><input type="text" name="memName"></td> </tr> <tr> <td>아이디</td> <td><input type="text" name="memId" onkeyup="checkId()"><span id="isExist"></span></td> </tr> <tr> <td rowspan="1">비밀번호</td> <td> <input type="hidden" name="memPwd"> <input type="text" id="memPwd1"><br> <input type="text" id="memPwd2"></td> </tr> <tr> <td>생년월일</td> <td> <!-- <input type="hidden" name="memBirth"> <select id="year"> <option>- 선택하세요 -</option> </select> <select id="month"> <option>- 선택하세요 -</option> </select> <select id="day"> <option>- 선택하세요 -</option> </select> --> <input type="text" name="memBirth" id="memBirthPicker"> </td> </tr> <tr> <td>성별</td> <td> <input type="radio" name="memGender" value="0">여성 <input type="radio" name="memGender" value="1">남성 </td> </tr> <tr> <td>우편번호</td> <td><input type="text" name="memZipcode"> <input type="button" value="검색" onclick="zipcodeSearch()"></td>
</tr> <tr> <td>주소</td> <td> <input type="hidden" name="memAddr"> <input type="text" id="memAddr1"> <input type="text" id="memAddr2"> </td> </tr> <tr> <td>이메일</td> <td> <input type="hidden" name="memEmail"> <input type="text" id="memEmail1"> <input type="text" id="memEmail2"> </td> </tr> <tr> <td>휴대전화</td> <td> <input type="hidden" name="memCellPhone"> <input type="text" id="memCellPhone1"> <input type="text" id="memCellPhone2"> <input type="text" id="memCellPhone3"> </td> </tr> <tr> <td>연락처</td> <td> <input type="hidden" name="memHomePhone"> <input type="text" id="memHomePhone1"> <input type="text" id="memHomePhone2"> <input type="text" id="memHomePhone3"> </td> </tr> </table> <br>
<input type="submit" value="회원가입"> </form> </body> </html>
|
아이디 중복확인 서블릿 : checkIdProc.java |
package member.action; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import member.bean.MemberDTO; import member.dao.MemberDAO; public class checkIdProc extends HttpServlet { @Override public void init() throws ServletException { } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter(); MemberDAO memberDAO = new MemberDAO();
String memId = request.getParameter("memId"); MemberDTO memberDTO = new MemberDTO();
memberDTO=memberDAO.isExistId(memId); // member DB에 memId가 있는지 확인 response.setContentType("text/xml; charset=UTF-8"); if(memberDTO == null){ response.getWriter().print("no"); }else{ response.getWriter().print(memberDTO.getMemId()); }
}
@Override public void destroy() { } }
|
회원 객체 : MemberDTO |
package member.bean; public class MemberDTO { private String memName; private String memId; private String memPwd; private String memBirth; private int memGender; private String memZipcode; private String memAddr; private String memEmail; private String memHomePhone; private String memCellPhone; private String memType; private String memGrade; private String memPoint; private String logtime; public String getMemName() { return memName; } public void setMemName(String memName) { this.memName = memName; } public String getMemId() { return memId; } public void setMemId(String memId) { this.memId = memId; } public String getMemPwd() { return memPwd; } public void setMemPwd(String memPwd) { this.memPwd = memPwd; } public String getMemBirth() { return memBirth; } public void setMemBirth(String memBirth) { this.memBirth = memBirth; } public int getMemGender() { return memGender; } public void setMemGender(int memGender) { this.memGender = memGender; } public String getMemZipcode() { return memZipcode; } public void setMemZipcode(String memZipcode) { this.memZipcode = memZipcode; } public String getMemAddr() { return memAddr; } public void setMemAddr(String memAddr) { this.memAddr = memAddr; } public String getMemEmail() { return memEmail; } public void setMemEmail(String memEmail) { this.memEmail = memEmail; } public String getMemHomePhone() { return memHomePhone; } public void setMemHomePhone(String memHomePhone) { this.memHomePhone = memHomePhone; } public String getMemCellPhone() { return memCellPhone; } public void setMemCellPhone(String memCellPhone) { this.memCellPhone = memCellPhone; } public String getMemType() { return memType; } public void setMemType(String memType) { this.memType = memType; } public String getMemGrade() { return memGrade; } public void setMemGrade(String memGrade) { this.memGrade = memGrade; } public String getMemPoint() { return memPoint; } public void setMemPoint(String memPoint) { this.memPoint = memPoint; } public String getLogtime() { return logtime; } public void setLogtime(String logtime) { this.logtime = logtime; }
} |
데이터 접근 객체 : MemberDAO |
package member.dao; import java.io.IOException; import java.io.Reader; import java.util.List; import org.apache.ibatis.io.Resources; import org.apache.ibatis.session.SqlSession; import org.apache.ibatis.session.SqlSessionFactory; import org.apache.ibatis.session.SqlSessionFactoryBuilder; import member.bean.MemberDTO; public class MemberDAO { // singleton private static MemberDAO instance; private SqlSessionFactory factory; public static MemberDAO getInstance() { if (instance == null) { synchronized (MemberDAO.class) { instance = new MemberDAO(); } } return instance; } // constructor public MemberDAO() { //InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml"); try { Reader reader = Resources.getResourceAsReader("mybatis-config.xml"); factory = new SqlSessionFactoryBuilder().build(reader); } catch (IOException e) { e.printStackTrace(); } }
public MemberDTO isExistId(String memId) { SqlSession sqlSession = factory.openSession(); return sqlSession.selectOne("memberSQL.isExistId", memId); } // 유저 등록 /* public void userWrite(UserDTO userDto) { SqlSession sqlSession = factory.openSession(); sqlSession.insert("userSQL.userWrite", userDto); sqlSession.commit(); sqlSession.close(); // userSQL 이라는 namespace안에 userWrite라는 mapper를 찾아간다. (in userMapper.xml) } // userWrite()
// 유저 삭제 public void userDelete(UserDTO userDto) { SqlSession sqlSession = factory.openSession(); sqlSession.delete("userSQL.userDelete", userDto); sqlSession.commit(); sqlSession.close(); } // userDelete() // 유저 리스트 public List<UserDTO> getUserList() { SqlSession sqlSession = factory.openSession(); List<UserDTO> list = sqlSession.selectList("userSQL.getUserList"); sqlSession.close(); return list; } // getUserList()
// 유저정보 얻어오기 public UserDTO getUser(String id) { UserDTO userDto = new UserDTO(); SqlSession sqlSession = factory.openSession(); userDto = sqlSession.selectOne("userSQL.getUser", id); sqlSession.close(); return userDto; }
// 유저 업데이트 public int updateUser(UserDTO userDto) { int su = 0; SqlSession sqlSession = factory.openSession(); su = sqlSession.update("userSQL.updateUser", userDto); sqlSession.commit(); sqlSession.close(); return su; }*/ }
|
memberMapper.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="memberSQL"> <!-- 중복체크 --> <select id="isExistId" parameterType="String" resultType="member"> select * from member where memId=#{memId} </select> </mapper>
|
DBClose |
package member.dao; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class DBClose { public static void close(Connection conn, PreparedStatement pstmt) { try { if(pstmt!=null) pstmt.close(); if(conn!=null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } public static void close(Connection conn, PreparedStatement pstmt, ResultSet rs) { try { if(rs!=null) rs.close(); if(pstmt!=null) pstmt.close(); if(conn!=null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } }
|
mybatis-config.xml |
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration> <typeAliases> <typeAlias type="member.bean.MemberDTO" alias="member"/> </typeAliases> <environments default="development"> <environment id="development"> <transactionManager type="JDBC"/> <!-- POOLED, UNPOOLED, JNDI(Java Naming and Directory Interface --> <dataSource type="POOLED"> <property name="driver" value="oracle.jdbc.driver.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/> <property name="username" value="java"/> <property name="password" value="oracle"/> </dataSource> </environment> </environments> <mappers> <mapper resource="member/dao/memberMapper.xml"/> </mappers> </configuration> |
web.xml |
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>memberservlet</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list>
<servlet> <servlet-name>checkId</servlet-name> <servlet-class>member.action.checkIdProc</servlet-class> </servlet> <servlet-mapping> <servlet-name>checkId</servlet-name> <url-pattern>/checkIdProc</url-pattern> </servlet-mapping>
</web-app> |