'DataSource'에 해당되는 글 1건

  1. 2009.08.16 스터디 08/15(JSP&Servlet Servlet기초1) by 대절님

//서블릿에서 구현하는 작업

클라이언트  -작업1-> Tomcat Container(Servlet) -작업2 -> DB
            <-작업3-
-1. 클라이언트의 요청을 얻는 작업(요청) : 클라이언트에서 넘어온 데이터를 얻는작업(로그인, 회원가입)
-2. 비지니스 처리 작업(비지니스 로직) : 데이터베이스 연동
-3. 클라이언트에게 결과값을 돌려주는 작업(응답) : 게시판의 목록보기등

/요청API : javax.servlet.http.HttpServletRequest
    -getHeader(), getSession(), getParameter(), getParameterNames(), getParameterValues()
    ,setRequestDispatcher(), setAttribute(), setCharacterEncoding()

/응답API : javax.servlet.http.HttpServletResponse
    -addCookie(), sendRedirect(), getWriter(), getOutputStream()

//서블릿의 요청과 응답
클라이언트  <-(Header, Body정보)-> Servlet
-Header정보 : 브라우저 정보, content정보, 인코딩 정보
-Body정보 : 실제 데이터

//서블릿의 응답 작업 처리
-서비스 메소드 안에서 작업(doGet(), doPost())
-javax.servlet.http.HttpServletResponse이용
-setContentType() 이용 MIME-Type지정
-서블릿과 브라우저간 통신은 자바I/O이용

/MIME-TYPE : 브라우저가 처리해야 하는 데이터 타입 지정
-html 로 출력 : text/html
-일반 텍스트 출력 : text/plain
-gif이미지 출력 : image/gif

/Tomcat컨테이너에 설정된 MIME-Type : conf폴더의 web.xml에 설정
 <mime-mapping> ~~~  </mime-mapping>

예제1)
-setContentType() 이용 content타입 지정, 자바I/O이용 스트림 생성, 생성된 스트림 이용html작성

public class HelloTestServlet extends HttpServlet{
  public void doGet(HttpServletRequest request, HttpServletResponse reponse){
    reponse.setContentType("text/html; charset=euc-kr");    <--MIME=type문법이 맞지 않을경우 download
    PrintWriter out = response.getWriter();
    out.print("<html>");
    out.print("<body>");
    out.print("hello world");
    out.print("</body>");
    out.print("</html>");
    out.close();
  }
}

/web.xml mapping
<web-app>
 <servlet>
  <servlet-name>aaa</servlet-name>
  <servlet-class>test.web.HelloTestServlet</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>aaa</servlet-name>
  <url-pattern>/hello</url-pattern>
 </servlet-mapping>
</web-app>

>javac -d . HelloTestServlet.java
톰캣 실행
-http://localhost:8090/webapp/hello

/예제2)Header정보 출력 실습
 Enumeration e = request.hetHeaderNames();
 while(e.hasMoreElements()){
  String name = (String)e.nextElement();
  out.println(name + " : " + request.getHeader(name) + "<p>");
 }

//데이터베이스 연동
-DAO(Data Access Object)
-TO(Transfer Object)
-javax.sql.DataSource (J2EE환경에서는 ConnectionPool을독립적으로 사용하지 않고 DataSource이용)
 JNDI이용, ConnectionPool기능 포함, DBMS에 독립적으로 데이터베이스 연동 가능

/JNDI(Java Naming and Directory Interface)
-J2EE환경에서 사용, 필요한 자원을 key/value쌍으로 저장후 나중에 key를 이용 value를 얻는 것
-대표적인 구현물이 DNS 서버(이름 물어보면 IP주소를 알려줌)

/DataSource 설정
-admin의 해당 context에서 설정
  Context(/webapp)
   DataSources 클릭 Create New DataSource
 JNDI Name : jdbc/Oracle9i(임의로 대소문자 구별)
 Data Source URL : jdbc:oracle:thin:@localhost:1521:orcl
 JDBC Driver Class : oracle.jdbc.driver.OracleDriver
 User Name : scott
 Password : *****
-데이터베이스를 연동하기 위한 4가지 정보와 DataSource자원을 얻기위한 JNDI이름을 정의
 Driver, Username, pwd, JNDI이름
-자바소스에서는 InitialContext객체의 lookup()을 이용 DataSouce을 얻을수 있다.
-lookup() 인자값은 반드시 "java:comp/env/JNDI명" 으로 설정

/예제) 회원정보 보기
클라이언트 <-> MemberServlet <-> MemberDAO <-> Oracle

-MemberDAO : DataSource얻기, initialcontext의 lookup()이용
public class MemberDAO{
  private DataSource dataFactory;
  public MemberDAO(){
    Context ctx = new initialContext();
    dataFactory = (DataSource)ctx.lookup("java:comp/env/jdbc/Oracle9i");
  }
  public ArrayList list(){
    ArrayList list = new ArrayList();
    Connection con = dataFactory.getConnection();
    Statement stmt = con.createStatement();
    String query = "SELECT * FROM member";
    ResultSet rs = stmt.executeQuery(query);
    While(rs.next()){
      String name = rs.getString("name");
      String height = rs.getString("height");
      String weight = rs.getString("weight");
      int age = rs.getInt("age");
      String sex = rs.getString("sex);
      MemberTO data = new MemberTO(name, height, weight, age, sex);
      list.add(data);     
    }
    return list;
  }
}

-MemberTO
public classMemberTO implements Serializable{
  String name, height, weight, sex;
  int age;
  setter(), getter()
}

-MemberServlet : MemberDAO와 연동
public void doGet(HttpServletRequest request, HttpServletResponse reponse){
  response.setContentType("text/html; charset=euc-kr");
  PrintWriter out = response.getWriter();
  MemberDAO dao = new MemberDAO();
  ArrayList list = dao.list();
  out.print("<html><body>");
  out.print("<table border=1><tr>");
  out.print("<td>이름</td><td>키</td><td>체중</td><td>나이</td><td>성별</td></tr>");
  for(int i = 0 ; i < list.size(); i++){
    MemberTO data = (MemberTO)list.get(i);
    String name = data.getName();
    String height = data.getHeight();
    String weight = data.getWeight();
    int age = data.getAge();
    String sex = data.getSex();
    out.print("<tr><td>"+name+"</td><td>"+height+"</td><td>"+weight+"</td><td>"+age+"</td><td>"+sex+"</td></tr>");
    out.print("</body></html>");
  }
}

저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by 대절님

댓글을 달아 주세요



티스토리 툴바