본문 바로가기

Java, Spring/17일

17일차 8

 

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수정한 코드는 알아서..

 

각 기능 테스트해봐.

.

.

.

.

.

.

'Java, Spring > 17일' 카테고리의 다른 글

17일차 3  (0) 2012.09.20
17일차 4  (0) 2012.09.20
17일차 5  (0) 2012.09.20
17일차 6  (0) 2012.09.20
17일차 7  (0) 2012.09.20