N스크린하이브리드앱과정/JSP:Model-1

[6주][1일][5~8th] JSP: 회원가입폼 분리시키기

광천스러움 2013. 8. 19. 18:08

* java파일 2개와 jsp파일 4개가 필요하다.

* 지난 수업과 비교하여 달라진 점은, jsp파일 안에서 회원가입, 로그인의 기능이 구현되었던 지난 수업의 내용에서 진화하여 각자의 기능이 메서드로 뚜렷히 구분되어 진다는 점이다. 이렇게 되면, 만약 어느 특정한 기능을 추가하고 싶다면 해당 메서드로 가서 그 부분의 기능만 수정해주면 된다. 또한, 예전에는 1~5단계의 과정을 일일히 거쳐야 했으나 여기서는 해당 메서드를 호출해 주면 끝이니... 코딩도 간단해진다는 장점이 있다.

 

☆ java 파일

1. MemberDataBean.java

- 이 부분은 폼에 입력될 id,패스워드,이름,날짜를 셋팅하는 코딩이다. 특이사항은...Timestamp는 자료형의 일종이었다는 사실!

public class MemberDataBean {
 private String id;
 private String passwd;
 private String name;
 private Timestamp reg_date;
 
 public String getId() {
  return id;
 }
 public void setId(String id) {
  this.id = id;
 }
 public String getPasswd() {
  return passwd;
 }
 public void setPasswd(String passwd) {
  this.passwd = passwd;
 }
 public String getName() {
  return name;
 }
 public void setName(String name) {
  this.name = name;
 }
 public Timestamp getReg_date() {
  return reg_date;
 }
 public void setReg_date(Timestamp reg_date) {
  this.reg_date = reg_date;
 }
}

 

2. MemberDBBean.java

- 이 부분은 폼에서 기록한 회원정보가 실제로 서버에 저장되는 과정이다.

- 디비연결 1,2단계 부분에서 try,catch를 사용하지 않았는데, 오류가 날 것이다. 그래서 대신 throws로 오류가 발생할 경우 Exception 클래스로 떠넘겨줌으로써 오류가 해결된다.

- 회원가입 메서드 안에서 getconnection() 메서드를 호출하여 1,2단계 작업이 수행된다.

- 3단계 수행시 getstring() 메서드를 사용해서 폼에 입력될 4가지 정보(id,passwd 등)를 가져온다. 이때 insertMember() 메서드 안 매개변수를 1번파일 클래스의 참조변수인 member로 지정하고 getstring에서 받아오는 장면이 꽤 인상적이다.

- usercheck() 메서드는 로그인 기능을 구현한다.

public class MemberDBBean {
 //디비연결 1,2단계
 private Connection getConnection() throws Exception{
  Connection con = null;
  String url="jdbc:mysql://localhost:3306/jspbeginner";
  String user="jspid";
  String pwd="jsppass";
  
  //1단계 드라이버로더
  Class.forName("com.mysql.jdbc.Driver");
  //2단계 디비연결
  con=DriverManager.getConnection(url,user,pwd);
  return con;
 }
 //회원가입
 public void insertMember(MemberDataBean member){
  Connection con = null;
  PreparedStatement pstmt=null; //sql문장을 먼저 미리 쓰겠다
  String sql="";
  try{
   //1,2단계 메서드 호출
   con = getConnection();
   //3단계 insert
   sql="insert into member(id,passwd,name,reg_date) values(?,?,?,?)";
   pstmt=con.prepareStatement(sql);
   pstmt.setString(1, member.getId());
   pstmt.setString(2, member.getPasswd());
   pstmt.setString(3, member.getName());
   pstmt.setTimestamp(4, member.getReg_date());
   //4단계 실행
   pstmt.executeUpdate();
  }catch(Exception e){
   e.printStackTrace();
  }finally{
   if(pstmt!=null)try{pstmt.close();}catch(SQLException ex){}
   if(con!=null)try{con.close();}catch(SQLException ex){}
  }
 }
 //유저체크
 public int userCheck(String id, String passwd){
  int check=-1;
  Connection con = null;
  PreparedStatement pstmt=null; //sql문장을 먼저 미리 쓰겠다
  String sql="";
  ResultSet rs = null;
  try {
   //1,2단계 메서드 호출
   con = getConnection();
   //3단계 id에 해당하는 passwd 가져오기
   sql = "select passwd from member where id=?";
   pstmt = con.prepareStatement(sql);
   pstmt.setString(1, id);
   //4단계 rs저장
   rs = pstmt.executeQuery();
   //5단계 데이터가 있으면
//       비밀번호 비교, 맞으면 check=1
   //             틀리면 check=0
   //없으면 아이디 없음 check=-1
   if(rs.next()){
    //id있음
//     rs.getString(1);
    String dbPass=rs.getString("passwd");
    if(passwd.equals(dbPass)){
     check=1;
    }else{
     check=0;
    }
   }else{
    check=-1;
   }    
  } catch (Exception e) {
   e.printStackTrace();
  }finally{
   if(rs!=null)try{rs.close();}catch(SQLException ex){}
   if(pstmt!=null)try{pstmt.close();}catch(SQLException ex){}
   if(con!=null)try{con.close();}catch(SQLException ex){}
  }
  return check;
 }
}

 

 

☆ jsp 파일

3. insertForm.jsp

<h1>회원가입</h1>
<form action="insertPro.jsp" method="post">
아이디: <input type="text" name="id"><br>
패스워드: <input type="password" name="passwd"><br>
이름: <input type="text" name="name"><br>
<input type="submit" value="전송"><br>
</form>

 

4. insertPro.jsp

<%
//한글처리
request.setCharacterEncoding("utf-8");
//패키지 member 파일이름 MemberDataBean
//멤버변수 id passwd name reg_date

//액션태그 useBean 이동 객체 생성 member
//액션태그 setProperty 폼=>자바빈저장
%>
<jsp:useBean id="member" class="member.MemberDataBean"/>
<jsp:setProperty property="*" name="member" />
아이디:<jsp:getProperty property="id" name="member"/><br>
패스워드:<jsp:getProperty property="passwd" name="member"/><br>
이름:<jsp:getProperty property="name" name="member"/><br>
<%
member.setReg_date(new Timestamp(System.currentTimeMillis()));
out.println("날짜: "+member.getReg_date());
//디비작업 패키지 member 파일이름 MemberDBBean
//객체생성 dbPro
MemberDBBean dbpro = new MemberDBBean();
//메서드 insertMember(member)
dbpro.insertMember(member);
//이동 회원가입성공 loginForm.jsp
%><script type="text/javascript">
 alert("회원가입 성공!");
 location.href="loginForm.jsp";
 </script><%
%>

 

5. loginForm.jsp

<%
 String id;
 if(session.getAttribute("id")!=null){
  id = "세션값 있음";
 }else{
  id = "세션값 없음";
 }
%>
<h1>로그인</h1>
<form action="loginPro.jsp" method="post">
아이디: <input type="text" name="id"><br>
패스워드: <input type="password" name="passwd"><br>
<input type="submit" value="로그인">
<input type="button" value="로그아웃" onclick="location.href='logout.jsp'"><br>
<input type="button" value="회원가입" onclick="location.href='insertForm.jsp'"><br>
</form>
<%=id %>

 

6. loginPro.jsp

<%
//id passwd 가져오기
String id = request.getParameter("id");
String passwd = request.getParameter("passwd");
//디비작업 객체 생성 dbPro
//int check=메서드 userCheck(id,passwd) 1,0,-1인지
MemberDBBean dbpro = new MemberDBBean();
int check = dbpro.userCheck(id,passwd);
//check==1 세션생성"id" 이동 main.jsp
//check==0 비밀번호틀림 뒤로이동
//check==-1 아이디없음 뒤로이동
if(check==1){
 session.setAttribute("id", id);
 %>
 <script type="text/javascript">
 alert("세션값 생성");
 location.href="main.jsp";
 </script>
 <%
}else if(check==0){
 %><script type="text/javascript">
 alert("비밀번호 틀림");
 history.back();
 </script>
 <%
}else{
 %><script type="text/javascript">
 alert("아이디 없음");
 history.back();
 </script>
 <%
}
%>