DAY_048[국비] 자바 웹프로그래밍 과정

Bona의 블로그 입니다.·2022년 12월 5일
0

국비과정

목록 보기
48/99

 🌞 Day 048 

  • 저번주 목,금요일에 만든 프로그램을 Model2방식으로 새로 만듦
  • 구성이 달라지는 것이므로 코드가 거의 같은 파일들이 있음
  • 간단하게 파일별로 정리함



 🎄 Model2 방식 

 🎁 index.jsp 

<%response.sendRedirect("member.do?command=loginForm");%>

  • member.do
    : 현재 프로젝트에 있는 유일한 서블릿의 이름(URL mapping)
    유일한 서블릿을 호출하고, 지금 하고자하는 작업의 제목을 command라는 파라미터로 보내서 해당 기능을 다른 기능과 구분하여 실행되게 한다.



 🎁 loginForm.jsp 

  • post로 member.do로 보낸다.
  • hidden태그를 이용하여 command 파라미터를 보낸다.
  • js파일을 따로 만들어서 자바스크립트 함수 작성
    <script src="script/member.js"></script>
    // member.js
    function loginCheck(){
        if(document.frm.userid.value==""){
            alert("아이디를 입력하세요")
            document.frm.userid.focus()
            return false;
        }
        if(document.frm.pwd.value==""){
            alert("암호를 입력하세요")
            document.frm.pwd.focus()
            return false;
        }
        return true;
    }



 🎁 MemberServlet 

  • command에 전달된 값에 따라 어떤 작업을 할지가 결정이 되어 실행된다.

  • 각command 별 실행할 작업들은 해당 실행코드가 들어있는 클래스 내부에,
    그 중에서도 execute메서드 안에 있다.

  • Model2방식은 각 기능별로 클래스가 제작되어 실행되기를 기다리고, command값에 따라 선택되어 실행되는 형식

  • 각 기능이 내장된 객체들의 인스턴스들이 상속(implements)받은 부모 인터페이스(Action)의 레퍼런스 변수에 저장하고,
    레퍼런스 변수명.execute로 실행

  • 각 클래스에 있는 execute 메서드는 Action 인터페이스에 존재하는 추상메서드를 오버라이딩한 메서드이다

  • 각 클래스가 Action인터페이스를 상속(implement)하여, execute 메서드가 오버라이딩되면 Action 인터페이스의 레퍼런스 변수로 자식 클래스의 execute 메서드를 호출하여 사용한다.



 🎁 interface - Action 

  • 인터페이스 Action
    : 각각의 기능을 가진 클래스들이 implements할 인터페이스



 🎁 class - ActionFactory 

  • command가 추가되면 클래스도 추가 생성하고, ActionFactory에 추가한다.

  • 오늘 수업에서는 update까지 만들었다.
    delete와 editAdmin은 내일



 🎁 Dbman 

  • DB Manager

※ MemberDto는 똑같이 생성

※ MemberDao는 메서드가 계속 추가되므로 마지막에 정리



 🎁 class - LoginFormAction 



 🎁 class - LogOutAction 



 🎁 class - LoginAction 



 🎁 class - MainAction 



 🎁 main.jsp 

  • 이번엔 member 폴더에 같이 생성
  • 코드가 거의 같지만 버튼의 onclick이 조금 달라짐
  • 자바스크립트 함수는 전부 member.js라는 자바스크립트 파일에 작성하고 script추가



 🎁 member.js 



 🎁 joinForm.jsp 



 🎁 class - IdCheckAction 



 🎁 idcheck.jsp 



 🎁 class - JoinAction 

  • insert에서는 forward를 쓰면 새로고침할 때마다 반복실행되는 에러가 발생할 수 있으므로 respose.sendRedirect()를 사용하기



 🎁 class - UpdateFormAction 



 🎁 updateFrom.jsp 



 🎁 class - UpdateAction 



 🎁 class - DeleteAction 

  • 저번주 코드를 참고해서 내가 작성한 클래스
  • js함수에서 문제가 생겨서 정상작동되는지 확인 못함
  • 내일 수업시간에 마무리 할 듯



 🎁 class - EditAdminAction 

  • 저번주 코드를 참고해서 작성한 코드 ➡️ 정상작동함
  • 내일 수업시간에 수정할 수도 있음



 🎁 MemberDao 




 🎄 update만 안되요 

  • 이거 진짜 어이가 없었던게... 학원에서 정상작동되었던 코드가
    집에서는 안되는 것이다.
  • 다 안되는 것도 아니고 insert, delete는 됨
    근데 열받는게 sql파일에서 직접 명령하면 또 돼
  • 이클립스가 문제가 있나 싶어서 깔았다 지웠다를 10번 넘게하고 버전도 다르게 해보고 난리도 아니었음
  • 구글해보니 계정의 권한 문제일수도 있다고 해서 그럴리가 없는데(생성할 때 이미 DBA권한을 줬으니까)하면서도 권한 설정 다시함 -> 응 안돼...
  • 누가 테이블을 지웠다가 다시 생성했다고 하고 누구는 쿼리에 공백이 들어갔다고 하고 ...
  • 결국 옛날 질문글을 찾음.. 커밋 문제일수도 있다고? 나랑 가장 유사한 증상(?!)인 글이었고 Connection 객체를 생성하고 바로 아래에 오토커밋을 해줘야 하다는 것이었다.
  • 질문자는 그래도 안돼서 update 전에 select하고 쿼리문 콘솔창에 프린트하고 마지막에 수동커밋까지 했다던데
    나는 다행히 Connection객체 생성하고 오토커밋 설성하니까 다른 update를 하는 다른 클래스도 정상작동 해버림... 헐...
	// Connection 객체 생성
	con = Dbman.getConnection();
    
    // 오토커밋 설정
	try {con.setAutoCommit(true);} 
	catch (SQLException e1) {e1.printStackTrace();}
  • con.setAutoCommit(true) 작성하니까 이클립스에서 자동으로 try/catch하라고 해서 자동생성함

  • 나중에 나를 위해서 태그 박고 정리함 ㅠ_ㅠ




profile
제가 공부하고 공유하고 싶은 글을 올리고 있습니다.

0개의 댓글