상단메뉴에 게시판 이름들을 데이터베이스 정보를 가져와서 그 부분을 매꾸도록 했다.
먼저 db에 다음과 같이 board_info_table 를 만들어 놓았다.
이를 가져오기 위해 mapper 패키지와 TopMenuMapper.class 를 만들었다.
ServletAppContext.java에 등록은 덤
dao에서 이 mapper를 이용해 getTopMenuList() 를 리스트안에 저장해 두었고 그 리스트를 리턴했다.
TopMenuService 에서 dao의 리스트를 받아와서 리스트를 다시 리턴해준다. 패키지 만드는 것은 당연
이 topmenu는 모든 곳에서 쓰이기 때문에 interceptor 의 prehandle 을 통해 미리 적용을 해준다.
interceptor 도 ServletAppContext.java에 등록한다.
파일경로가 있든 없든 모든 요청주소에 대해서 이 인터셉터를 통과하게끔 세팅을 하였다.
본래의 인터셉터에서는 new TopMenuInterceptor() 일텐데 저곳에 topMenuService가 있고
위에는 topMenuService도 Autowired 해주었다. 그 이유는
***interceptor 에서는 자동주입을 통해서 Bean을 주입받지를 못한다. 그렇기 때문에 interceptor 에서 사용할 bean 객체들은 이 객체를 interceptor를 등록하는 쪽에서 bean을 주입받은 다음에 생성자로 넘겨주어야 한다. 그래서 ServletAppContext.java에서 bean을 주입받고 생성자로 넘겨준 것이다.
다음과 같이 말이다.
이제 저렇게 request 영역에 리스트 까지 넘겨주었다. top_menu.jsp 를 고칠 차례이다.
본래 게시판이름으로 하드코딩이 되어있던 곳인데, 다음과 같이 반복문을 통하여 board/main에 보내주면서 board_info_idx 값 또한 보내주고 게시판 이름또한 출력하게끔 하였다.
위는 java 프로젝트이고 xml 형식일 때에는 어떻게 해야되냐면 이것도 마찬가지로 mapper 부터 만들어준다.
top_menu_mapper.xml 이다. mapper 의 namespace 와 select id 값은 dao 에서 받아올 때 쓰인다.
CDATA 를 사용하면 부등호 등 모든것을 문자열로 취급하기 때문에 sql 문을 넣기에 편하다.
이 mapper를 servlet-context.xml에 등록을 해야하는데,
지난번에 만들어줬던 파일에 모든 *.xml 을 등록해준다고 해주었기 때문에 따로 등록을 하지않아도 된다.
TopMenuDao.java 에서 java 프로젝트는 mapper를 직접 주입을 받았었는데, xml 프로젝트는 mapper를 인터페이스나 클래스가 아니라 xml 로 만들기 때문에 mapper를 주입받지는 못한다. mybatis 세팅 때에 만든
이것을 주입받아 사용하면 된다.
다음과 같이 변경을 하고 selectList () 안에는 namespace.select id 값을 넣으면 된다.
가져올 row가 1개면 selectOne 함수를 쓰겠지만 여러개이므로 selectList를 사용한 것이다.
그리고 dao 패키지를 servlet-context.xml 에 scan을 해준다.
service는 java와 같다. servlet-context.xml에 scan 해주는 것만 기억하자.
이제 interceptor 이다. java 프로젝트에서는 interceptor 파일에서는 bean을 주입받을 수 없기 때문에 생성자를 통해서 객체의 주소값을 받았었는데 xml 에서는 주입받을 수 있기 때문에 생성자가 아닌 bean을 주입받으면 된다.
다음과 같이 말이다.
그리고 servlet-context.xml 에 interceptor 를 등록해주면 된다.
jsp 또한 java 프로젝트와 동일하다.
'공부 기록들' 카테고리의 다른 글
2020.04.28 미니 프로젝트(4) (로그인 처리, 로그인 확인 처리, 상단 메뉴 처리) (0) | 2020.04.28 |
---|---|
2020.04.27 미니 프로젝트(3) (유효성 검사, 아이디 중복 확인 처리, 저장처리) (0) | 2020.04.27 |
2020.04.24 - 미니프로젝트(1) (틀 구성하고 페이지 연결하기) (0) | 2020.04.24 |
2020.04.22~23 - MVC(8) (예외처리, MyBatis Java, MyBatis XML, RestController) (0) | 2020.04.23 |
2020.04.21 MVC(7) (JSR-303, JSR-380, Validator 커스터마이징, Interceptor) (0) | 2020.04.21 |