ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 210514_1(연동프로그램)
    HTML_JS(Sol)/JSP(sol) 2021. 5. 14. 14:15

    프로그램시 연동 드라이버의 위치

    \WEB-INF\lib\mysql-connector-java-5.1.49-bin.jar가 되도록 붙여넣는다


    이클립스에서 프로젝트구조

    /프로젝/src  <=== java 소스파일을 생성한다. 당연히 패키지,클래스 구조를 하고 있어야 한다.

    /프로젝/WebContent <=== jsp,html, css, js등의 웹문서를 생성하는 곳 하위폴더/웹문서 구성 가능

    /프로젝/WebContent/WEB_INF <===환경파일이 들어간다. 기본적으로 이곳에 웹문서를 만들면 인식하지 못한다

    /프로젝/WebContent/WEB_INF/web.xml <== 배치기술자 웹어플 내부의 자원을 어떻게 호출해서 사용하는지

                                                                    매핑하고, 전역 환경변수를 설정한다.

                                                                    가장 중요한 역할 : 서블릿 매핑이다.

                                                                   @annotation이 나옴으로 역할이 줄어듦.

                                                       ex) application.getInitParameter("키")  식으로 호출한다.<== 어플환경변수

    /프로젝/WebContent/WEB_INF/lib <=== 는 주로 확장자 jar인 라이브러리를 넣는다.

                                                ex)프로젝\WebContent\WEB-INF\lib\mysql-connector-java-5.1.49-bin.jar

    /프로젝/WebContent/WEB_INF/classes <=== 컴파일된 class 파일이 패/클 형태로 자동 저장된다.배포시자동생성

    /프로젝/WebContent/META-INF <=== 응용프로그램에서 배포시 실행할 대표 클래스등등 마킹하는 문서.

                                                        웹프로그램에서는 거리가 멀다.

                                                        ex)/프로젝/WebContent/META-INF/MANIFEST.MF


    package chapter8;
    
    import java.sql.*;
    
    import java.sql.DriverManager;
    
    public class DriverTest {
    	public static void main(String[] args) {
    
    		Connection con;
    		//연동정보 담는객체
    
    		try {
    			Class.forName("org.gjt.mm.mysql.Driver").newInstance();
    			//동적으로 클래스를 로딩하세요
    			con = DriverManager.getConnection("jdbc:mysql://localhost:3306/"
               +"jspdb?useUnicode=true&characterEncoding=euckr", "jspuser", "1234");
    			
    			System.out.println("디비 접속 성공");
    		} catch (SQLException ex) {
    			System.out.println("SQLException :" + ex);
    		}
    
    		catch (Exception ex) {
    			System.out.println("Exception :" + ex);
    		}
    	}
    }
    

     


    #실행방법은 BD연결하고 블럭잡아서 alt+x
    Create Table member(
    id varchar(20) not null,
    passwd varchar(20) null,
    name varchar(20) null,
    mem_num1 varchar(6) null,
    mem_num2 varchar(7) null,
    e_mail varchar(30) null,
    phone varchar(30) null,
    zipcode varchar(7) null,
    address varchar(60) null,
    job varchar(30) null,
    primary key (id)
    ) engine=innodb default charset=euckr;
    
    insert into member (id,passwd, name) values('LoverBoy', '1234', '홍길동');
    insert into member (id,passwd, name) values('LuckyBoy', '1234', '일지매');
    
    select * from member;

     

    1) jsp에 모든내용

    Connection con; db서버와 연동정보를 담는 객체

    Statement stmt; 쿼리를 작성하고 실행할수있는 객체

    ResultSet rs; select문에서 쿼리를 실행하고 결과를 처리하는 객체

    Class.ForName("팩.클"); 동적으로 드라이버를 로딩하시오. 실행할때 로딩하라./ 컴파일시에는 없어도된다.

     

    db서버와연결하라
      conn = DriverManager.getConnection

    ("jdbc:mysql://localhost:3306/디비명?useUnicode=true&characterEncoding=EUCKR","계정","암호");
         

    update, insert, delete ===> excuteUpdate() ===> 결과는 int 로 받는다.

    select ===> excuteQuery() ===> 결과는 ResultSet으로 받는다.

     

    rs 참이면 실행결과가 존재한다.

    rs.next(); 결과 행으로 이동한다. 그래야 컬럼값을 읽을수 있다.

    rs.get데이타형(컬럼명) : <===권장

    rs.get데이타형(인덱스) :  <===어쩔수없을때사용 : 컬럼명 자리에 함수가 올때

           select 컬럼1,컬럼2 ,,,(now(), count())

    자원반납: 생성순서의 역순으로 닫는다. 확인 후 닫는것이 중요함

    rs.close();      if(rs!=null) rs.close();

    stmt.close();

    con.close();

    <%@ page language="java" contentType="text/html; charset=EUC-KR"
        pageEncoding="EUC-KR" import="java.sql.*"%>
        
        <%-- 주석
        import="java.sql.*"
        자바에서 데이터베이스 관련 라이브러리를 포함하고 있는 부분이 java.sql 패키지에 존재함
        관련 패키지를 임포트해서 라이브러리를 사용하기 위한 임포트구문,
        데이터베이스 관련 프로그램시 반드시 임포트해야함.
         --%>
         <%
         //JDBC 드라이버 로딩//
         //org.gjt.mm.mysql.Driver : 는 MySQL을 사용하기 위한 드라이버 로딩
         
         Class.forName("org.gjt.mm.mysql.Driver");
         /*
         오라클의 경우
         classes12.zip 이란 형태로 드라이버가 제공됨.
         Class.forName("oracle.jdbx.driver.OracleDriver");
         
         ODBC 브리지경우
         Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
         */
         
         //드라이버로딩 후 커넥션을 위한 커넥션 객체생성
         //전역변수가 아니고 지역변수이기때문에 반드시 초기화를 해준다.
         Connection conn = null;
         
         //커넥션이 생성이 된 후 질의를 던지기 위한 객체생성
         Statement stmt = null;
         
         //질의를 수행한 후의 레코드를 받을 객체 생성
         //조회 질의의 경우 레코드를 받기 때문에 레코드를 받을 수 있는 객체를 생성해서
         //생성한 객체로 레코드를 받음.
         //변경, 삭제등의 질의 경우 레코드 반환하지 않음.
         ResultSet rs = null;
         
         String id="",
         passwd = "",
         name="",
         mem_num1="",
         mem_num2="",
         e_mail="",
         phone="",
         zipcode="",
         address="",
         job="";
         int counter=0;
         try{
         
         //커넥션 생성
         conn = DriverManager.getConnection
         ("jdbc:mysql://localhost:3306/jspdb?useUnicode=true&characterEncoding=EUCKR","jspuser","1234");
         
         /*
         getConnection() 메소드안의 세개의 인자를 가지는데,
         jdbc:mysql://localhost:8806/mySB 는 JDBC URL/databaseName 의 형태.
         
         두번째 인자: 디비로그인 계정, 세번째: 비밀번호
         
         Oracle:
         conn= DriverManager.getConnection("jdbc:oracle:thin:@localhost:1512:디비명","계정","암호");
         
         ODBC :
       	conn = DriverManager.getConnection("jdbc:odbc:DSNname","sa","")
       	*/
       	
       	//커넥션을 통해 질의를 전송하기 위한 객체(stmt)
       	stmt = conn.createStatement();
       	//객체(stmt)를 통해서 질의를 수행할 메소드를 사용
       	//질의수행 결과는 ResultSet으로 받는다.
       	rs = stmt.executeQuery("SELECT * From MEMBER");
       	
       	%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="EUC-KR">
    <title>JSP에서 데이터베이스 연동</title>
    </head>
    <body bgcolor="#FFFFCC">
    
    <h2> JSP 스크립틀릿에서 데이터베이스 연동 예제입니다...</h2>
    
    <br>
    <br>
    <h3>회원정보</h3>
    <table bordercolor="#0000ff" border="1">
    <tr>
    <td><strong>ID</strong></td>
    <td><strong>PASSWD</strong></td>
    <td><strong>NAME</strong></td>
    <td><strong>MEM_NUM1</strong></td>
    <td><strong>MEM_NUM2</strong></td>
    <td><strong>E_MAAL</strong></td>
    <td><strong>PHONE</strong></td>
    <td><strong>ZIPCODE</strong></td>
    <td><strong>JOB</strong></td>
    </tr>
    <%
    if(rs!=null){
    	//질의수행결과로 받은 레코드들은 하나씩 가져오는 메소드 :next()
    	//next()메소드는 현재의 레코드를 반환하고, 다음 레코드로 포인터를 이동시킨다.
    	//즉, 레코드가 있는 동안 next()메소드는 질의수행결과로 받은 레코드들을 하나씩
    	//반환한다.
    while(rs.next()){
    	// 하나의 레코드를 구성하는 각각의 칼럼에 대한 값을 추출.
    	//각 칼럼의 성격에 따라, setString(column_name), getInt(column_name)
    	// getInt(coulumn_name), getString(column_name) ...하거나,
    	// column 이름대신 칼럼의 순서를 통해서 각 칼럼의 값을 가져올 수 있다.
    	//getString(1),getString(2) ... 안좋은방법
    	id=rs.getString("id");
    	passwd =rs.getString("passwd");
    	name= rs.getString("name");
    	mem_num1 =rs.getString("mem_num1");
    	mem_num2 = rs.getString("mem_num2");
    	e_mail = rs.getString("e_mail");
    	phone = rs.getString("phone");
    	zipcode = rs.getString("zipcode");
    	address = rs.getString("address");
    	job = rs.getString("job");
    %>
    <%-- 주석
    값 출력하는 부분 --%>
    <tr>
    <td><%=id %></td>
    <td><%=passwd  %></td>
    <td><%=name %></td>
    <td><%=mem_num1 %></td>
    <td><%=mem_num2 %></td>
    <td><%=e_mail %></td>
    <td><%=phone %></td>
    <td><%=zipcode %>/<%=address %></td>
    <td><%=job%></td>
    </tr>
    <%
    counter++;
    }//end while
    
    }//end if
    %>
    
    
    </table>
    <br>
    <br>
    total records : <%=counter%>
    <%
    //데이터베이스 연동시 필요한 예외처리...
    }catch(SQLException sqlException){
    System.out.println("sql exception");
    }catch (Exception exception){
    System.out.println("exception");
    }finally{
    if(rs !=null)
    try{rs.close(); }
    catch(SQLException ex){}
    if(stmt != null)
    	try{stmt.close(); }
    catch(SQLException ex){}
    if(conn!=null)
    	try{ conn.close(); }
    catch(Exception ex){}
    }
    %>
    
    </body>
    </html>

    주의) 블럭{ } 갯수 조심하기

     

    2) jsp +bean 이용 

    UsingJDBC_bean.jsp

    JSP : 요청을 받고

    요청화면 <----DTO입력---->DAO 실행 <----DTO출력----> 화면 표시

    DTO가 여러개이면 vector(multi-thread), ArrayList(thread)

     

    RegsterBean.java

    BEAN : DTO : data transfer object, VO value object라고 부르기도 한다.

    MemberMgr.java

    BEAN : DAO : data access object

    ===> DAO + DTO = MODEL : 모형 <==정보의 형태를 구성한다.개념

     

    business Logic : 데이타를 가공하는로직

    business Method : 데이타를 가공하는 메서드

    business Layer : 데이타를 가공하는 클래스들을 모아서 하나의 단계를 만듦.

     

    sql--실행-->rs--저장-->bean(s)--저장-->vector return : 맥락이해하기

     

    뷰로직 view logic

         루프(Vector (ArrayList) ==elementAt(i)==>Bean ==getter()==> data ===> 화면출력)

    package chapter9;
    
    public class RegisterBean {
    
    	
    	private String mem_id;
    	private String mem_passwd;
    	private String mem_name;
    	private String mem_num1;
    	private String mem_num2;
    	private String mem_email;
    	private String mem_phone;
    	private String mem_zipcode;
    	private String mem_address;
    	private String mem_job;
    	
    	public String getMem_id() {
    		return mem_id;
    	}
    	public void setMem_id(String mem_id) {
    		this.mem_id = mem_id;
    	}
    	public String getMem_passwd() {
    		return mem_passwd;
    	}
    	public void setMem_passwd(String mem_passwd) {
    		this.mem_passwd = mem_passwd;
    	}
    	public String getMem_name() {
    		return mem_name;
    	}
    	public void setMem_name(String mem_name) {
    		this.mem_name = mem_name;
    	}
    	public String getMem_num1() {
    		return mem_num1;
    	}
    	public void setMem_num1(String mem_num1) {
    		this.mem_num1 = mem_num1;
    	}
    	public String getMem_num2() {
    		return mem_num2;
    	}
    	public void setMem_num2(String mem_num2) {
    		this.mem_num2 = mem_num2;
    	}
    	public String getMem_email() {
    		return mem_email;
    	}
    	public void setMem_email(String mem_email) {
    		this.mem_email = mem_email;
    	}
    	public String getMem_phone() {
    		return mem_phone;
    	}
    	public void setMem_phone(String mem_phone) {
    		this.mem_phone = mem_phone;
    	}
    	public String getMem_zipcode() {
    		return mem_zipcode;
    	}
    	public void setMem_zipcode(String mem_zipcode) {
    		this.mem_zipcode = mem_zipcode;
    	}
    	public String getMem_address() {
    		return mem_address;
    	}
    	public void setMem_address(String mem_address) {
    		this.mem_address = mem_address;
    	}
    	public String getMem_job() {
    		return mem_job;
    	}
    	public void setMem_job(String mem_job) {
    		this.mem_job = mem_job;
    	}
    
    }
    
    package chapter9;
    import java.sql.*;
    import java.util.*;
    import chapter9.RegisterBean;
    
    public class MemberMgr {
    	
    	private final String JDBC_DRIVER ="org.gjt.mm.mysql.Driver";
    	private final String JDBC_URL = "jdbc:mysql://localhost:3306/jspdb";
    	private final String USER = "jspuser";
    	private final String PASS = "1234";
    	
    	public MemberMgr() { //생성자
    		try {
    			Class.forName(JDBC_DRIVER); //드라이버로딩
    		}catch(Exception e) {
    			System.out.println("Error : JDBC 드라이버 로딩 실패");;
    		}
    	}//MemberMgr()
    	
    	//벡터를 반환하는
    	public Vector getMemberList() {  //비즈니스메서드:데이터를 가공하는메서드
    		Connection conn = null;
    		Statement stmt = null;
    		ResultSet rs = null;
    		Vector vecList =  new Vector();
    		try{
    			conn = DriverManager.getConnection(JDBC_URL,USER,PASS);
    			String strQuery = "select * from member";
    			stmt = conn.createStatement();
    			rs = stmt.executeQuery(strQuery);
    			//루프를돌면서 벡터에다가 빈에 저장
    			while (rs.next()) {
    				RegisterBean regBean = new RegisterBean();
    				regBean.setMem_id(rs.getString("id"));
    				regBean.setMem_passwd(rs.getString("passwd"));
    				regBean.setMem_name(rs.getString("name"));
    				regBean.setMem_num1(rs.getString("mem_num1"));
    				regBean.setMem_num2(rs.getString("mem_num2"));
    				regBean.setMem_email(rs.getString("e_mail"));
    				regBean.setMem_phone(rs.getString("phone"));
    				regBean.setMem_zipcode(rs.getString("zipcode"));
    				regBean.setMem_address(rs.getString("address"));
    				regBean.setMem_job(rs.getString("job"));
    				vecList.add(regBean);
    			}
    		}catch (Exception ex) {
    			System.out.println("Exception" +ex);
    		}finally {
    			if(rs != null) try{rs.close();	}catch(SQLException e) {}
    		if(stmt != null) try{stmt.close(); }catch(SQLException e) {}
    		if(conn != null) try{conn.close();} catch(SQLException e) {}	
    	}
    	return vecList;
    }
    } //class
    
    <%@ page language="java" contentType="text/html; charset=EUC-KR"
        pageEncoding="EUC-KR"%>
        <%@ page import = "java.util.*, chapter9.*" %>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="EUC-KR">
    <title>JSP에서 데이터베이스 연동</title>
    <link href="style.css" rel="stylesheet" type="text/css">
    
    </head>
    <body bgcolor="$FFFFCC">
    <h2> Bean을 사용한 데이터베이스 연동 예제입니다...</h2>
    
    <br>
    <br>
    <h3>회원정보</h3>
    <table bordercolor="#0000ff" border="1">
    <tr>
    <td><strong>ID</strong></td>
    <td><strong>PASSWD</strong></td>
    <td><strong>NAME</strong></td>
    <td><strong>MEM_NUM1</strong></td>
    <td><strong>MEM_NUM2</strong></td>
    <td><strong>E_MAIL</strong></td>
    <td><strong>PHONE</strong></td>
    <td><strong>ZIPCODE</strong></td>
    <td><strong>JOB</strong></td>
    </tr>
    
    <jsp:useBean id="memMgr" class="chapter9.MemberMgr" scope="page"/>
    
    <%
    Vector vlist = memMgr.getMemberList();
    int counter = vlist.size();
    //벡터에서 빈을 꺼내고 빈에서 데이타를 꺼내고
    for(int i=0; i<vlist.size(); i++){
    	RegisterBean regBean =(RegisterBean) vlist.elementAt(i);
    	//i순번을 이용해서 꺼냄
    %>
    <!-- 뷰로직 -->
    <tr>
    <td><%=regBean.getMem_id()%></td>
    <td><%=regBean.getMem_passwd()%></td>
    <td><%=regBean.getMem_name()%></td>
    <td><%=regBean.getMem_num1()%></td>
    <td><%=regBean.getMem_num2()%></td>
    <td><%=regBean.getMem_email()%></td>
    <td><%=regBean.getMem_phone()%></td>
    <td><%=regBean.getMem_zipcode()%> / <%=regBean.getMem_address()%></td>
    <td><%=regBean.getMem_job()%></td>
    <%
    }
    %>
    </tr>
    </table>
    <br>
    <br>
    total records : <%=counter %>
    
    </body>
    </html>

     

     

     

Designed by Tistory.