국민내일배움카드 - 고용노동부

에이콘 아카데미

아카데미 이야기 전문가칼럼

전문가칼럼

에이콘 아카데미의 전문 강사님의 분야별 칼럼을 확일 할 수 있습니다.

lesson04) JSP강의 - (응답객체한글설정, 로그인처리, 회원가입처리 등) 02

4. Servlet을 사용하여 오라클 DB 테이블 row추가 

 

* User클래스 작성

 

@ Source 

 

public class User {

 private String usernm; //이름

 private String userid;  //아이디 

 private String userpw; //비밀번호

 private String email;   //이메일

 private String address; //주소

 private Date regdate;   //가입일

 private int seq;        //시퀀스

 

 //setter/getter 작성

 public String getUsernm() {

  return usernm;

 }

 public void setUsernm(String usernm) {

  this.usernm = usernm;

 }

 public String getUserid() {

  return userid;

 }

 public void setUserid(String userid) {

  this.userid = userid;

 }

 public String getUserpw() {

  return userpw;

 }

 public void setUserpw(String userpw) {

  this.userpw = userpw;

 }

 public String getEmail() {

  return email;

 }

 public void setEmail(String email) {

  this.email = email;

 }

 public String getAddress() {

  return address;

 }

 public void setAddress(String address) {

  this.address = address;

 }

 public Date getRegdate() {

  return regdate;

 }

 public void setRegdate(Date regdate) {

  this.regdate = regdate;

 }

 public int getSeq() {

  return seq;

 }

 public void setSeq(int seq) {

  this.seq = seq;

 }

 

}

 

* DBconnect 클래스 작성

 

@ Source 

 

public class DBconnect {

 private static Connection con;

 private DBconnect(){}

 

 public static Connection getConnection() {

    try{

      Class.forName("oracle.jdbc.driver.OracleDriver");

      String url = "jdbc:oracle:thin:@127.0.0.1:1521:XE";

      if(con==null){

         con = DriverManager.getConnection(url, "test", "1111");

      }

      }catch(Exception ex){System.out.println("DB서버 연결실패!");

      }

      return con;

  

 }// getConnection() end 

}

 

 

 

 

* UserReg 클래스 작성

 

 

@ Source 

 

 

public class UserReg {

  private Connection con;

  private Statement stmt;

  private PreparedStatement pstmt;

  private ResultSet rs;

  private String sql;  

  private int result;

  

  public UserReg(){

   con = DBconnect.getConnection();

  }

  

  public int insert(User user){

   sql = "INSERT INTO t_member " +

       "values( T_MEMBER_SEQ.NEXTVAL, ? , ? , ? , ? , ? , SYSDATE)";

   try {

   //쿼리 실행을 위해 미리 스테이트먼트 객체 준비

   //  ?      ?      ?       ?      ?

   //  1      2      3       4      5

   //USERID USERPW USERNM ADDRESS EMAIL 

    

   pstmt = con.prepareStatement(sql);

   pstmt.setString(1, user.getUserid());

   pstmt.setString(2, user.getUserpw());

   pstmt.setString(3, user.getUsernm());

   pstmt.setString(4, user.getAddress());

   pstmt.setString(5, user.getEmail());    

 

   //insert 쿼리 실행

   result = pstmt.executeUpdate();

   System.out.println("result:" + result);

  } catch (SQLException e) {

   e.printStackTrace();

  }

   return result;

  }//생성자

}

 

* UserRegServlet.java 수정

 

@ Source 

 

public class UserRegServlet extends HttpServlet {

 private static final long serialVersionUID = 1L;

       

 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

  response.setContentType("text/html; charset=UTF-8");

  request.setCharacterEncoding("UTF-8");

  

  //사용자가 입력한 값을 request 객체에서 꺼내서

  //User 객체에 저장

  

  User user = new User();

  user.setUsernm(request.getParameter("usernm"));

  user.setUserid(request.getParameter("userid"));

  user.setUserpw(request.getParameter("userpw"));

  user.setEmail(request.getParameter("email") + "@" + request.getParameter("email2"));

  user.setAddress(request.getParameter("address"));

  

  PrintWriter out = response.getWriter();

  

  //User 객체를 매개변수로 UserReg 클래스의

  //insert 메서드 호출

  UserReg ur = new UserReg();

  int result = ur.insert(user);

  

  String url ="";

  

  result = 2; //임의의 값으로 일단 저장

  

  //만약에 회원 가입에 성공하면

  //  로그인 페이지로 이동 링크 출력

  if(result == 1){

   

   url = "user/login.html";

   // RequestDispatcher를 이용하여 로그인 페이지로 이동

   RequestDispatcher dispatch = request.getRequestDispatcher(url);

   dispatch.forward(request, response);

   

  }else { // 그렇지 않으면 

      

   url = "user/regForm.html";

    // sendRedirect()를 이용하여 다시 회원가입 페이지로 이동

   response.sendRedirect(url);

  }

 }

}

 

* regform.html에 form

 

 

      method="post"

      name = "regForm"> action을 "/webBegin/UserReg.do" , method를 "post"로 바꿔준다.

 

(1) regform 에서 어떤 값을 입력하면 http를 통해 request객체에 실려 이동한다. (실행은 login으로)

 


 

(2) UserRegServlet.java의 do post 메소드가 request 객체를 받는다.

 

(3) getParameter로 값을 꺼내고 User 클래스에 저장할 수 있는 변수가 있고 User클래스의 Setter를 이용하여 그 값을 저장

 

(4) UserReg에서 User클래스에 저장되 있는 값을 받아서(받을 때 getter사용) 


 

DB로 보낼 쿼리문을 완성한다.(PrepareStatement 사용)  

 

5. Servlet의 라이프 사이클


@ Source


 

public class ServletLifecycle extends HttpServlet {

 private static final long serialVersionUID = 1L;

 

 @Override

 public void destroy() {

  System.out.println("서블릿의 destroy 메서드");

 }

 @Override

 public void init(ServletConfig config) throws ServletException {

  System.out.println("서블릿의 init 메서드");

 }

 @Override

 public void service(ServletRequest arg0, ServletResponse arg1)

   throws ServletException, IOException {

  System.out.println("서블릿의 service 메서드");

 }

}

 


 

* 서블릿 클래스는 웹 브라우저에 의해 바로 호출되는 것이 아니라 서블릿 클래스로부터 서블릿 객체가 만들어지고 ,

그 객체가 웹 컨테이너에 의해 초기화된 다음에 호출된다. 

이렇게 웹 브라우저의 요청을 처리할 수 있는 상태의 서블릿 객체를 서블릿이라고 하는데, 웹 컨테이너는 더 이상 필요치 

않은 서블릿은 웹 컨테이너의 메모리부터 제거하기도 한다.  

이런 전과정을 서블릿의 라이프 사이클이라고 한다.