본문 바로가기

프로그래밍/JavaWebProgramming14

[Lesson06] annotation을 이용 객체 관리 에노테이션으로 사용하려고 하니 Component가 없기 때문에 빨간줄이 뜬다 생성만 하고 나서 value를 넣으려 하니 value가 없기 때문에 빨간줄 value를 받을 수 있는 String 타입으로 value선언 오버라이딩 같은경우 저장하기전에 읽는다에노테이션 주석이 언제 읽힐 것인지 지정을 해주어야 한다RetentionPolicy.SOURECE : 소스 파일에서만 유지 컴파일 할때 제거됨RetentionPolicy.CLASS : 클래스 파일에 기록 실행시 유지 되지 않음RetentionPolicy.RUNTIME : 클래스 파일에 기록 실행 시에도 유지 실행될 때에도 유지가되어야 하기 때문에 Retention해 준다 ApplicationContext.java(일부 내용) 에노테이션이 선언된 것을 찾아서.. 2016. 12. 30.
[Lesson06] properties를 이용한 객체관리 설명 2 applicateion-context.properties 12345678910#1. for ApplicationContext.jndi.dataSource=java:comp/env/jdbc/studydbmemberDao=spms.dao.MySqlMemberDao/auth/login.do=spms.controls.LogInController/auth/logout.do=spms.controls.LogOutController/member/list.do=spms.controls.MemberListController/member/add.do=spms.controls.MemberAddController/member/update.do=spms.controls.MemberUpdateController/member/del.. 2016. 12. 30.
[Lesson06] properties를 이용 객체 관리 설명 1 어제까지는 MVC에 대한 구동원리를 배웠고더이상 컨트롤러를 손대지않아도 된다하지만 이제는 리스너를 손대야 한다 톰캣은 서블릿 객체를 관리하지 일반 객체를 관리하지는 않는다일반 객체를 관리하는 클래스 역할을 하는게 Spring 프레임 워크이다.mvc는 서블릿 프레임워크di는 객체관리를 편하게 해주는 프레임워크 A라는 클래스가 추가 될때 마다 리스너에 등록을 해줘야하는데리스너는 서블릿인데 서블릿은 객체를 관리역할을 하는 것이 아니다그러므로 리스너는 객체와 관련된 부분을 관여하지 않고setter를 찾아 주입을 시켜줄 것이다 결론적으로는 객체를 관리하는 메인을Dispatcher 서블릿이 리스너를 통해 가져왔다면이제는 application-context를 통해 가져오게 할 것이다. 1) MVC 프레임워크 컨트롤러.. 2016. 12. 30.
[Lesson06] 리플랙션 API를 이용 1) MVC 프레임워크 컨트롤러 자동화2) DI 객체 관리 자동화3) 에노테이션을 이용한 자동화 리플렉션을 사용 하려면 인터페이스도 써야하고 여러가지가 필요하다.controller가 '나는 응답하는게 있다' 라고 하면 필요로 하는 객체가 달라진다.어떻게 이 필요로 하는 것을 알까? 표시를 해야한다. ex) implements Controller, A Controller의 자식이자 A의 자식이다. A타입이면 무엇을 필요로 하는지 말해줘야한다. DataBinding.java인터페이스 구현 Object배열로 데이터의 이름과 타입정보를 담는다. MemberAddController.javaDataBinding 인터페이스를 선언 getDataBinders();메소드 구현return을 할때 new Member[1];.. 2016. 12. 29.
[Lesson06] 의존성 낮추기 서블릿을 하나에 모아 놓고 서블릿일 필요가 없는 것을 분리 분리된 컨트롤러를 호출 매번 호출 하게 되니 매번 호출 하지 않도록 코드 간략화 DispatcherServlet.java(수정 전)모든 컨트롤러들이 DAO를 필요로 할까? 아니다. 임의적으로 모든 컨트롤러가 주입받게 했고(강제성), 컨트롤러에 따라서 DAO 종류가 다를 수도 있다.컨트롤러가 만들어져야 디스패쳐 서블릿을 만들 수 있다(의존성 높음) 이에 sc에서 DAO를 가져왔지만 이제 sc에서 컨트롤을 가져오면 DAO를 가져올 필요가 없고new 연산자가 사라지게 된다. MemberListController.java MemberDao가 필요하기 때문에 setMemberDao 메소드를 선언하여 주입을 위한 준비 MemberAddController.j.. 2016. 12. 29.
[Lesson05] 리스너 외부 라이브러리에 의존하는 것은 좋지 않아 DB와 관련되어있는 것들을 빼려한다.생명주기 리스너를 만들어서 톰캣이 실행 될때 종료 될때 Connection 연결과 종료를 하는것 이다. MemberListServlet.java(변경 전) ContextLoaderListener.java톰캣이 실행 될때(이벤트발생) ServletContext에 있는 정보를 가져와드라이버 로딩 및 연결을 하라는 메소드 작성,톰캣이 종료 될때(이벤트발생) Connection을 종료하라는 메소드 작성 web.xmlDB연결과 종료 역할을 하던 AppInitServlet 의 역할을 ContextLorderListener 가 하기 때문에AppInitServlet 의 삭제 및 매핑 설정도 같이 삭제 Listener 설정context-par.. 2016. 12. 21.
[Lesson05] ListServlet DAO 분리 MemberListServlet.java(수정 전)대부분의 역할을 서블릿 혼자 하고 있다.소규모 프로젝트에서는 이렇게 사용하여도 크게 문제가 없지만대규모 프로젝트나 중복되는 코드가 많다면 분리를 시켜주는게 좋다. MemberDao.javasetConnection()을 호출하지 않고 selectList() 메소드를 호출하게 되면 connection 변수를 선언만 하고 객체를 생성하지 않았기 때문에변수의 값은 null임으로 NullPointException이 난다. MemberListServlet에서 DB 연결부분 복사해서 여기서 사용하면 안되나 싶기도 하지만ServletContext는 서블릿만 접근이 가능하여 일반 클래스에서는보관된 Connection 객체를 꺼낼수 없어 setConnection()메소드를.. 2016. 12. 16.
[Lesson05] EL JSTL 사용 JSTL 라이브러리 추가가 제일 우선!jsp파일 마다 taglib을 하게 되면 매번 같은 코드를 작성해야 하니web.xml에 모든 jsp를 가로채게 jstl.jsp 이라는 파일 생성 및 taglib 선언 jstl.jsp web.xml 자바코드를 사용하기 위해 사용한 태그가el과 jstl의 조합으로 사라져 코드 보기가 편해 졋다. el을 사용해 어떠한 값을 받아 오려면 어느 보관소에 있는지 찾아야 함으로el의 기본 객체(pageScope, requestScope, seesionScope, applicationScope)를적어 줘야 하지만 jsp -> request -> session -> servlet -> null순서대로 보관소를 뒤져 객체를 찾기 때문에 import를 할 필요가 없고사용할때 생략 가능하.. 2016. 12. 16.
[Lesson05] code review 01 maven으로 만들었기 때문에 pom.xml을 먼저 셋팅 후web.xml을 보면 여러가지가 셋팅되어 있다.1 톰캣이 실행되자마자 첫번째로 호출 시켜라.(필터보다 먼저 호출이 된다) 그러면 AppInitServlet이 있어야겠죠 만듭시다!!init메소드의 forName()이 ClassNoFoundException을 발생시키는데원본 메소드의 예외의 범위나 갯수를 초과할 수 없어catch절에서 ServletException로 변경하여 넘긴다 예제에서는 필터를 에노베이션을 썼지만몇개 없는 필터나 인터페이스는 web.xml에 매핑해주면소스를 보지 않더라도 어떠한 구조로 이루어 졌는지 파악하기 쉬워진다.web.xml에 모든 주소를 가로채게 매핑 해놓아서어떠한 주소를 입력하더라도 필터를 거쳐 선언해놓은 setChar.. 2016. 12. 15.