Woopii Vyeolog

간단한 성적 처리 웹 페이지 생성하기3 (Service 구현) 본문

Spring Framework

간단한 성적 처리 웹 페이지 생성하기3 (Service 구현)

WooPii 2020. 3. 16. 23:11

github : https://github.com/leewoopyo/exam/tree/exam_v3

 

MVC 모델(해당 글에서는 이전 것에 추가해 Service를 구현할 것임)

 

 

 

Service는 MVC모델에서 비지니스적 로직을 처리하는 영역이다.

 

복잡한 업무 처리 등을 행함

 

(해당 프로젝트에선 딱히 업무 처리는 없고 단순 CRUD만 있음)

 

성적 처리 페이지에서 Service 영역 구현

앞에서 만든 성적관리 웹 페이지에서 MVC모델에서 추가로 Service영역을 구현해 놓은 버전이다. 

(앞에서 만든 성적관리 웹 페이지 : https://woopi1087.tistory.com/23)

 

 

● Service영역

1. ServiceIO(DTO)(ExamSIO.java)

 

컨트롤러(controller)와 데이터 교환하기 위한 클래스이다. 

 

<ExamSIO.java>

package kopo.dto;

public class ExamSIO {
	
	//다룰 데이터 선언
	private String name;	//이름
	private int studentid;	//학번
	private int kor;		//국어
	private int eng;		//영어
	private int mat;		//수학
	
	//constructor 선언 빈 생성자와 데이터가 같이 들어있는 생성자를 같이 만들어 준다.
	public ExamSIO() {
		super();
	}
	public ExamSIO(String name, int studentid, int kor, int eng, int mat) {
		super();
		this.name = name;
		this.studentid = studentid;
		this.kor = kor;
		this.eng = eng;
		this.mat = mat;
	}
	
	//getter, setter 메소드 생성 : 데이터를 불러오고 적용할 때 사용한다. 
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getStudentid() {
		return studentid;
	}
	public void setStudentid(int studentid) {
		this.studentid = studentid;
	}
	public int getKor() {
		return kor;
	}
	public void setKor(int kor) {
		this.kor = kor;
	}
	public int getEng() {
		return eng;
	}
	public void setEng(int eng) {
		this.eng = eng;
	}
	public int getMat() {
		return mat;
	}
	public void setMat(int mat) {
		this.mat = mat;
	}

}

 

2. Service(DTO)(ExamService.java)

 

서비스 영역의 메소드 이름을 정의한 인터페이스 부분이다. (틀만 선언한다.)

 

(인터페이스로 이름을 정의하는 이유는 만약, 한 화면에 모든 메소드가 다 들어가면 어떤 것이 어떤 기능을 가지고 있는지 확인이 어렵기 때문)

 

<ExamService.java>

package kopo.service;

import java.util.List;

import kopo.dto.ExamSIO;

public interface ExamService {
	
	void createDB();	//테이블 생성
	void dropDB();		//테이블 삭제
	
	void allsetDB();	//데이터 삽입
	
	//read
	ExamSIO selectOne(int studentid);		//해당 학번 하나 출력
	List<ExamSIO> selectAll(); 		//전체 출력
	List<ExamSIO> selectAllByName(String name);//이름 기반 출력
	
	//update
	int insert (ExamSIO examSIO);	//DB정보를 토대로 데이터 삽입
	int update (int studentid, ExamSIO examSIO);	//해당 매개변수 해당 데이터 업데이트
	int update (ExamSIO examSIO);	//전체 업데이트 
	
	//delete
	int delete(int studentid);	//학번 기반 데이터 삭제 
	int delete(ExamSIO examSIO);	//매개변수 기반 데이터 삭제
}

 

2. Service(DTO)(ExamServiceImpl.java)

 

인터페이스에서 상속받아서 해당 이름으로 구체적인 기능을 정의 함(Override)

 

<ExamServiceImpl.java>

 

package kopo.service;

import java.util.ArrayList;
import java.util.List;

import kopo.dao.ExamRepo;
import kopo.domain.ExamRIO;
import kopo.dto.ExamSIO;

public class ExamServiceImpl implements ExamService {

	@Override
	public void createDB() {
		ExamRepo.createDB();	//ExamRepo클래스의 createDB메소드를 실행함(테이블 생성)
	}

	@Override
	public void dropDB() {
		ExamRepo.dropDB();		//ExamRepo클래스의 dropDB메소드를 실행함(테이블 삭제)
	}
	@Override
	public void allsetDB() {
		//ExamRepo클래스의 insert 메소드를 실행 한다.
		//매개변수는 ExamRIO형의 데이터로 DB에 들어갈 데이터들이다.
		ExamRepo.insert(new ExamRIO("학생1",209901,95,100,95));
		ExamRepo.insert(new ExamRIO("학생2",209902,90,90,100));
		ExamRepo.insert(new ExamRIO("학생3",209903,85,80,95));
		ExamRepo.insert(new ExamRIO("학생4",209904,75,100,85));
		ExamRepo.insert(new ExamRIO("학생5",209905,85,70,75));
		ExamRepo.insert(new ExamRIO("학생6",209906,95,80,95));
		ExamRepo.insert(new ExamRIO("학생7",209907,85,100,85));
		ExamRepo.insert(new ExamRIO("학생8",209908,75,90,65));
		ExamRepo.insert(new ExamRIO("학생9",209909,85,80,95));
	}
	@Override
	public ExamSIO selectOne(int studentid) {
		//학번을 매개변수로 나온 select 결과를 examRIO형으로 리턴해서 받고,
		ExamRIO exam = ExamRepo.getRecordById(studentid);
		//담은 데이터를 다시 ExamSIO에 담는다.
		return new ExamSIO(exam.getName(), exam.getStudentid(), exam.getKor(), exam.getEng(), exam.getMat());
	}
	@Override
	public List<ExamSIO> selectAll() {
		//ExamRepo클래스의 getAllrecords(전체 출력)메소드를 통해 list에 데이터가 전부 담긴다.
		List<ExamRIO> exams = ExamRepo.getAllrecords();
		//genelic이 ExamSIO인 list를 하나 선언한다 .
		List<ExamSIO> examScores = new ArrayList<ExamSIO>();
		//foreach문은 써서 list갯수 만큼 반복하면서 exams에 담겼던 모든 데이터들을 다시 ExamSIO객체를 생성해서 거기에 담아 examScores 리스트에 담는다.
		for(ExamRIO exam : exams) {
			examScores.add(new ExamSIO(exam.getName(),exam.getStudentid(),exam.getKor(),exam.getEng(),exam.getMat()));
		}
		//리스트를 리턴한다.
		return examScores;
	}
	@Override
	public int insert(ExamSIO examSIO) {
		//ExamSIO형의 데이터를 매개변수로 하여 데이터를 삽입한다.
		return ExamRepo.insert(new ExamRIO(examSIO.getName(),examSIO.getStudentid(),examSIO.getKor(),examSIO.getEng(),examSIO.getMat()));
	}
	@Override
	public List<ExamSIO> selectAllByName(String name) {
		// TODO Auto-generated method stub
		return null;
	}


	@Override
	public int update(int studentid, ExamSIO examSIO) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int update(ExamSIO examSIO) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int delete(int studentid) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public int delete(ExamSIO examSIO) {
		// TODO Auto-generated method stub
		return 0;
	}
}

 

 

● Repository영역

1. ReporitoryIO(domain)(ExamRIO.java)

 

실제 DB에서 다루는 데이터를 구현해 놓은 클래스이다. 

 

<ExamRIO.java>

 

package kopo.domain;

public class ExamRIO {
	
	//다룰 데이터 선언
	private String name;	//이름
	private int studentid;	//학번
	private int kor;		//국어점수
	private int eng;		//영어점수 
	private int mat;		//수학점수
	
	//constructor 선언 빈 생성자와 데이터가 같이 들어있는 생성자를 같이 만들어 준다.
	public ExamRIO() {
		super();
	}
	public ExamRIO(String name, int studentid, int kor, int eng, int mat) {
		super();
		this.name = name;
		this.studentid = studentid;
		this.kor = kor;
		this.eng = eng;
		this.mat = mat;
	}
	
	//getter, setter 메소드 생성 : 데이터를 불러오고 적용할 때 사용한다. 
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getStudentid() {
		return studentid;
	}
	public void setStudentid(int studentid) {
		this.studentid = studentid;
	}
	public int getKor() {
		return kor;
	}
	public void setKor(int kor) {
		this.kor = kor;
	}
	public int getEng() {
		return eng;
	}
	public void setEng(int eng) {
		this.eng = eng;
	}
	public int getMat() {
		return mat;
	}
	public void setMat(int mat) {
		this.mat = mat;
	}
	
}

2. Reporitory(DAO)(ExamRepo.java)

 

DB와 직접 연결해서 CRUD 하는 클래스

 

<ExamRepo.java>

package kopo.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

import kopo.domain.ExamRIO;

public class ExamRepo {
	
	
	/**
	 * DB연결하는 메소드(따로 연결하는 메소드를 만들어서 연결시마다 해당 메소드를 불러오게 한다. 
	 * return : 커넥션 객체
	 */
	public static Connection getConnection() {
		Connection conn = null;
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");			
		}catch(Exception e) {
			e.printStackTrace();
		}
		try {
			conn = DriverManager.getConnection("jdbc:mysql://192.168.56.1/kopo", "kopo15", "Qwer1234!!");	
		}catch(Exception e) {
			e.printStackTrace();
		}
		return conn;
	}
	
	/**
	 * DB데이블을 생성하는 메소드
	 * @return int형인 status를 반환한다.
	 */
	public static int createDB() {
		String sql = null;
		int status = 0;
		try {
			//sql구문을 담고
			sql = "create table examtable(" +
					"name varchar(20)," +
					"studentid int not null primary key," +
					"kor int," + "eng int," +
					"mat int)" +
					"DEFAULT CHARSET=utf8;";
			//커넥션 객체 생성
			Connection conn = getConnection();
			//statement객체를 만들고
			Statement stmt = conn.createStatement();
			//위 sql문을 statement에 담는다.
			stmt.executeUpdate(sql);
			
			//작업이 완료되면 열었던 객체를 닫는다.
			stmt.close();
			conn.close();
		}catch(Exception e) {
			System.out.println(e);
		}
		return status;
	}
	
	/**
	 * DB데이블을 삭제하는 메소드
	 * @return int형인 status를 반환한다.
	 */
	public static int dropDB() {
		String sql = null;
		int status = 0;
		try {
			//sql구문을 담고
			sql = "drop table examtable";
			//커넥션 객체 생성
			Connection conn = getConnection();
			//statement객체를 만들고
			Statement stmt = conn.createStatement();
			//statement에 sql문은 담는다.
			stmt.executeUpdate(sql);
			
			//작업이 완료되면 열었던 객체를 닫는다.
			stmt.close();
			conn.close();
		}catch(Exception e) {
			System.out.println(e);
		}
		return status;
	}
	
	/**
	 * 데이터를 insert하는 메소드
	 * @param u : ExanRIO형의 데이터(DB에 삽입된 데이터) 
	 * @return int형인 status를 반환한다.
	 */
	public static int insert(ExamRIO u) {
		String sql = null;
		int status = 0;
		try {
			//sql구문을 담고
			sql = "insert into examtable(name,studentid,kor,eng,mat) values (?,?,?,?,?);";
			//커넥션 객체 생성
			Connection conn = getConnection();
			//해당 sql문을 statement에 담고
			PreparedStatement pstmt = conn.prepareStatement(sql);
			
			//sql문에 적용할 값들을 받은 매개변수로 변경한다.
			//ExamRIO 형의 데이터를 가져오기 때문에 개별 데이터를 가져오기 위해서는 get...로 개별 데이터를 가져온다.
			pstmt.setString(1,u.getName());			
			pstmt.setInt(2,u.getStudentid());			
			pstmt.setInt(3,u.getKor());			
			pstmt.setInt(4,u.getEng());			
			pstmt.setInt(5,u.getMat());			
			
			//statement를 실행한다. 그 값을 status에 넣는다.
			status = pstmt.executeUpdate();
			//작업이 완료되면 열었던 객체를 닫는다.
			pstmt.close();
			conn.close();
		}catch(Exception e) {
			System.out.println(e);
		}
		return status;
	}
	
	/**
	 * 데이터를 update 하는 메소드
	 * @param u : ExanRIO형의 데이터(DB에 삽입된 데이터) 
	 * @return int형인 status를 반환한다.
	 */
	public static int update(ExamRIO u) {
		String sql = null;
		int status = 0;
		try {
			//sql구문을 담고
			sql = "update examtable set name = ?,studentid = ?, kor = ?, eng = ?, mat = ? where studentid = ?;";
			//커넥션 객체 생성
			Connection conn = getConnection();
			//해당 sql문을 statement에 담고
			PreparedStatement pstmt = conn.prepareStatement(sql);
			
			//sql문에 적용할 값들을 받은 매개변수로 변경한다.
			//ExamRIO 형의 데이터를 가져오기 때문에 개별 데이터를 가져오기 위해서는 get...로 개별 데이터를 가져온다.
			pstmt.setString(1,u.getName());			
			pstmt.setInt(2,u.getStudentid());			
			pstmt.setInt(3,u.getKor());			
			pstmt.setInt(4,u.getEng());			
			pstmt.setInt(5,u.getMat());			
			pstmt.setInt(6,u.getStudentid());
			
			//statement를 실행한다. 그 값을 status에 넣는다.
			status = pstmt.executeUpdate();
			//작업이 완료되면 열었던 객체를 닫는다.
			pstmt.close();
			conn.close();
		}catch(Exception e) {
			System.out.println(e);
		}
		return status;
	}
	
	/**
	 * 데이터를 delete 하는 메소드
	 * @param u : ExanRIO형의 데이터(DB에 삽입된 데이터) 
	 * @return int형인 status를 반환한다.
	 */
	public static int delete(ExamRIO u) {
		String sql = null;
		int status = 0;
		try {
			//sql구문을 담고
			sql = "dalete from examtable where studentid = ?;";
			//커넥션 객체 생성
			Connection conn = getConnection();
			//해당 sql문을 statement에 담고
			PreparedStatement pstmt = conn.prepareStatement(sql);
		
			//sql문에 적용할 값들을 받은 매개변수로 변경한다.
			//ExamRIO 형의 데이터를 가져오기 때문에 개별 데이터를 가져오기 위해서는 get...로 개별 데이터를 가져온다.
			pstmt.setInt(1,u.getStudentid());			
			//statement를 실행한다.
			status = pstmt.executeUpdate();
			//작업이 완료되면 열었던 객체를 닫는다.
			pstmt.close();
			conn.close();
		}catch(Exception e) {
			System.out.println(e);
		}
		return status;
	}
	
	/**
	 * 전체 데이터를 출력하는 메소드 
	 * @return 전체 데이터가 담김 메소드를 리턴한다.
	 */
	public static List<ExamRIO> getAllrecords() {
		List<ExamRIO> list = new ArrayList<ExamRIO>();
		String sql = null;
		try {
			//sql구문을 담고
			sql = "select * from examtable;";
			//커넥션 객체 생성
			Connection conn = getConnection();
			//해당 sql문을 statement에 담고
			PreparedStatement pstmt = conn.prepareStatement(sql);
			//resultset(여러개의 레코드를 담을 수 있음) 객체 선언해서 statement 결과를 담는다 
			ResultSet rset = pstmt.executeQuery();
			
			//반목문으로 하나씩 출력
			while(rset.next()) {
				ExamRIO u  = new ExamRIO(); //ExamRIO 객체 생성
				u.setName(rset.getString("name"));   //해당 name값을  ExamRIO에 넣는다.
				u.setStudentid(rset.getInt("studentid"));   //해당 studentid값을  ExamRIO에 넣는다.
				u.setKor(rset.getInt("kor"));//해당 kor값을  ExamRIO에 넣는다.
				u.setEng(rset.getInt("eng"));//해당 eng값을  ExamRIO에 넣는다.
				u.setMat(rset.getInt("mat"));//해당 mat값을  ExamRIO에 넣는다.
				list.add(u);		//list에 추가 한다.
			}
			
			//작업이 완료되면 열었던 객체를 닫는다.
			rset.close();
			pstmt.close();
			conn.close();
		}catch(Exception e) {
			System.out.println(e);
		}
		return list;
	}
	
	/**
	 * 해당 학번을 가진 학생만 출력한다.
	 * @param id : 학번(studentid)
	 * @return ExamRIO 형의 데이터
	 */
	public static ExamRIO getRecordById(int studentid) {
		ExamRIO u = new ExamRIO();
		String sql = null;
		try {
			//sql구문을 담고
			sql = "select * from examtable where studentid = ?;";
			//커넥션 객체 생성
			Connection conn = getConnection();
			//해당 sql문을 statement에 담고
			PreparedStatement pstmt = conn.prepareStatement(sql);
			//해당 sql문에 적용할 데이터를 세팅한다.
			pstmt.setInt(1, studentid);
			//resultset(여러개의 레코드를 담을 수 있음) 객체 선언해서 statement 결과를 담는다 
			ResultSet rset = pstmt.executeQuery();
			//반목문으로 하나씩 출력
			while(rset.next()) {
				u.setName(rset.getString("name"));
				u.setStudentid(rset.getInt("studentid"));
				u.setKor(rset.getInt("kor"));
				u.setEng(rset.getInt("eng"));
				u.setMat(rset.getInt("mat"));
			}
			//작업이 완료되면 열었던 객체를 닫는다.
			rset.close();
			pstmt.close();
			conn.close();
		}catch(Exception e) {
			System.out.println(e);
		}
		return u;
	}
	
}

 

● View영역

1. 메인 화면 (index.html)

 

프레임으로 2 화면으로 나누어 표시

메뉴화면과 실제 내용이 나오는 화면으로 구성 

 

<index.html>

<!DOCTYPE html>
<html>
<head>
<title>Insert title here</title>
<!-- 프레임으로 화면을 2개로 나눔 -->
<frameset cols="130,*" border="0" frameborder="1">
	<!-- 메뉴가 나오는 부분 -->
	<frame src="menu.html">
	<!-- 실제 내용이 나오는 부분 name을 main으로 해줘서 메뉴와 연동되게 할 것이다. -->
	<frame src="#" name="main">
</frameset>
</head>
<body>
</body>
</html>

2. 메뉴화면 (menu.html)

 

테이블 생성, 삭제, 데이터 조회로 이동하는 메뉴페이지

 

<menu.html>

<!DOCTYPE html>
<html>
<head>
<meta charset="EUC-KR">
<title>Insert title here</title>
</head>
<body>
    <!-- a태그로 각 기능을 가진 페이지에 링크를 만들고  -->
    <!-- target으로 화면에 출력할 곳을 설정한다. 타겟이 main이라서 main이란 이름의 프레임에 출력될것이다. -->
    <a href="createDB.jsp" target="main">테이블 생성</a><br>
    <a href="dropDB.jsp" target="main">테이블 삭제</a><br>
    <a href="allsetDB.jsp" target="main">데이터 생성</a><br>
    <a href="allviewDB.jsp" target="main">전체 데이터</a><br>
</body>
</html>

3. 테이블 생성 페이지(createDB.jsp)

 

DB 테이블을 생성하는 기능을 가진 페이지다.

 

<createDB.jsp>

<%@page import="kopo.service.ExamServiceImpl"%>
<%@page import="kopo.service.ExamService"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page import="java.sql.*, javax.sql.*, java.io.*"%>
<%@ page import="kopo.dao.*,kopo.domain.*" %>

<html>
<head>
<title>Insert title here</title>
</head>
<body>
<h3>테이블 생성</h3>

<%
//ExamServiceImpl객체 생성한다. 해당 객체는 ExamService형으로 담음
ExamService examService = new ExamServiceImpl();
//테이블 생성 메소드를 불러옴
examService.createDB();
%>

</body>
</html>

4. 테이블 삭제 페이지(dropDB.jsp)

 

DB 테이블을 삭제하는 기능을 가진 페이지다.

 

<dropDB.jsp>

<%@page import="kopo.service.ExamServiceImpl"%>
<%@page import="kopo.service.ExamService"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page import="java.sql.*, javax.sql.*, java.io.*"%>
<%@ page import="kopo.dao.*,kopo.domain.*" %>

<html>
<head>
<title>Insert title here</title>
</head>
<body>
<h3>테이블 삭제</h3>

<%
//ExamServiceImpl객체 생성한다. 해당 객체는 ExamService형으로 담음
ExamService examService = new ExamServiceImpl();
//테이블 생성 메소드를 불러옴
examService.dropDB();
%>

</body>
</html>

5. 데이터 삽입 페이지(allsetDB.jsp)

 

학생1~학생9까지의 성적데이터를 DB에 넣는 기능을 가진 페이지이다.

 

<allsetDB.jsp>

<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page import="java.sql.*, javax.sql.*, java.io.*"%>
<%@ page import="kopo.dao.*,kopo.domain.*,kopo.dto.*,kopo.service.*" %>
<html>
<head>
<title>데이터 insert</title>
</head>
<body>
<h3>데이터 insert</h3>
<hr>
<%
	//ExamServiceImpl객체 생성한다. 해당 객체는 ExamService형으로 담음
	ExamService examService = new ExamServiceImpl(); 
	//해당 객체에 있는 allsetDB메소드를 실행한다.(데이터 삽입)
	examService.allsetDB();
%>
</body>
</html>

6. 데이터 전체 조회 페이지(allviewDB.jsp)

 

전체 성적 데이터 조회

 

<allviewDB.jsp>

<%@page import="kopo.dto.ExamSIO"%>
<%@page import="kopo.service.ExamServiceImpl"%>
<%@page import="kopo.service.ExamService"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page import="java.sql.*, javax.sql.*, java.io.*, java.util.*, java.net.*"%>
<%@ page import="kopo.dao.*,kopo.domain.*" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>	<!-- jstl 사용을 위한 임포트  -->
<html>
<head>
<title>전체 데이터</title>
</head>
<body>

<h3>전체 데이터</h3>
<hr>
<%
try{
	//ExamServiceImpl객체 생성한다. 해당 객체는 ExamService형으로 담음
	ExamService examService = new ExamServiceImpl();
	//genelic이 examSIO인 list에 selectAll메소드를 통해 전체 데이터를 담는다.
	List<ExamSIO> exams = examService.selectAll();
%>
<!-- 테이블 작성 -->
<table cellspacing=1 width=600 border=1>
	<tr>
		<td width=50><p align=center>이름</p></td>
		<td width=50><p align=center>학번</p></td>
		<td width=50><p align=center>국어</p></td>
		<td width=50><p align=center>영어</p></td>
		<td width=50><p align=center>수학</p></td>		
	</tr>
<%
//실제 list에 담기 내용이 나오는 부분이다. 반복문은 통해 ExamSIO형으로 한줄씩 출력한다.
//size로 전체 데이터 갯수만큼 반복하고, getter메소드를 이용해서 ExamSIO형에 담긴 데이터를 불러온다.
//tr과 td를 반복문 안에 넣어서 해당 테이블 요소도 반복될 수 있게 한다. 
	for(int i=0; i<exams.size();i++){%>
		<tr>
			<td width=50><p align=center>
			<a href="oneviewDB.jsp?studentid=<%=Integer.toString(exams.get(i).getStudentid()) %>">
			<%=exams.get(i).getName() %></a></p></td>
			<td width=50><p align=center>
			<a href="oneviewDB.jsp?studentid=<%=Integer.toString(exams.get(i).getStudentid()) %>">
			<%=Integer.toString(exams.get(i).getStudentid())%></a></p></td>
			<td width=50><p align=center><%=Integer.toString(exams.get(i).getKor())%></p></td>
			<td width=50><p align=center><%=Integer.toString(exams.get(i).getEng())%></p></td>
			<td width=50><p align=center><%=Integer.toString(exams.get(i).getMat())%></p></td>
		</tr>
	<%}
//예외처리
}catch(Exception e){ 
	out.print("테이블 생성 에러 발생" + e);
} 
%>
</table>

</body>
</html>

7.  특정 데이터 조회 페이지(oneviewDB.jsp)

 

전체 성적 데이터 조회

 

<oneviewDB.jsp>

<%@page import="kopo.dto.ExamSIO"%>
<%@page import="kopo.service.ExamServiceImpl"%>
<%@page import="kopo.service.ExamService"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%@ page import="java.sql.*, javax.sql.*, java.io.*, java.util.*, java.net.*"%>
<%@ page import="kopo.dao.*,kopo.domain.*" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>	<!-- jstl 사용을 위한 임포트  -->

<html>
<head>
<title>Insert title here</title>
</head>
<body>
<h3>조회</h3>
<hr>
<%
//AllviewDB에서 넘겨준 파라메터 값을 받고 studentid 변수에 담는다 .
int studentid = Integer.parseInt(request.getParameter("studentid"));
try{
	//ExamServiceImpl객체 생성한다. 해당 객체는 ExamService형으로 담음
	ExamService examService = new ExamServiceImpl();
	//위 객체에서 정의된 selectOne메소드에 의해서 매개변수로 넣는 학번을 조건으로 데이터를 조회해서
	//메소드의 return형에서 정의한 대로 ExamSIO형의 변수에 집어 넣는다.(getter메소드로 꺼낼 수 있다.)
	ExamSIO exam = examService.selectOne(studentid);
%>
<!-- 테이블 생성  -->
	<table cellspacing=1 width=600 border=1>
	<tr>
		<td width=50><p align=center>이름</p></td>
		<td width=50><p align=center>학번</p></td>
		<td width=50><p align=center>국어</p></td>
		<td width=50><p align=center>영어</p></td>
		<td width=50><p align=center>수학</p></td>
	</tr>	
<!-- examSIO에 있는 getter메소드를 통해서 exam변수에 저장된 값을 가져온다. -->
	<tr>
		<td width=50><p align=center><%=exam.getName() %></p></td>
		<td width=50><p align=center><%=exam.getStudentid() %></p></td>
		<td width=50><p align=center><%=exam.getKor() %></p></td>
		<td width=50><p align=center><%=exam.getEng() %></p></td>
		<td width=50><p align=center><%=exam.getMat() %></p></td>
	</tr>	
	</table>
<%	
//예외처리
}catch(Exception e){
	out.print("oneview중 에러발생" + e);
}
%>
</body>
</html>

 

실행 결과

 

Comments