Java, Spring/17일

17일차 4

Caprica Six 2012. 9. 20. 09:48

 

게시판 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>

 

 

..

.

.

.

.

.

.

.

.

.

.

 

.