Studying/Java

[JAVA] JDK 실습 (2)

Kim Da Ham 2022. 8. 16. 23:27

 

JDK 데이터 주고받기 실습

DB 연결 방법

  • 웹 jsp 문서 + 오라클 데이터베이스
  • java 문서 + 오라클 데이터베이스
  • jsp 문서 + java 문서 + 오라클 데이터베이스
  • xml + java문서 + 오라클 데이터베이스

 

 

MySQL 테이블 생성

  • cmd 오픈 > mysql system/****(비밀번호)
  • test 테이블 생성
drop table test;
create table test(
	title varchar2(10) not null,
    pay number(3) not null
);
  • wdate 필드 date 타입 추가
    • alter table test add(wdate date);
  • code 필드 number(4) primary key 추가
    • alter table test add(code number(4) primary key);
  • commit;

 

 

 

 

자바 문서에 대한 전역 변수 선언

<%@ page import="java.util.Date" %>
<%@ page import="java.sql.Connection"%>
<%@ page import="java.sql.DriverManager"%>
<%@ page import="java.sql.*"%>

<%!
	Connection CN=null; 
	Statement ST=null; 
	PreparedStatement PST=null;
	ResultSet RS=null;
	
	int Grn, Gcode, Gsabun, Gpay, Ghit; 
	String Gname, Gtitle, Gconent, Gwriter, Gemail;
	java.util.Date Gwdate, hiredate, Gbirth;
	boolean Ggender, Gflag;
	int Gtotal=0, total=0, Stotal=0;
	String Gdata, data, Gmsg, msg;
	
%>

 

 

 

 

 

eclipse 실행

testWrite.jsp - 제목, 급여, 코드를 입력하는 페이지

<form name="myform" method="get" action="testWriteSave.jsp">
    제목: <input type="text" name="title" id="title"><br>
    급여: <input type="text" name="pay" id="pay"><br>
    코드: <input type="text" name="code" id="code"><br>
    <input type="submit" value="데이터 저장"> &nbsp;
    <input type="reset" value="입력 취소">
</form>
  • <form method="get" action="testWriteSave.jsp">  -  input 태그에서 전달받은 값을 get 요청으로 testWriteSave.jsp에 전달한다.
    • method : 전송 방식
      •  GET : 속도가 빠르고 보안은 x, 전송량 제한적
      • POST : 속도가 느리고 보안은 o, 전송량 제한 없음
    • action : 전달 대상, 이동할 페이지
  • &nbsp  -  공백을 넣는다.

 

 

(예시)

 

제목:
급여:
코드:
 

 

 

 

testWriteSave.jsp - 제목, 급여, 코드를 전달 받음 (추후 데이터 베이스에 저장하는 기능)

<%
    out.println("<h2>데이터 받기 request 내장 객체</h2>");
    
    String Gtitle = request.getParameter("title");
    
    int Gpay = Integer.parseInt(request.getParameter("pay"));
    int Gcode = Integer.parseInt(request.getParameter("code"));
    
    out.println("<h2>제목 데이터 = " + Gtitle + "</h2>");
    out.println("<h2>급여 데이터 = " + Gpay + "</h2>");
    out.println("<h2>코드 데이터 = " + Gode + "</h2>");
    out.println("<h2>데이터 받기 성공입니다.</h2>");
%>
  • request.getParameter("title")  -  클라이언트가 서버(웹페이지)에 요청(request)하면, 요청을 받은 서버가 요청의 파라미터(parameter) 값을 얻기 위해 사용. 클라이언트가 입력하는 input 태그의 name 속성을 파라미터 이름으로 함.
  • Integer.parseInt  -   String을 Int 형으로 변환. request를 통한 파라미터 데이터는 무조건 문자열로 전달 됨.

 

(* 깨알 팁) 이클립스 Window > Show View > Others > General > Problems 클릭하면 에러 코드를 볼 수 있다!

 

 

이제 맨 위에 다음 코드를 선언한다.

<%@ page import="java.util.Date" %>
<%@ page import="java.sql.Connection"%>
<%@ page import="java.sql.DriverManager"%>
<%@ page import="java.sql.*"%>

 

 

그 다음 전역변수를 선언한다.

<%!
    Connection CN = null;
    Statement ST = null;
    PreparedStatement PST = null;
    ResultSet RS = null;
    
    int Grn, Gcode, Gsabun, Gpay, Ghit;
    String Gname, Gtitle, Gconent, Gwriter, Gemail;
    java.util.Date Gwdate, hiredate, Gbirth;
    boolean Ggender, Gflag;
    int Gtotal=0, total=0, Stotal=0;
    String Gdata, data, Gmsg, msg;
%>
  • <%! !> : member filed 영역. 여기서 선언한 변수는 전역변수.
    • <% %> : 여기서 선언한 변수는 service methode에서만 사용하는 local 변수로 인식한다.

 

  • Connection : JAVA에서 DB와 연결하기 위해 사용하는 객체. 파라미터는 URL(데이터의 위치) 및 기타 정보(DB접속 아이디, 패스워드, 포트 번호). DriveManager의 getConnection() 메소드를 호출하여 생성할 수 있음.
    • Connection의 메소드
      1. createStatement() : SQL문을 DB에 전달하기 위한 Statement 객체를 생성
      2. preparedStatement(String sql) : 파라미터가 포함 된 SQL문을 DB에 전달하기 위한 객체를 생성
      3. prepareCall(String sql) : DB의 Stored Procedure를 호출하기 위한 객체를 생성
      4. close() : 현재 커넥션 객체에 할당 된 시스템 리소스를 즉시 반환
  • Statement : DB와의 연결로부터 SQL문을 실행할 수 있도록 해주는 객체(Connection이 먼저 연결되어 있어야 한다)
    • Statement의 메소드
      1. executeQuery() : SELECT 문을 수행할 때 사용. 반환 값은 Resultset 클래스의 인스턴스. 해당 SELECT문의 결과에 해당하는 데이터에 접근할 수 있는 방법을 제공
      2. excuteUpdate() : UPDATE, DELETE와 같은 문을 수행할 때 사용(수정), 반환 값은 int형으로 처리 된 데이터의 수를 반환
      3. close() : Statement 객체를 반환
    • Ex.
Statement st = conn.createStatement();
st.executeUpdate("insert into test values
	('" + request.getParameter("username") + "', '" + request.getParameter("email") + "')");

 

  • PreparedStatement : SQL문을 미리 만들어두고 변수를 따로 입력하는 방식. 효율성이나 유지보수에 Good. Statement의 메서드를 모두 상속 받기 때문에 Statement클래스 메서드를 모두 사용 가능.
    • Ex.
PreparedStatement ps = conn.prepareStatement("insert into test values(?,?)");
ps.setString(1, request.getParameter("username");
ps.setString(2, request.getParameter("email");
ps.executeUpdate();

 

  • ResultSet : executeQuery() 메서드를 사용하여 SELECT 쿼리문을 실행 후, 실행 결과를 java.sql.ResultSet 형으로 반환. 그걸 담기 위한 ResultSet 객체 변수 RS를 선언.
    • ResultSet의 메소드
      1. next() : 결과 리스트의 다음 행으로 커서를 이동 (없으면 false 리턴)
      2. getXxx(int column_index) - column_index 번째 칼럼 값을 Xxx 타입으로 가져온다.
      3. getXxx(String columName) - columnName 컬럼의 값을 Xxx 타입으로 가져온다.
      4. close() : ResultSet 객체를 반환

 

 

ResultSet.next() 메서드 커서의 이동은 다음과 같다.

 

 

전역변수를 선언 했으므로 int Gpay, int Gcode, String Gtitle 을 그냥 Gpay, Ccode, Gtitle로 수정한다.

 

 

 

 

 

testList.jsp - 입력한 데이터 리스트를 테이블로 보여주는 페이지

 

testWrite.jsp, testList.jsp 파일에 아래 import 선언 & 마찬가지로 전역변수를 선언한다.

<%@ page import="java.util.Date" %>
<%@ page import="java.sql.Connection"%>
<%@ page import="java.sql.DriverManager"%>
<%@ page import="java.sql.*"%>

<%!
    Connection CN=null;
    Statement ST=null;
    PreparedStatement PST=null;
    ResultSet RS=null;
    int Grn, Gcode, Gsabun, Gpay, Ghit;
    String Gname, Gtitle, Gconent, Gwriter, Gemail;
    java.util.Date Gwdate, hiredate, Gbirth;
    boolean Ggender, Gflag;
    int Gtotal=0, total=0, Stotal=0;
    String Gdata, data, Gmsg, msg;
%>

 

오라클 DB 문서가 있는 서버 정보를 연결한다. testList.jsp, testWriteSave.jsp에 아래 코드를 추가한다.

<%
    try{
        Class.forName("oracle.jdbc.driver.OracleDriver");
        String url="jdbc:oracle:thin:@127.0.0.1:1521:XE";
        CN = DriverManager.getConnection(url, "system", "1234");
        System.out.println("오라클 db서버 연결 성공");
        out.println("<h1>오라클 db서버 연결 성공</h1><p>");
    } catch(Exception ex){System.out.println("db에러" + ex);}
%>

 

 

 

 

 

testWriteSave.jsp

testWrite.jsp 에서 보낸 데이터를 이제 진짜 DB 서버에 저장해야 한다. 위에서 서버를 연결했으니까, 아래와 같이 사용해보자.

<%
    out.println("<h2>데이터 받기 request 내장 객체</h2>");
    
    Gtitle = request.getParameter("title");
    Gpay = Integer.parseInt(request.getParameter("pay"));
    Gcode = Integer.parseInt(request.getParameter("code"));
    
    out.println("<h2>제목 데이터 = " + Gtitle + "</h2>");
    out.println("<h2>급여 데이터 = " + Gpay + "</h2>");
    out.println("<h2>코드 데이터 = " + Gcode + "</h2>");
    out.println("<h2>데이터 받기 성공입니다.</h2>");
    
    // msg = "insert into test values('snow', 24, sysdate, 7700)";
    msg = "insert into test
    	values('" + Gtitle + "'," + Gpay + ",sysdate," + Gcode + ")";

	// msg가 잘 완성 되었는지 테스트
    System.out.println(msg);
    
    try{
        ST = CN.createStatement();
        ST.executeUpdate(msg);
        out.println(Gcode +"코드 데이터 성공처리");
        System.out.println(Gcode +"코드 데이터 성공처리");
        response.sendRedirect("testList.jsp");
    } catch(Exception ex){
    System.out.println("test테이블 저장실패 에러 " + ex);
    	out.println("<h1>test테이블 저장에러실패 " + ex + "</h1>") ;
    }
%>
  • response.sendRedirect("testList.jsp")  -  testList.jsp 페이지로 화면 이동

 

이제 오라클 mySQL을 실행하여 select * from test; 를 하면 입력한 데이터가 테이블에 저장되어 있다!!!

 

 

 

 

 

 

 

 

testList.jsp

<%@ page import="java.util.Date" %>
<%@ page import="java.sql.Connection"%>
<%@ page import="java.sql.DriverManager"%>
<%@ page import="java.sql.*"%>

 

 

사용되는 전역변수는 다음과 같다.

<body>
    <%!
        Connection CN = null;
        Statement ST = null;
        PreparedStatement PST = null;
        ResultSet RS = null;
        int Grn, Gcode, Gsabun, Gpay, Ghit; // hit : 조회수, sabun : 사번
        String Gname, Gtitle, Gconent, Gwriter, Gemail;
        java.util.Date Gwdate, hiredate, Gbirth;
        boolean Ggender, Gflag;
        int Gtotal=0, total=0, Stotal=0;
        String Gdata, data, Gmsg, msg;
    %>

 

 

 

오라클 DB 문서가 있는 서버 정보를 연결한다.

<%
    try{
        Class.forName("oracle.jdbc.driver.OracleDriver");
        String url="jdbc:oracle:thin:@127.0.0.1:1521:XE";
        CN=DriverManager.getConnection(url, "system", "qazwsx311");
        out.println("<h1>오라클 db서버 연결 성공</h1><p>");
    } catch(Exception ex){System.out.println("db에러"+ex);}
    %>

 

 

 

출력할 테이블 형태는 다음과 같다.

<p>
    <h2>testList.jsp</h2>
    
    <table border="1" width="1200" cellspacing="0">
        <tr bgcolor="yellow">
            <td>코 드</td>
            <td>제 목</td>
            <td>날 짜</td>
            <td>급 여</td>
        </tr>

 

 

 

제목, 급여, 날짜, 코드 데이터를 DB에서 가져오는 쿼리문을 작성한다.

        <%
            msg = "select title, pay, wdate, code from test ";
            ST = CN.createStatement(); // 명령어생성
            RS = ST.executeQuery(msg); // 생성된 명령(ST)에 쿼리문(msg)을 실행, 결과를 RS에 기억

            while(RS.next()==true){ // select 결과를 순회하면서 testList 테이블을 그림
                Gtitle = RS.getString("title");
                Gpay = RS.getInt("pay");
                Gwdate = RS.getDate("wdate");
                Gcode = RS.getInt("code");
        %>

데이터가 존재하면 4개의 데이터를 변수에 저장한 뒤 차례로 반복문을 돌며

 

 

데이터를 출력한다.

                <tr>
                    <td> <%= Gcode %> </td>
                    <td> <%= Gtitle %> </td>
                    <td> <%= Gwdate %> </td>
                    <td> <%= Gpay %> </td>
                </tr>
        
    	<% }//while end %>
    </table>
    
    <p>
    <a href="testWrite.jsp">[게시판입력화면]</a>
    <a href="testList.jsp">[게시판전체출력]</a>
    <a href="index.jsp">[index]</a>
    <p><br><br>
</body>

 

 

게시판 목록 화면

 

 

 

 

 

testDetail.jsp (testList.jsp > Save as... > testDefault.jsp) - 항목 상세보기 페이지

<%@ page import="java.util.Date" %>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.DriverManager" %>
<%@ page import="java.sql.*" %>

 

 

사용되는 전역변수는 다음과 같다.

<body>
    <%!
        Connection CN=null ;
        Statement ST=null ;
        PreparedStatement PST=null;
        ResultSet RS=null;
        int Grn, Gcode, Gsabun, Gpay, Ghit ;
        String Gname, Gtitle, Gconent, Gwriter, Gemail;
        java.util.Date Gwdate, hiredate, Gbirth ; // 날짜타입
        boolean Ggender, Gflag ;
        int Gtotal=0, total=0, Stotal=0 ;
        String Gdata, data, Gmsg, msg ;
    %>
  • <%= %> : 문자열, 변수값, 함수 리턴 값
    • 그 외
      1. <%! 선언부 %> : 전역변수, 함수
      2. <% 스크립릿 %> : 코딩, 지역변수
      3. <%= 출력부 %>
      4. <%-- JSP 주석 --%>

 

 

마찬가지로 서버 연결을 하고

<%
    try{
        Class.forName("oracle.jdbc.driver.OracleDriver");
        String url="jdbc:oracle:thin:@127.0.0.1:1521:XE";
        CN=DriverManager.getConnection(url, "system", "1234");
        System.out.println("testDetail 오라클 db서버 연결 성공") ;
    }catch(Exception ex){ System.out.println("testDetail db에러 " + ex); }
%>

 

 

 

코드가 ****인 데이터 한 건을 조회하는 DB 쿼리문을 작성한다.

<%
    msg = "select * from test where code = 2234";
    ST = CN.createStatement();
    RS = ST.executeQuery(msg);
    if(RS.next()==true){
        Gtitle = RS.getString("title");
        Gpay = RS.getInt("pay");
        Gwdate = RS.getDate("wdate");
        Gcode = RS.getInt("code");
    }
%>

데이터가 존재하면

 

 

 

다음과 같은 형태로 출력한다.

<p>
    <table width="900" border="1" cellspacing="0" cellpadding="7">
        <tr align="center">
        	<td colspan="2">
       			testDetail.jsp</br>
        	</td>
        </tr>
        
        <tr>
        	<td rowspan="4" align="center"> <img src="images/pic6.png" width="500"
        	height="300" > </td>
        	<td width="400"> 코드: <%= Gcode %> </td>
        </tr>
        
        <tr> <td> 제목: <%= Gtitle %> </td> </tr>
        <tr> <td> 날짜: <%= RS.getDate("wdate") %> </td> </tr>
        <tr> <td> 급여: <%= RS.getInt("pay") %> </td> </tr>
        
        <tr align="center">
            <td colspan="2">
            <a href="#">[수정]</a>
            <a href="testWrite.jsp">[등록]</a>
            <a href="#">[삭제]</a>
            <a href="index.jsp">[index]</a>
            <a href="testList.jsp">[전체출력]</a>
            </td>
        </tr>
    </table>
</body>

 

 

 

 

index.jsp - 메인 화면 페이지

<body>
    <div align="center">
        <h2>index.jsp</h2>
        <img src="./images/tulips.png" width=450 height=350>
        <p>
        <a id="testWriteBtn" href="testWrite.jsp">[게시판입력화면]</a>
        <a id="testListBtn" href="#" onclick="listPageMove()">[게시판전체출력]</a>
        <a id="indexBtn" href="index.jsp">[index]</a>
    </div>
    <p><br><br>
    
    <script type="text/javascript">
    	setTimeout("location.href='testList.jsp'", 3000);
    </script>
</body>
  • 문서 이동 태그
    • <a herf=""> </a>
    • <form action=""> </form>

 

 

 

 

 

ssi.jsp 

 

지금까지 testWrite, testWriteSave, testList, testDetail... 에서 전역변수 선언 및 오라클 서버 연결 코드를 "똑같이 반복" 해왔다...

 

코드 중복은 세상에서 제일 끔찍한 것이다. 공통적으로 사용 되는 코드부를 ssi 파일에 별도 저장한 뒤 각 파일에서 ssi 파일을 import 하도록 하자.

<%@ page import="java.util.Date" %>
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.DriverManager" %>
<%@ page import="java.sql.*" %>

 

<body>
    <!-- ssi.jsp = server side include문서 -->
    <%!
        Connection CN=null ;
        Statement ST=null ;
        PreparedStatement PST=null;
        ResultSet RS=null;
        int Grn, Gcode, Gsabun, Gpay, Ghit ;
        String Gname, Gtitle, Gconent, Gwriter, Gemail;
        java.util.Date Gwdate, hiredate, Gbirth ;
        boolean Ggender, Gflag ;
        int Gtotal=0, total=0, Stotal=0 ;
        String Gdata, data, Gmsg, msg ;
    %>
    
    <%
        try{
            Class.forName("oracle.jdbc.driver.OracleDriver");
            String url="jdbc:oracle:thin:@127.0.0.1:1521:XE";
            CN=DriverManager.getConnection(url, "system", "1234");
            System.out.println("오라클 db서버 연결 성공") ;
        }catch(Exception ex){ System.out.println("db에러 " + ex); }
    %>
</body>

 

 

 

 

 

ssi.jsp 를 import 한 파일들의 전체 코드

더보기

testWrite.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ include file="./ssi.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> [testWrite.jsp=입력화면get방식]</title>
</head>
<body>
    <p/>
    <h2>testWrite.jsp</h2>
    
    <form name="myform" method="get" action="testWriteSave.jsp">
        제목: <input type="text" name="title" id="title"><br>
        급여: <input type="text" name="pay" id="pay"><br>
        코드: <input type="text" name="code" id="code"><br>
        <input type="submit" value="데이터저장"> &nbsp;
        <input type="reset" value="입력취소">
    </form>
    
    <p>
    <a href="testWrite.jsp">[게시판입력화면]</a>
    <a href="testList.jsp">[게시판전체출력]</a>
    <a href="index.jsp">[index]</a>
</body>
</html>

 

 

testWriteSave.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ include file="./ssi.jsp" %>
<%@ page import="java.util.Date" %>
<%@ page import="java.sql.Connection"%>
<%@ page import="java.sql.DriverManager"%>
<%@ page import="java.sql.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>[testWriteSave.jsp]</title>
</head>
<body>
    <p>
    <img src="./images/bear.gif">
    <h2>testWriteSave.jsp</h2>
    
    <%
        out.println("<h2>데이터 받기 request 내장 객체</h2>");
        Gtitle = request.getParameter("title");
        Gpay = Integer.parseInt(request.getParameter("pay"));
        Gcode = Integer.parseInt(request.getParameter("code"));
        out.println("<h2>제목 데이터 = " + Gtitle + "</h2>");
        out.println("<h2>급여 데이터 = " + Gpay + "</h2>");
        out.println("<h2>코드 데이터 = " + Gcode + "</h2>");
        out.println("<h2>데이터 받기 성공입니다.</h2>");

        msg = "insert into test
        values('"+Gtitle+"',"+Gpay+",sysdate,"+Gcode+")";
        System.out.println(msg);

        try{
            ST = CN.createStatement();
            ST.executeUpdate(msg);
            out.println(Gcode +"코드 데이터 성공처리 ");
            System.out.println(Gcode +"코드 데이터 성공처리 ");
            response.sendRedirect("testList.jsp");
        }catch(Exception ex){
            System.out.println("test테이블 저장실패 에러 " + ex);
            out.println("<h1>test테이블 저장에러실패 " + ex + "</h1>") ;
        }
    %>
    
    <p>
    <a href="testWrite.jsp">[게시판입력화면]</a>
    <a href="testList.jsp">[게시판전체출력]</a>
    <a href="index.jsp">[index]</a>
    <p><br><br>
</body>
</html>

 

 

testList.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ include file="ssi.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> [testList.jsp]</title>
</head>
<body>
    <p>
    <h1>testList.jsp</h1>
    
    <table border="1" width="1200" cellspacing="0">
        <tr bgcolor="yellow">
        	<td>코 드</td> <td>제 목</td> <td>날 짜</td> <td>급 여</td>
        </tr>
        
        <%
            msg = "select * from test order by code";
            ST = CN.createStatement();
            RS = ST.executeQuery(msg);
            while(RS.next()==true){
                Gtitle = RS.getString("title");
                Gpay = RS.getInt("pay");
                Gwdate = RS.getDate("wdate");
                Gcode = RS.getInt("code");
                System.out.println(Gcode + " " + Gtitle + " " + Gwdate + " " + Gpay);
        %>
        
                <tr>
                    <td> <%= Gcode %> </td>
                    <td> <%= Gtitle %> </td>
                    <td> <%= Gwdate %> </td>
                    <td> <%= Gpay %> </td>
                </tr>
        
        <% }//while end %>
        
    </table>

    <p>
    <a href="testWrite.jsp">[게시판입력화면]</a>
    <a href="testList.jsp">[게시판전체출력]</a>
    <a href="index.jsp">[index]</a>
</body>
</html>

 

 

testDetail.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ include file="./ssi.jsp" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title> [testDetail.jsp]</title>
</head>
<body>
    <%
        msg = "select * from test where code = 2234";
        ST = CN.createStatement();
        RS = ST.executeQuery(msg);
        if(RS.next()==true){
            Gtitle = RS.getString("title");
            Gpay = RS.getInt("pay");
            Gwdate = RS.getDate("wdate");
            Gcode = RS.getInt("code");
        }
    %>
    
    <p>
    <table width="900" border="1" cellspacing="0" cellpadding="7">
        <tr align="center">
        	<td colspan="2">
       			 testDetail.jsp</br>
       		</td>
        </tr>
        
        <tr>
        	<td rowspan="4" align="center"> <img src="images/pic6.png" width="500"
        	height="300" > </td>
        	<td width="400"> 코드: <%= Gcode %> </td>
        </tr>
        
        <tr> <td> 제목: <%= Gtitle %> </td> </tr>
        <tr> <td> 날짜: <%= RS.getDate("wdate") %> </td> </tr>
        <tr> <td> 급여: <%= RS.getInt("pay") %> </td> </tr>
        
        <tr align="center">
        	<td colspan="2">
                <a href="#">[수정]</a>
                <a href="testWrite.jsp">[등록]</a>
                <a href="#">[삭제]</a>
                <a href="index.jsp">[index]</a>
                <a href="testList.jsp">[전체출력]</a>
        	</td>
        </tr>
    </table>
</body>
</html>

 

 

 

 

 

 

 

 

다음 게시글에 이어서...