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()를 통해 다음 자료가 있는지 확인한다.
[출처] //Data Base에 본격적으로 연결을 하자!|작성자 주현
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 |