17일차 4
게시판 model2로 만든거 다 잊은 듯해서 다시 한번 해보자.
Spring MVC로 간단한 DB데이터 보여주는 프로그램 만들거야.
.
.
.
그리고 plug-in 하나 설치하자..
ERMaster
http://ERMaster.sourceforge.net/update-site
- 그리고 Dynamic Web Project 로 SpringWeb3만들자.
- library 복사해놓고..
- web.xml에 servlet등록하고, encording 필터도 등록해놔.
- 그 이름으로 Spring Bean Configuration File (dispatcher-servlet.xml)만들어.
- SpringWeb3에서 마우스오른쪽-> Properties 에서 UTF-8변경
그리고..
src밑에 test.db package만들고 마우스 오른쪽 new –> other…
뭘 해볼거냐면.. Spring MVC로 만들건데 DB에 있는 데이터를 가져와 뿌려볼거야..
DB는 Table2개를 만들어 관계형으로 구성해서 조인해서 가져올거야.
Table만들기 : Table 찍고 모눈종이 찍으면 table생겨..
아래와 같이 t_emp 테이블 만들어
t_dept도
Relation설정
1:N Relation 누르고 t_dept클릭하고 t_emp클릭하면 닭발 생기고 t_emp에 deptno가 저절로 생겨
Sequence 생성
사원번호 Sequence
부서번호는 10부터 10씩 증가.
DDL export하기 : 모눈종이에서 마우스오른쪽 버튼..
그러면 oracle.sql파일이 생성된다.
-- Drop Tables */ DROP TABLE T_EMP; DROP TABLE T_DEPT; --/* Drop Sequences */ DROP SEQUENCE DEPTSEQ; DROP SEQUENCE EMPSEQ; --/* Create Sequences */ CREATE SEQUENCE DEPTSEQ INCREMENT BY 10 START WITH 10; CREATE SEQUENCE EMPSEQ START WITH 1; --/* Create Tables */ CREATE TABLE T_DEPT ( DEPTNO NUMBER NOT NULL, DNAME VARCHAR2(30) NOT NULL, PRIMARY KEY (DEPTNO) ); CREATE TABLE T_EMP ( EMPNO NUMBER NOT NULL, ENAME VARCHAR2(30) NOT NULL, SAL NUMBER DEFAULT 0 NOT NULL, DEPTNO NUMBER NOT NULL, PRIMARY KEY (EMPNO) ); --/* Create Foreign Keys */ ALTER TABLE T_EMP ADD FOREIGN KEY (DEPTNO) REFERENCES T_DEPT (DEPTNO) ;
상단에 DB연결 설정한 후 쿼리 실행하면 테이블 만들어져..
.
.
DB에 데이터 넣자.
insert into t_dept (DEPTNO, DNAME) values(deptseq.nextval, '운영부'); insert into t_dept (DEPTNO, DNAME) values(deptseq.nextval, '영업부'); insert into t_dept (DEPTNO, DNAME) values(deptseq.nextval, '개발부'); SELECT * FROM t_dept; insert into t_emp(EMPNO, ENAME, SAL, DEPTNO) values(EMPSEQ.nextval, '서태지', 10000000, 10); insert into t_emp(EMPNO, ENAME, SAL, DEPTNO) values(EMPSEQ.nextval, '이지아', 5000000, 20); insert into t_emp(EMPNO, ENAME, SAL, DEPTNO) values(EMPSEQ.nextval, '양현석', 8000000, 10); insert into t_emp(EMPNO, ENAME, SAL, DEPTNO) values(EMPSEQ.nextval, '신해철', 1000000, 30); SELECT * FROM t_emp;
.
.
.
.
테스트 DB가 만들어졌으니 이걸 읽어다가 화면에 뿌리는 걸 만들어보자.
dispatcher-servlet.xml에 bean등록
<?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 name="/emplist.do" class="test.db.EmpListController" ></bean> </beans>
EmpListController클래스 구현 (간단히 t_emp테이블의 사원번호, 이름, 급여만)
package test.db; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.ArrayList; 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 { @Override protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception { //보통 모델부를 호출하지만 그냥 하자 간단하게.. //datebase connection pooling도 안쓰고 그냥 일반 jdbc방법을 쓰자. Connection cn = null; PreparedStatement st = null; ResultSet rs = null; String sql = "SELECT empno, ename, sal " + "FROM t_emp " + "ORDER BY 1 ASC "; List<EmpDto> list = new ArrayList<EmpDto>(); try { Class.forName("oracle.jdbc.OracleDriver"); cn = DriverManager.getConnection( "jdbc:oracle:thin:@localhost:1521:xe", "oraclejava", "oraclejava"); st = cn.prepareStatement(sql); rs = st.executeQuery(); while(rs.next()) { EmpDto dto = new EmpDto(); dto.setEmpno(rs.getInt("empno")); dto.setEname(rs.getString("ename")); dto.setSal(rs.getInt("sal")); list.add(dto); } } catch (Exception e) { e.printStackTrace(); } finally { if(rs != null ) try {rs.close();} catch(Exception e) {} if(st != null ) try {st.close();} catch(Exception e) {} if(cn != null ) try {cn.close();} catch(Exception e) {} } //view에다 뿌려야지 ModelAndView mav = new ModelAndView(); mav.setViewName("/test/emplist.jsp"); mav.addObject("list", list); return mav; } }
EmpDto클래스 구현
package test.db; public class EmpDto { private int empno; private String ename; private int sal; private int deptno; public int getEmpno() { return empno; } public void setEmpno(int empno) { this.empno = empno; } public String getEname() { return ename; } public void setEname(String ename) { this.ename = ename; } public int getSal() { return sal; } public void setSal(int sal) { this.sal = sal; } public int getDeptno() { return deptno; } public void setDeptno(int deptno) { this.deptno = deptno; } }
emplist.jsp 구현
만약 jsp도 HTML5로 만들고싶으면
JSP Templates 를 클릭
Edit로 코드가져와 HTML5로 변경해서 복사해놓고..
New해서 ‘New JSP File (html5)’ 만들어..
<%@ page language="java" contentType="text/html; charset=${encoding}" pageEncoding="${encoding}"%> <!DOCTYPE html> <html> <head> <meta charset="${encoding}"> <title>Insert title here</title> </head> <body> ${cursor} </body> </html>
이제 emplist.jsp에 기능구현
<%@ 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> </head> <body> <table> <caption>사원리스트</caption> <tr> <th>사원번호</th> <th>이름</th> <th>급여</th> </tr> <c:forEach items="${list }" var="dto"> <tr> <td>${dto.empno }</td> <td>${dto.ename }</td> <td>${dto.sal }</td> </tr> </c:forEach> </table> </body> </html>
http://localhost/springweb3/emplist.do 로 실행..
안이쁘니까 css추가하자..
WebContent밑에 css폴더 만들고 board.css구현
@CHARSET "UTF-8"; body { font-family: "맑은 고딕"; /* 기본 글꼴 설정 */ font-size: 0.75em; /* 기본 글꼴 사이즈 설정 */ color: #333; /* 글꼴에 대한 색 지정 */ } table { border-collapse:collapse; /* border 사이의 간격 없앰 */ border-top: 2px solid #333; /* border 상단 두께 지정 */ border-bottom: 1px solid #333; /* border 하단 두께 지정 */ width:100%; /* 전체 테이블 길이 설정 */ } table th, td { /* 테이블의 th 와 td 마진과 패딩 지정 */ margin:0; padding:8px; } table th { background-color: #999; /* th 부분 배경 색상 지정 */ color: #FFF; /* 글꼴 색 지정 */ border-bottom-width: 2px; /* 하단 테두리 두께 지정 */ border-bottom-style: solid; /* 하단 테두리 스타일 지정 */ border-bottom-color: #000; /* 하단 테두리 색상 지정 */ font-size: 1.1em; /* th 글꼴 사이즈 재지정 */ } table td { border-bottom-width: 1px; /* td 테두리 하단 두께 조정 */ border-bottom-style: dotted; /* td 테두리 하단 스타일 지정 여기서는 점선으로 지정 */ border-bottom-color: #666; /* td 테두리 하단 색상 지정 */ }
emplist.jsp에 추가
<%@ 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> </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> </tr> </c:forEach> </table> </body> </html>
..
.
.
.
.
.
.
.
.
.
.
.