JSP 데이터 베이스 깔쌈 연동 총정리


1. Dynamic Web Project employ- DAO 프로젝트 생성 합니다

2. 뷰로 search ,search-result jsp 생성합니다

3. servers에 context.xml에 리소스 설정 부분 확인
    <Resource name="jdbc/myoracle" auth="Container"
              type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver"
              url="jdbc:oracle:thin:@localhost:1521:orcl"
              username="hr" password="1234" maxActive="20" maxIdle="10"
              maxWait="-1"/>
name은 프로그래머가 마음대로 설정해줄 수 있는 부분입니다.
auth는 권한;


 
<Resource name="jdbc/myoracle" //커넥션풀 이름을 지정
auth="Container" //커넥션풀 관리를 컨테이너에 맡긴다
type="javax.sql.DataSource"  //커넥션풀 타입
driverClassName="oracle.jdbc.OracleDriver" //드라이버 네임을 정해준다
url="jdbc:oracle:thin:@IP:1521:mysid" //URL입력 IP에는 오라클 서버의 IP , mysid에는 지정한 sid 기본은 orcl이다
username="scott" password="tiger" //오라클 계정의 ID와 pwd
maxActive="20" //커넥션 풀의 기본연결 갯수 설정
maxIdle="10" //일정시간동안 접속자가 없을경우의 갯수 설정
maxWait="-1"/>

JDBC 커넥션풀 사용하기



프로젝트의 web..xml 에 리소스 레퍼런스 등록
<resource-ref>
  <res-ref-name>jdbc/myoracle</res-ref-name>
  <res-type>javax.sql.DataSource</res-type>
  <res-auth>Container</res-auth>
 </resource-ref>

리스너 생성
example.emp.etc
EmpListener

lifecycle

필터 생성
KoreanFilter

 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

  request.setCharacterEncoding("euc-kr");
  chain.doFilter(request, response);
 }
web.xml에서 맵핑 url을 /* 로 하여 모든 서블릿이 사용 가능하게 함
저장하고 서버 다시 시작
메소드를 get에서 post로 변경해야 함!!!!!! 필터 써야 하니까!

또는
server.xml에 server에 service에 첫 http: connector에 add attribute 에서
URIEncoding
euc-kr
추가하면 get으로도 한글 확인 가능


리스너에 데이터 소스 생성
public void contextInitialized(ServletContextEvent arg0) {
        try {
   Context initContext = new InitialContext();// 자바의 기본적인 컨텍스트 찾음
   Context envContext = (Context)initContext.lookup("java:/comp/env");//어플리케이션에 환경에 대한 컨텍스트 찾음
   DataSource ds = (DataSource)envContext.lookup("jdbc/myoracle"); // 데이터 소스 객체 연결
   
   //ServletContext의 Attribute로 등록
   ServletContext sc = arg0.getServletContext(); // 이벤트에서 서블릿 context를 가져온다
   sc.setAttribute("dataSource", ds); // 등록
   System.out.println("################### DataSource Initiated ##########################");
   
   
   
  } catch (NamingException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
       
     
    }

서블릿 추가
example.emp.servlets
EmployeeSearchServlet
맵핑 이름 변경 /empSearch.do

서치 jsp 추가함
<%@ page language="java" contentType="text/html; charset=EUC-KR"
    pageEncoding="EUC-KR"%>
<!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=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<form action ="empSearch.do" method="get">
검색 이름을 입력하세요 : <input type="text" name="searchName" /><br/>
<input type="submit" value = "search" />

</form>
</body>
</html>




서블릿에 추가
 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  // TODO Auto-generated method stub
  String searchName = request.getParameter("searchName");
  request.setAttribute("result", searchName);
  
  RequestDispatcher view = request.getRequestDispatcher("search-result.jsp");
  view.forward(request, response);
  
 }
//이렇게 설정하면 따로 안만들어도 됌!ㅋㅋ
//doGet(request,response);

search- result.jsp에서 값 확인 속성값확인 추가

<%= request.getAttribute("result") %>






모델의 역활은 디비에 쿼리를 날리고 적절한 클래스로 값을 받는게 중요하다

//Data Base에 본격적으로 연결을 하자!

 

1. dataSource로 부터 connection을 받아온다.

2. connection 으로부터 Statement를 만든다.

3. Statement로 쿼리를 날린다.

  - select쿼리 같은 경우는 리턴이존재한다.(ResultSet 형식의 객체)

  - 따라서 ResultSet 타입의 변수로 받아줘야한다!

  - ResultSet 객체는 바로 주고 받을 수 없다.

  - 내가 원하는 타입으로 바꿔야한다. - mapping (객체화)

 

 

 

ResultSet은 줄줄이 사탕처럼 생겼다고 생각해라.

[]-[]-[]-[]-[]-[]-[]-[]

ResultSet은 next()를 통해 다음 자료가 있는지 확인한다.



package example.emp.model;

public class EmployeeDAO
public class Employee
생성


Employee 객체 선언 및 구현
자바빈즈를 사용하기 위해서 셋겟터 선언해 줌


package example.emp.model;

import java.sql.Date;

public class Employee {
 public int getEmployee_id() {
  return employee_id;
 }
 public void setEmployee_id(int employeeId) {
  employee_id = employeeId;
 }
 public String getFirst_name() {
  return first_name;
 }
 public void setFirst_name(String firstName) {
  first_name = firstName;
 }
 public String getLast_name() {
  return last_name;
 }
 public void setLast_name(String lastName) {
  last_name = lastName;
 }
 public String getEmail() {
  return email;
 }
 public void setEmail(String email) {
  this.email = email;
 }
 public String getPhone_number() {
  return phone_number;
 }
 public void setPhone_number(String phoneNumber) {
  phone_number = phoneNumber;
 }
 public Date getHire_date() {
  return hire_date;
 }
 public void setHire_date(Date hireDate) {
  hire_date = hireDate;
 }
 public String getJob_id() {
  return job_id;
 }
 public void setJob_id(String jobId) {
  job_id = jobId;
 }
 public double getSalary() {
  return salary;
 }
 public void setSalary(double salary) {
  this.salary = salary;
 }
 public double getCommission_pct() {
  return commission_pct;
 }
 public void setCommission_pct(double commissionPct) {
  commission_pct = commissionPct;
 }
 public String getManager_id() {
  return manager_id;
 }
 public void setManager_id(String managerId) {
  manager_id = managerId;
 }
 public String getDepartment_id() {
  return department_id;
 }
 public void setDepartment_id(String departmentId) {
  department_id = departmentId;
 }
 private int employee_id;
 private String first_name;
 private String last_name;
 private String email;
 private String phone_number;
 private Date hire_date;
 private String job_id;
 private double salary;
 private double commission_pct;
 private String manager_id;
 private String department_id;
 
 
}


employeeDAO 구현
package example.emp.model;

import java.sql.Connection;
import java.sql.Date;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import javax.sql.DataSource;

public class EmployeeDAO {
 public static void setDataSource(DataSource ds) {
  EmployeeDAO.dataSource = ds;
 }
 public ArrayList<Employee> findAll(){
  
  ArrayList<Employee> result  = new ArrayList<Employee>(); // employee instance save
  
  //리스너에 등록해 놓은 데이터 소스 (커넥션 풀을 가지고 있는)을 가져와야 함
  try {
   Connection conn = dataSource.getConnection(); //연결 커넥션 가져옴 , import java.sql.Connection; 예외처리
   Statement stmt = conn.createStatement(); // 컨넥션에서 구문객체가져와서 사용, import java.sql.Statement;
   //데이터베이스에서 컨넥션을 만들고 컨넥션으로 스테이트먼트 객체를 만들어서 sql을 사용한다
   ResultSet rs = stmt.executeQuery("SELECT * FROM EMPLOYEES"); // SELECT문은 결과가 리턴되기 때문에 row로 가져옴 executeQuery가 ResultSet를 리턴한다
   //데이터가 있는지 확인
   while(rs.next()){ //확인후 있으면 아래의 맵핑 작업을 함 , 이러한 맵핑을 쉽게 하는게 아이바티스나 스트럿츠로 ..
    Employee emp = new Employee();
    
    //필요한 것만 가져다가 쓸 수 있습니다
    int employee_id = rs.getInt("employee_id");// getInt는 컬럼 이름이나 인덱스
    String first_name = rs.getString("first_name");
    String last_name = rs.getString("last_name");
    String email = rs.getString("email");
    String phone_number = rs.getString("phone_number");
    Date hire_date= rs.getDate("hire_date");
    String job_id = rs.getString("job_id");
    double salary = rs.getDouble("salary");
    double commission_pct =rs.getDouble("Commission_pct");
    String manager_id = rs.getString("manager_id");
    String department_id =rs.getString("department_id");
    
    emp.setEmployee_id(employee_id);
    emp.setFirst_name(first_name);
    emp.setLast_name(last_name);
    emp.setEmail(email);
    emp.setPhone_number(phone_number);
    emp.setHire_date(hire_date);
    emp.setJob_id(job_id);
    emp.setSalary(salary);
    emp.setCommission_pct(commission_pct);
    emp.setManager_id(manager_id);
    emp.setDepartment_id(department_id);
    
    result.add(emp);
   }
   
  } catch (SQLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return result;
  
 }
 public ArrayList<Employee> findByName(String name){ //DB Row's infomation input space method
  
  return null;
  
 }
 
 //객체간의 값을 전달해줄 때 메소드 인자값으로~
 private static DataSource dataSource; //데이터소스(커넥션 풀은 )는 하나 이기 때문에 서블릿에서 바로 할당해주기만 하면 된다!!!!쵝오굳
 
 

 
 
 
}



employeeService 클래스 구현
DAO에 저장된 것들을 가져오고 서블릿으로 보내기 위한

package example.emp.model;

import java.util.ArrayList;

import javax.sql.DataSource;
// 이 클래스는 DAO와 서블릿 중간을 연결하는 클래스
public class EmployeeService {
 //값을 전달만 하기 때문에 모든 메소드를 static을 붙임
 //만약 접근하는 인스턴스가 많아지면  EmployeeService를 객체로 만들어서 사용해야 맞다
 //그 이유는 많이 searchAll을 요구하면 동기화 해야하고 그렇게 되면 인스턴스들이 사용하기 위해서는 딜레이 되기 때문에
 public ArrayList<Employee> searchAll(){
  
  return new EmployeeDAO().findAll();
 }
 public void setDataSource(DataSource ds){
  EmployeeDAO.setDataSource(ds);
 }
}


서블릿 변경
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

  // TODO Auto-generated method stub
  String searchName = request.getParameter("searchName");
  
  EmployeeService service  = new EmployeeService();
  service.setDataSource((DataSource)getServletContext().getAttribute("dataSource")); // 리스너에서 dataSource로 Context에 집어 넣어놨음
  ArrayList<Employee> result = service.searchAll();
  
  //request.setAttribute("result", searchName);
  request.setAttribute("result", result);
  RequestDispatcher view = request.getRequestDispatcher("search-result.jsp");
  view.forward(request, response);
  
 }

result.jsp 변경
<%@ page language="java" contentType="text/html; charset=EUC-KR"
 pageEncoding="EUC-KR"%>
<%@ page import="example.emp.model.*"%>
<%@ page import="java.util.ArrayList"%>
<!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=EUC-KR">
<title>Insert title here</title>
</head>
<body>
<%
 ArrayList<Employee> result = (ArrayList<Employee>) request.getAttribute("result");
 out.println(result.size());
%>
</body>
</html>

107 나오면 끝남



대충 구현한

'개발 Programming > JSP& SERVLET' 카테고리의 다른 글

useBean 사용하기 위한 규칙  (0) 2010.12.06
JSTL 설치 + Taglibs 사용  (0) 2009.08.14
DAO = DTO = VO  (0) 2009.08.12
JSP에서 자바 소스를 추방하자 + EL + JAVA bean  (0) 2009.08.12
jsp:useBean + jsp:getProperty  (0) 2009.08.11

댓글()