Spring JDBC web버전(springweb3)에 적용해보자.
Dao분리해내고 Bean설정해주고.. 똑같이 하면 되잖아..
먼저 EmpListController에 다 때려 넣은걸 분리시켜보자.
springdev2에서 EmpDao와 empDaoImpl을 복사해와. 그리고 beaninit.xml에서 DriverManagerDataSource와 EmpDaoImpl복사해서 dispatcher-servlet.xml에 붙여넣기.
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <!-- setter가 이미 만들어져 있어 --> <property name="driverClassName" value="oracle.jdbc.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/> <property name="username" value="oraclejava" /> <property name="password" value="oraclejava"/> </bean> <bean id="empdao" class="test.db.EmpDaoImpl" > <!-- EmpDaoImpl가 JdbcDaoSupport를 상속받아서 dataSource를 바로 주입할 수 있어 --> <property name="dataSource" ref="dataSource" /> </bean> <!-- 사원정보검색출력 --> <bean name="/emplist.do" class="test.db.EmpListController" /> </beans>
이제 EmpListController에 dao주입하자. EmpListController에 dao선언하고, setter만들고.. dispatcher-servlet에서 주입.
public class EmpListController extends AbstractController { private EmpDao dao; public void setDao(EmpDao dao) { this.dao = dao; } //생략
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <!-- setter가 이미 만들어져 있어 --> <property name="driverClassName" value="oracle.jdbc.OracleDriver"/> <property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/> <property name="username" value="oraclejava" /> <property name="password" value="oraclejava"/> </bean> <bean id="empdao" class="test.db.EmpDaoImpl" > <!-- EmpDaoImpl가 JdbcDaoSupport를 상속받아서 dataSource를 바로 주입할 수 있어 --> <property name="dataSource" ref="dataSource" /> </bean> <!-- 사원정보검색출력 --> <bean name="/emplist.do" class="test.db.EmpListController"> <property name="dao" ref ="empdao" /> </bean> </beans>
EmpListController 수정하고
package test.db; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.AbstractController; public class EmpListController extends AbstractController { private EmpDao dao; public void setDao(EmpDao dao) { this.dao = dao; } @Override protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { List<EmpDto> list = dao.list(); //view에다 뿌려야지 ModelAndView mav = new ModelAndView(); mav.setViewName("/test/emplist.jsp"); mav.addObject("list", list); return mav; } }
http://localhost/springweb3/emplist.do 실행하면 돼.
마찬가지로 총 급여 나오게 기능 추가해보자.
package test.db; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.AbstractController; public class EmpListController extends AbstractController { private EmpDao dao; public void setDao(EmpDao dao) { this.dao = dao; } @Override protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { List<EmpDto> list = dao.list(); int sumsal = dao.sumsal(); //view에다 뿌려야지 ModelAndView mav = new ModelAndView(); mav.setViewName("/test/emplist.jsp"); mav.addObject("list", list); mav.addObject("sumsal", sumsal); return mav; } }
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <!-- uri=""사이에서 ctrl-space하면 사용가능 목록나와 --> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> <link rel="stylesheet" href="css/board.css" type="text/css"> </head> <body> <table> <caption>사원리스트</caption> <tr> <th>사원번호</th> <th>이름</th> <th>급여</th> <th>부서명</th> </tr> <c:forEach items="${list }" var="dto"> <tr> <td align="center">${dto.empno }</td> <td align="center">${dto.ename }</td> <td align="center">${dto.sal }</td> <td align="center">${dto.dname }</td> </tr> </c:forEach> </table> 총 급여 : ${sumsal}<br/> </body> </html>
.
.
.
.
.
.
.
.
게시판(springboard)을 변경해보자.
먼저 Dependency Injection처리(BoardDao, UserDao)
: 각각의 기능들 마다 Dao를 new해서 쓰고 있잖아. 이제 Dao(BoardDao, UserDao)는 하나만 만들어서 주입만 하면 되는걸 알았어. 이 둘은 bean으로 만들어두고 같이 쓰도록 하자.
<bean id="BoardDao" class="board.model.BoardDao" /> <bean id="UserDao" class="user.model.UserDao" /> <!-- 생략 -->
그리고 BoardDao가 필요한 곳에 boardDao선언하고 주입할 수 있게 setter만들어준다. (기존의 new한 BoardDao는 삭제) 우선 BoardList에 적용해보자.
package controller; import java.util.List; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.AbstractController; import board.model.BoardDao; import board.model.BoardDto; public class BoardList extends AbstractController { private BoardDao boardDao; public void setBoardDao(BoardDao boardDao) { this.boardDao = boardDao; } @Override public ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) { //DB에 접속해서 현재 게시판의 리스트를 읽어와야지 // BoardDao boardDao = new BoardDao(); List<BoardDto> list = boardDao.getList(); //받아와 ModelAndView mav = new ModelAndView(); mav.setViewName("/WEB-INF/view/list.jsp"); //다음이동할 곳 mav.addObject("list", list); //거기 뿌릴 데이터 return mav; } }
그리고 dispatcher-servlet에서 BoardList에 BoardDao를 주입한다.
<!-- 게시판 리스트 --> <bean name="/BoardList.do" class="controller.BoardList" > <property ref="BoardDao" name="boardDao"/> </bean> <!-- 게시판 글쓰기 폼 --> <bean name="/BoardInsert.do" class="controller.BoardInsert" /> <!-- 생략 -->
잘 주입이 됨을 확인..
http://localhost/springboard/BoardList.do
리스트 예쁘게 수정
springweb3의 /WebContent/css/board.css 복사해놓고 list.jsp에 링크시켜
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>게시판 리스트</title> <link rel="stylesheet" href="css/board.css" type="text/css"> </head> <body> <table width="500" border="1" cellspacing="0"> <caption>게시판 리스트</caption> <tr> <th>번호</th> <th>제목</th> <th>이름</th> <th>날짜</th> <th>조회수</th> </tr> <c:forEach items="${list}" var="boardDto"> <tr> <td>${boardDto.seq}</td> <td><a href="BoardView.do?seq=${boardDto.seq}">${boardDto.title}</a></td> <td>${boardDto.name}</td> <td align="center">${boardDto.writeday}</td> <td align="right">${boardDto.readcount}</td> </tr> </c:forEach> </table> <a href="BoardInsert.do">글쓰기</a> </body> </html>
BoardInsertAction, BoardView, BoardUpdate, BoardUpdateAction, BoardDeleteAction에 같은 방법으로 주입시켜준다.
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="BoardDao" class="board.model.BoardDao" /> <bean id="UserDao" class="user.model.UserDao" /> <!-- 로그인 폼 --> <bean name="/Login.do" class="controller.Login" /> <!-- 로그인 확인 --> <bean name="/LoginAction.do" class="controller.LoginAction" /> <!-- 게시판 리스트 --> <bean name="/BoardList.do" class="controller.BoardList" > <property ref="BoardDao" name="boardDao"/> </bean> <!-- 게시판 글쓰기 폼 --> <bean name="/BoardInsert.do" class="controller.BoardInsert" /> <!-- 게시판 글쓰기 데이터를 DB에 저장 --> <bean name="/BoardInsertAction.do" class="controller.BoardInsertAction" > <property ref="BoardDao" name="boardDao"/> </bean> <!-- 게시판 상세보기 --> <bean name="/BoardView.do" class="controller.BoardView" > <property ref="BoardDao" name="boardDao"/> </bean> <!-- 게시판 글 수정 --> <bean name="/BoardUpdate.do" class="controller.BoardUpdate" > <property ref="BoardDao" name="boardDao"/> </bean> <!-- 게시판 글 수정 데이터를 DB에 저장 --> <bean name="/BoardUpdateAction.do" class="controller.BoardUpdateAction" > <property ref="BoardDao" name="boardDao"/> </bean> <!-- 게시판 글 삭제 --> <bean name="/BoardDelete.do" class="controller.BoardDelete" /> <!-- 글 DB에서 삭제 --> <bean name="/BoardDeleteAction.do" class="controller.BoardDeleteAction" > <property ref="BoardDao" name="boardDao"/> </bean> </beans>
각 controller수정한 코드는 알아서..
각 기능 테스트해봐.
.
.
.
.
.
.