CustomerProc.java

  1. package cus;

    import java.io.*;
    import java.sql.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.util.Vector;
    import cus.CustomerBean;

    public class CustomerProc extends HttpServlet {
        String url = "jdbc:oracle:thin:@127.0.0.1:1521:cjedu";
        String user = "scott";
        String passwd = "tiger";

        public CustomerProc(){
            try {
                Class.forName("oracle.jdbc.driver.OracleDriver");
                } catch (Exception e) {
                e.printStackTrace();
            }
        }

        public Vector selectAll(){
            Connection con;
            Statement stat;
            CustomerBean c;
            Vector result = new Vector();

            try {
                con = DriverManager.getConnection( url, user, passwd );
                stat = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);

                String sql = "SELECT * FROM customer ORDER BY num";
                ResultSet rs = stat.executeQuery(sql);
                while ( rs.next() ) {
                        String num = rs.getString(1);
                        String name = rs.getString(2);
                        String addr = rs.getString(3);
                        c = new CustomerBean(num, name, addr);
                        result.add(c);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return result;
        }

        public int insertData(String sql){
            Connection con;
            Statement stat;
            int t=0;

            try {
                con = DriverManager.getConnection( url, user, passwd );
                stat = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);

                t = stat.executeUpdate(sql);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return t;
        }

        public int deleteData(String sql){
            Connection con;
            Statement stat;
            int t = 0;

            try {
                con = DriverManager.getConnection( url, user, passwd );
                stat = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);

                t = stat.executeUpdate(sql);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return t;
        }

        public Vector searchData(String sql){
            Connection con;
            Statement stat;
            CustomerBean c;
            Vector result = new Vector();

            try {
                con = DriverManager.getConnection( url, user, passwd );
                stat = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);

                ResultSet rs = stat.executeQuery(sql);
                while ( rs.next() ) {
                        String num = rs.getString(1);
                        String name = rs.getString(2);
                        String addr = rs.getString(3);
                        c = new CustomerBean(num, name, addr);
                        result.add(c);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return result;
        }
    }

 

CustomerBean.java

  1. //data bean : data 입출력을 위한 데이터 출력
    package cus;

    public class CustomerBean {
        private String num = "" ;
        private String name = "";
        private String address = "";

        public CustomerBean() {
        }

        public CustomerBean(String num, String name, String address){
            this.num = num;
            this.name = name;
            this.address = address;
        }

        public void setNum(String num){
            this.num = num;
        }

        public String getNum(){
            return num;
        }

        public void setName(String name){
            this.name = name;
        }

        public String getName(){
            return name;
        }

        public void setAddress(String address){
            this.address = address;
        }
       
        public String getAddress(){
            return address;
        }
    }

 

index.jsp

  1. <%@ page contentType="text/html; charset=euc-kr" %>
    <HTML><HEAD><TITLE> Index.JSP Start your mark!!! </TITLE></HEAD>
          <style type="text/css">
            body {background-color:#e0e0e0; text-align:center;}
            th { background-color:#404040; color:#f8f8f8}
            td { background-color:#A0A0A0; color:#f8f8f8;}
            table {
        </style>
        <BODY>
            <h1> JSP Process Test 를 시작합니다.</h1>
            <h3> 원하는 항목을 선택하여 주세요. </h3>
            <hr>
            <form method=post action="process.jsp"><table border=1 align=center width=>
            <tr><th width=50>선택</th><th>작업내용</th><tr>
            <tr><td align=center><INPUT TYPE="radio" NAME="choice" value="select"></td><td>전체항목보기("SELECT * FROM customer")</td></tr>
            <tr><td align=center><INPUT TYPE="radio" NAME="choice" value="insert"></td><td>새항목 입력하기("INSERT INTO customer VALUES(~~~)")</td></tr>
            <tr><td align=center><INPUT TYPE="radio" NAME="choice" value="delete"></td><td>선택된 항목 삭제하기("DELETE customer WHERE num IN(~~~)")</td></tr>
            <tr><td align=center><INPUT TYPE="radio" NAME="choice" value="search"></td><td>검색을 희망하는 항목을 입력하여 찾기</td></tr>
            </table><input type=submit value="실행"><input type=reset value="취소"></form>
         </BODY>
    </HTML>

IndexJsp.JPG

 

process.jsp(jst:forward 기능 수행)

  1. <%@ page contentType="text/html; charset=euc-kr" %>
    <%@ page errorPage="errorPage.jsp" %>
    <HTML><HEAD><TITLE> JSP Process Test Forward Page </TITLE>
     </HEAD>
     <BODY>
        <!-- index.jsp 에서 radio 의 속성값을 알아오자. -->
        <%
            String value = request.getParameter("choice");
            if ( value.equals("select")){
        %>
                <jsp:forward page="select.jsp" />
        <%
            } else if ( value.equals("insert") ){
        %>
                <jsp:forward page="insert.jsp" />
        <%
            } else if ( value.equals("delete") ){
        %>
                <jsp:forward page="delete.jsp" />
        <%
            } else if ( value.equals("search") ){
        %>
                <jsp:forward page="Search.jsp" />
        <%
            }
        %>
     </BODY>
    </HTML>

 

select.jsp

  1. <%@ page contentType="text/html; charset=euc-kr" %>
    <%@ page import = "java.sql.*, java.util.*" %>
    <%@ page errorPage="errorPage.jsp" %>
    <jsp:useBean id="cus" class="cus.CustomerProc" scope="page" />

    <HTML><HEAD><TITLE> JSP use Bean on JDBC </TITLE></HEAD>
        <style type="text/css">
        body {background-color:#e0e0e0}
        th { background-color:#404040; color:#f8f8f8}
        td { background-color:#A0A0A0; color:#f8f8f8; text-align:center;}
        </style>
     <BODY><center>
        <h1>JDBC Bean Use Result</h1><hr>
        <%
            Vector v = cus.selectAll();
            if ( v.isEmpty() != false ){
                out.println("현재 DB에서 넘겨받은 데이터가 없습니다.");
                //out.println(v.size());
            } else {
        %>
                <table border=1 align=center width=500>
                <tr><th>번호</th><th>이름</th><th>주소</th>
        <%
                for( int i = 0 ; i < v.size() ; i++){
                    cus.CustomerBean cu = (cus.CustomerBean)v.elementAt(i);
                    String num = cu.getNum();
                    String name = cu.getName();
                    String addr = cu.getAddress();
        %>
                    <tr><td><%= num %></td><td><%= name %></td><td><%= addr %></td></tr>
        <%
                }
            }
        %>
        </table><br>
        <a href="index.jsp">초기 화면으로</a>
     </BODY>
    </HTML>

SelectJsp.JPG

 

insert.jsp(입력폼을 통해 입력된 자료를 insertProc.jsp에 전달한다)

  1. <%@ page contentType="text/html; charset=euc-kr" %>
    <%@ page errorPage="errorPage.jsp" %>
    <HTML> <HEAD> <TITLE> Insert data to customer table. </TITLE>
     </HEAD>
           <style type="text/css">
            body {background-color:#e0e0e0; text-align:center;}
            th { background-color:#404040; color:#f8f8f8}
            td { background-color:#A0A0A0; color:#f8f8f8;}
            table {
        </style>
     <BODY>
        <h1>INSERT DATA TO CUSTOMER TABLE</h1>
        <hr>
        <form method=post action="InsertProc.jsp">
        <table border=1 width=500 align=center>
        <tr><th width=60>항목</th><th>입력 항목</th><tr>
        <tr><th>번호</th><td><input type=text name='num' size=60></td><tr>
        <tr><th>이름</th><td><input type=text name='name' size=60></td><tr>
        <tr><th>주소</th><td><input type=text name='addr' size=60></td><tr>
        </table><input type=submit value='입력'><input type=reset value='재작성'><a href="Index.jsp">초기 화면으로</a>
        </form> 
     </BODY>
    </HTML>

InsertJsp.JPG

 

insertProc.jsp

  1. <%@ page contentType="text/html; charset=euc-kr" %>
    <%@ page errorPage="errorPage.jsp" %>
    <HTML><HEAD><TITLE> INSERT process Page </TITLE></HEAD>
    <jsp:useBean id="cp" class="cus.CustomerProc" scope="page" />
        <style type="text/css">
            body {background-color:#e0e0e0}
            th { background-color:#404040; color:#f8f8f8}
            td { background-color:#A0A0A0; color:#f8f8f8; text-align:center;}
        </style>
     <BODY><Center>
        <%
            String num = request.getParameter("num");
            String name = request.getParameter("name");
            String addr = request.getParameter("addr");
            String sql = "INSERT INTO customer Values('" + num + "', '" +name + "','" + addr + "')";
            int result = cp.insertData(sql);

            if ( result == 0 ) {
        %>
            <h1>데이터가 정상적으로 입력되지 않았습니다.</h1><hr>
            입력하신 데이터와 관련한 오류가 발생하였습니다.
            입력하신 내용을 확인해주세요.<br><br>
            입력내용 : <%= sql %> <br><br>
            <a href="Insert.jsp">다시 입력 화면으로</a>
        <%
            } else {
        %>
            <h1>데이터가 정상적으로 입력되었습니다.</h1>
            <a href="Index.jsp">초기 선택 화면으로</a>
        <%
            }
        %>
    </center>
     </BODY>
    </HTML>

 INsertJspAccess.JPG

자료가 정상적으로(무결성 오류없이) 처리되었을 때.

InsertJspException.JPG

DB에 존재하지 않는 검색 사항을 입력했을 경우

InsertJspNoInput.JPG

검색 데이터를 입력하지 않았을 경우 자바스크립트로 실행차단함

 

Delete.jsp

  1. <%@ page contentType="text/html; charset=euc-kr" %>
    <%@ page import = "java.sql.*, java.util.*" %>
    <%@ page errorPage="errorPage.jsp" %>
    <jsp:useBean id="cus" class="cus.CustomerProc" scope="page" />

    <HTML><HEAD><TITLE> JSP use Bean on JDBC </TITLE></HEAD>
        <style type="text/css">
        body {background-color:#e0e0e0}
        th { background-color:#404040; color:#f8f8f8}
        td { background-color:#A0A0A0; color:#f8f8f8; text-align:center;}
        </style>
     <BODY><center>
        <h1>JDBC Bean Use Result</h1><hr>
        <%
            Vector v = cus.selectAll();
            if ( v.isEmpty() != false ){
                out.println("현재 DB에서 넘겨받은 데이터가 없습니다.");
                //out.println(v.size());
            } else {
        %>
                <form method=post action='DeleteProc.jsp'>
                <table border=1 align=center width=500>
                <tr><th>check</th><th>번호</th><th>이름</th><th>주소</th>
        <%
                for( int i = 0 ; i < v.size() ; i++){
                    cus.CustomerBean cu = (cus.CustomerBean)v.elementAt(i);
                    String num = cu.getNum();
                    String name = cu.getName();
                    String addr = cu.getAddress();
        %>
                    <tr><td><input type=checkbox name=num value=<%= num %>></td><td><%= num %></td><td><%= name %></td><td><%= addr %></td></tr>
        <%
                }
        %>
                <tr><td colspan=4><input type=submit value='삭제하기'><input type=reset value='재선택'></td></tr>
                </table></form>
        <%
            }
        %>
    <br>
        <a href="index.jsp">초기 화면으로</a>
     </BODY>
    </HTML>

DeleteJsp.JPG

 

deleteProc.jsp

  1. <%@ page contentType="text/html; charset=euc-kr" %>
    <%@ page errorPage="errorPage.jsp" %>
    <jsp:useBean id="cp" class="cus.CustomerProc" scope="page" />
    <HTML><HEAD><TITLE> DELETE process page </TITLE></HEAD>
        <style type="text/css">
            body {background-color:#e0e0e0}
            th { background-color:#404040; color:#f8f8f8}
            td { background-color:#A0A0A0; color:#f8f8f8; text-align:center;}
        </style>
     <BODY><center>
        <%!
            String sql = "DELETE customer WHERE num IN ('";
        %>

         <%

            String[] values=request.getParameterValues("num");
            if (values != null){
                for(int i = 0; i < values.length; i++) {
                    sql += values[i];
                    if ( i == values.length-1){
                        sql += "'";
                    } else {
                        sql += "','";
                    }
                }
                sql += ")";
            } else {
                sql = "선택하신 항목이 없습니다.";
            }
            int t = cp.deleteData(sql);
        %>
        <h1> 삭제를 위해 선택한 자료들은 다음과 같습니다.</h1>

       
        <%
            if(values != null){
        %>
                <table border=1 width=500>
                <tr><th>선택하신 데이터번호</th></tr><tr><td>
        <%
                for(int i = 0; i < values.length; i++) {
        %>
                <%= values[i] %>&nbsp;&nbsp;
        <%
                }
        %>
                </td></tr></table>
        <%
            }
        %>
        <hr>
        선택하신 <%= t %> 개의 자료는 삭제되었습니다.<br><br>
        <a href=index.jsp %>초기 화면으로</a>
    </center></BODY>
    </HTML>

deleteProcAccess.JPG

 

search.jsp

  1. <%@ page contentType="text/html; charset=euc-kr" %>
    <%@ page errorPage="errorPage.jsp" %>
    <jsp:useBean id="cus" class="cus.CustomerProc" scope="page" />
    <HTML><HEAD><TITLE> Search Process JSP Page </TITLE></HEAD>
         <style type="text/css">
            body {background-color:#e0e0e0}
            th { background-color:#404040; color:#f8f8f8}
            td { background-color:#A0A0A0; color:#f8f8f8; text-align:center;}
        </style>
        <script type='text/javascript'>
            var checkArticle = function checkArticle(){
                var num = document.form1.article.value.length;
                if ( num === 0 ) {
                    alert("데이터를 입력해주세요.");
                    return false;
                } else {
                    return true;
                }
            }
        </script>
     <BODY><center>
     <h1>검색을 희망하시는 항목을 선택하신 후 데이터를 입력해주세요.</h1>
        <hr>
        <form name=form1 method=post action='SearchProc.jsp' onSubmit='return checkArticle()'><table border=1 width=500>
        <tr><th>항목 선택</th><th>원하는 검색 데이터 입력</th></tr>
        <tr><td><select name='attribute'>
                <option value='num'>번&nbsp;&nbsp;&nbsp;&nbsp;호
                <option value='name'>이&nbsp;&nbsp;&nbsp;&nbsp;름
                <option value='address'>주&nbsp;&nbsp;&nbsp;&nbsp;소
                </select>
        </td><td><input type=text name='article' size=55></td></tr>
        <tr><td colspan=2><input type=submit value='검색'>&nbsp;&nbsp;&nbsp;<input type=reset></td></tr>
        </table></form>

     
     </center></BODY>
    </HTML>

SearchJsp.JPG

 

searchProc.jsp

  1. <%@ page contentType="text/html; charset=euc-kr" %>
    <%@ page import = "java.sql.*, java.util.*" %>
    <%@ page errorPage="errorPage.jsp" %>
    <jsp:useBean id="cus" class="cus.CustomerProc" scope="page" />

    <HTML><HEAD><TITLE> This page is Search Result Return </TITLE></HEAD>
        <style type="text/css">
            body {background-color:#e0e0e0}
            th { background-color:#404040; color:#f8f8f8}
            td { background-color:#A0A0A0; color:#f8f8f8; text-align:center;}
        </style>
        <BODY><center>
        <h1> 요청하신 검색의 결과입니다. </h1><hr>

        <%
            String attribute = request.getParameter("attribute");
            String article = request.getParameter("article");
            String sql = "SELECT * FROM customer where " + attribute + " like '%"+article+"%' order by num";
        %>
            <h3> 검색 Query : <%= sql %> </h3><hr>
        <%
            Vector v = cus.searchData(sql);
            if ( v.isEmpty() == true ){
                out.println("<h2>현재 DB에서 넘겨받은 데이터가 없습니다.</h2>");
                //out.println(v.size());
            } else {
        %>
                <table border=1 align=center width=500>
                <tr><th>번호</th><th>이름</th><th>주소</th>
        <%
                for( int i = 0 ; i < v.size() ; i++){
                    cus.CustomerBean cu = (cus.CustomerBean)v.elementAt(i);
                    String num = cu.getNum();
                    String name = cu.getName();
                    String addr = cu.getAddress();
        %>
                    <tr><td><%= num %></td><td><%= name %></td><td><%= addr %></td></tr>
        <%
                }
        %>
                </table>
        <%
            }
        %>
        <br><a href='index.jsp'>초기 화면으로</a>
         </center></BODY>
    </HTML>

InsertJspNoInput(1).JPG

검색 항목을 입력하지 않고 출력하려고 할 경우 발생함

SearchJspNoResult.JPG

입력한 검색 결과가 없을 경우 나타나는 화면

SearchProcResult.JPG

정상적으로 입력되었을 경우 나타나는 화면

 

이 글은 스프링노트에서 작성되었습니다.

쿠키(Cookie)

사용자의 ID 혹은 암호까지 기억하는 경우를 보았을 것이다. 이것은 웹 브라우저가 ID 혹은 암호를 사용자의 컴퓨터에 저장하고 있기 때문에 가능하다. 이처럼 웹 서버가 전달한 정보를 웹 브라우저가 컴퓨터에 저장하는 것을 쿠키(Cookie)라고 한다. 쿠키는 다양하게 활용될 수 있는데, 대표적인 사용 예로 사용자 ID와 암호를 기억함으로써 사이트를 편리하게 사용할 수 있도록 하거나 혹은 사용자의 방문 횟수를 기억하돌고 함으로써 사용자의 웹 사이트 사용 유형을 파악하는 것이 있다. 쿠키는 넷스케이프사에서 처음 제안되었고, RFC 2109로 문서화 되었다.

● 관련정보 : http://en.wikipedia.org/wiki/HTTP_cookie (영문)

● 관련정보 : http://ko.wikipedia.org/wiki/HTTP_쿠키 (한글, 간략함. 영문 참조바람)

 

※ 쿠키 : 서버가 자신이 필요한 정보를 클라이언트에 심어놓는 것. 클라이언트가 접속시 자신(서버)이 심어놓은 쿠키 파일을 불러온다. 사용자 ID와 비밀번호, 방문횟수, 사용 패턴등을 분석 가능하다.

230px-Choco_chip_cookie.jpg

  • MS IE : Cookie 라는 폴더
  • 파폭 등은 cookie.txt
  • 쿠키 제한 : 모두 300개 까지만 사용가능
  • 쿠키 최대 크기 : 4KB

 

● 서블릿/JSP는 쿠키를 위해서 Cookie 클래스를 제공한다. 쿠키를 웹 브라우저에 전달하기 위해서는 HttpServletResponse의 addCookie() 메소드를 이용한다.

쿠키 설정하기 절차(심기)

[1]. Cookie 객체를 만든다.

[2]. 쿠키에 속성을 부여한다.

[3]. 쿠키를 전송한다.

Cookie c1 = new Cookie("id", "honeymon");

c1.setMaxAge(-1); // 브라우저가 끄면 사라진다.

res.addCookie(c1);

ex) Cookie(String name, String value) 쿠키의 이름, 값이 필요하다.

  • void setMaxAge(int expiry) 쿠키의 유효한 기간을 설정(단위 : 초)
  • void setValue(String newValue) 새로운 쿠키 값을 설정한다.

    • 정수로 변환시 Integer.parseInt(); 를 사용해준다.

 

Cookie c1 = new Cookie("id", "honeymon");

c1.setMaxAge(60 * 60 * 24 * 365); => 1년간 유지됨

c1.setMaxAge(-1); // 브라우저가 끄면 사라진다.

 

웹 브라우저에 쿠키 전송하기

쿠키의 속성값이 설정되면, 서블릿/JSP는 HttpServletResponse 클래스를 이용해서 웹 브라우저에 쿠키를 설정한다. 이 때 HttpServletResponse으 addCookie() 메소드를 사용한다.

  1. response.addCookie(cookie); --> res.addCookie(c1);

 

쿠키 정보 얻기(뽑기!)

클라이언트에 설정된 쿠키 정보는 웹 브라우저가 다시 웹 사이트를 방문할 때 웹 브라우저에 의해 자동적으로 웹 서버에 전달한다. 쿠키로부터 정보를 얻어 오려면 다음과 같은 절차를 따른다.

[1] 사용자의 요청에서 모든 쿠키를 얻는다.

[2]. 원하는 쿠키를 이름을 통해서 얻는다.

 

 

[3]. 찾은 쿠키로부터 값을 얻는다.

  1. Cookie[] cookies =  request(=req).getCookies();
  2. for ( Cookie mycookie : cookie ) {
       String n = mycookie.getName();
  3. }
    String value = mycookie.getValue();

 

ex) 서블릿/JSP 에서 쿠키 얻기
  1. Cookie[] cookies =  request(=req).getCookies();

 

ex) 쿠키의 이름을 이용해서 원하는 쿠키 찾기
  1. for ( Cookie mycookie : cookie ) {
       String n = mycookie.getName();
    }

 

ex) 쿠키의 값 추출하기
  1. String value = mycookie.getValue();

 

CookieTest.java

  1. import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;

    public class CookieTest extends HttpServlet {
        PrintWriter out;

        protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
            out = res.getWriter();
            res.setContentType("text/html; charset=euc-kr");

            Cookie[] cookies = req.getCookies();

            if ( cookies != null ) {
                for ( Cookie cookie : cookies ) {
                    String name = cookie.getName();
                    String value = cookie.getValue();
                    out.println("Cookie name : "+name+"<br>");
                    out.println("Cookie value : "+value+"<hr>");
                }
                out.println("<a href=CookieTest>다시방문하기</a>");
            } else {
                out.println("No cookies..");
                setCookies(res);
            }
        }

        public void setCookies(HttpServletResponse res){
            Cookie logCookie = new Cookie("login", "honeymon");
            logCookie.setMaxAge(-1);

            Cookie passCookie = new Cookie("pass", "wow");
            passCookie.setMaxAge(-1);

            res.addCookie(logCookie);
            res.addCookie(passCookie);

            out.println("<hr>cookie가 setting 되었습니다.<hr><br>");
            out.println("<a href=CookieTest>돌아가기</a>");
        }

    }

 

CookieTest.java(수정판 : 읽을 때마다 Count를 증가시킴)

  1. import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;

    public class CookieTest extends HttpServlet {
        PrintWriter out;

        protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
            out = res.getWriter();
            res.setContentType("text/html; charset=euc-kr");

            Cookie[] cookies = req.getCookies();

            if ( cookies != null ) {
                for ( Cookie cookie : cookies ) {
                    String name = cookie.getName();
                    String value = cookie.getValue();
                    out.println("Cookie name : "+name+"<br>");
                    out.println("Cookie value : "+value+"<hr>");

                    if ( cookie.getName().equals("count") ) {
                        //value에 1을 더하고 새로운 value를 세팅
                        value = Integer.toString(Integer.parseInt(cookie.getValue()) + 1);
                        //새값이 설정된 쿠키를 브라우저로 전송
                        Cookie countCookie = new Cookie("count",value);
                        res.addCookie(countCookie);

                        //cookie.setValue(value);
                        //res.addCookie(cookie);  이녀석도 된다. ㅡㅅ-)>
                    }
                }
                out.println("<a href=CookieTest>다시방문하기</a>");
            } else {
                out.println("No cookies..");
                setCookies(res);
            }
        }

        public void setCookies(HttpServletResponse res){
            Cookie logCookie = new Cookie("login", "honeymon");
            logCookie.setMaxAge(-1);

            Cookie passCookie = new Cookie("pass", "wow");
            passCookie.setMaxAge(-1);

            Cookie countCookie = new Cookie("count","0");
            countCookie.setMaxAge(-1);

            res.addCookie(logCookie);
            res.addCookie(passCookie);
            res.addCookie(countCookie);

            out.println("<hr>cookie가 setting 되었습니다.<hr><br>");
            out.println("<a href=CookieTest>돌아가기</a>");
        }

    }

CookieTestRun.JPG CookieTest.JPG

이 글은 스프링노트에서 작성되었습니다.

이 작업을 하기 위해 필요한 사전 준비
1. javaFX SDK 설치하기 : http://java.ihoney.pe.kr/34
2. 넷빈 설치하기 : http://java.ihoney.pe.kr/35
3. javafx.com 에서 넷빈용 플러그인 설치하기 : http://www.javafx.com/downloads/windows.jsp
 - 현재는 윈도우와 맥 용만 제공되고 있습니다. ㅡㅅ-)>



이클립스도 그렇지만, 넷빈도 Procject를 생성해야지 fx파일을 생성해서 실행해 볼 수가 있습니다. file -> new Procject 클릭하세요. ^^
간단하게 프로젝트명을 입력하고 Finish를 누릅니다. ^^
Create Main File을 생성하시면, 다음과 같이 기본 fx가 생성되어 나타납니다.

/*
 * Main.fx
 *
 * Created on 2009. 5. 24, 오후 10:19:36
 */

package javafxapplicationproject;

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.scene.text.Font;

/**
 * @author Honeymon
 */

Stage {
    title: "Application title"
    width: 250
    height: 80
    scene: Scene {
        content: Text {
            font : Font {
                size : 16
            }
            x: 10, y: 30
            content: "Application content"
        }
    }
}
위의 코드를 JavaFX에서 실행하면 아래처럼, 웹브라우저에 Application content 라는 내용이 나타납니다. 마치 프로그래밍 언어의 'Hello, World'와 같다고 할 수 있겠죠. ㅡㅅ-);; 이렇게 하니까 성의가 없어보이는군요!!! Hello, world로 해줘도 되었는데... 그냥 썼으니... 이 귀차니즘이란!!!

자, 이번에는 동그라미를 그려보도록 하겠습니다. ^^
/*
 * Main.fx
 *
 * Created on 2009. 5. 24, 오후 10:19:36
 */

package javafxapplicationproject;

import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
import javafx.scene.shape.Circle;
import javafx.scene.paint.Color;

/**
 * @author Honeymon
 */

Stage {
    title: "Application title"
    width: 250
    height: 80
    scene: Scene {
            content: Circle {
        centerX: 100, centerY: 100
        radius: 40
        fill: Color.YELLOW
    }

    }
}
참 쉽죠잉~~?? ㅡㅅ-);; 기본 예제는 사용하는 방법을 알려주기 때문에 쉽지요. 거기서 응용을 들어가면... OTL...
이제 자바스크립트를 열심히 배워줘야겠습니다. 훗~~ 모두들 ^^ 즐거운 한주 보내세요.
2009년 5월 23일 토요일, 데브멘토에서 주관하고 있는 DTFE(개발자 페스티벌)의 세미나중 하나인 JavaFX(자바모델링, 윤익환님 강연) 세미나가 있어서 도곡역에 위치한 군인공제회 건물을 향했습니다. ㅡㅅ-);; 저 간판을 보고 잠시 방황했습니다. 표지판이 뭐 저래!!

이 건물에는 IBM이 입주해있습니다. ㅡㅅ-)>
IBM가 DTFE를 협찬하면서, 세미나 전후에 자사의 서비스 들을 소개하는 경우를 보게되는군요. 좋은 내용들이어서 크게 거부감을 느끼거나 하지는 않았습니다. ^^ 자~ 강연이 있는 21층(발송된 문자에는 71층!!! 이런 고층빌딩이!!)으로 향했습니다.
IBM 연구소에서 하는 강연이었기 때문에, 보시다 시피, IBM Badge가 있는 직원만 이용할 수 있다고 합니다. 그래서 세미나 참관객들이 엘리베이터에 타면, 진행요원들이 재빠르게 탑승해서 카드를 찍어주더군요. ㅎㅎ. ㅡㅅ-) 뭔가 있어보였어요.

이번에 IBM에서 밀고 있는 슬로건이더군요. 보다 스마트한(효율적이고 지능적인... 그런 느낌?) 시스템을 개발하여 지구를 바꿔보겠다는 그런 내용인 듯 했습니다. ㅎㅎ 여전히 영어가 짧은 관계로 대략 그런 느낌을 받을 뿐이었습니다. OTL... 세계 정복을 하기 위해서는 영어는 필수인 듯 합니다. 그런 다음에, 한국어를 세계 공통어로 만들어버리겠습니다. 훗~!!
관련내용 : http://www.ibm.com/ibm/ideasfromibm/us/smartplanet/topics/healthcare/20090223/index1.shtml


자~!! 세미나 현장으로 들어가볼까요~? ^^


먼저 IBM의 윤서익 차장님이 IBM의 SMARTER PLANET 에 대해서 설명하셨습니다. 좋은게 좋은거죠!!


조금 일찍 들어간 탓에 사람은 그렇게 많지는 않았습니다. 시작하기 직전에 우르르 올라오시더군요. ^^



제가 요즘 읽고 있는 더글라스 크락포드 님의 JavaScript The Good Parts 라는 책 입니다. 살짝 맛만 봤던 JavaScript의 정수를 모아놓은 자바 정석이라고 할 수 있겠군요. ㅡㅅ-);; JavaScript와 관련된 내용은 (http://java.ihoney.pe.kr/4)을 참조해주세요. ^^ 먼저 말씀드리자면, JavaFX를 제대로 활용하기 위해서는 스크립트 언어(제 생각에는 JavaScript를 기반으로 하는 듯)를 잘 익혀야 합니다.
저의 경우에는 OpenAPI를 이용해서 매쉬업 프로그램을 만들어보고 싶어서 뒤늦게 시작하고 있는데, 나쁘지 않은 선택인 것 같습니다. ^^ 여러분들도 JavaFX를 공부해보세요!!
자바스크립트 핵심 가이드
카테고리 컴퓨터/IT
지은이 더글라스 크락포드 (한빛미디어, 2008년)
상세보기



강연이 시작하기 전, 빔프로젝트가 뿌려주는 동영상에서는 반복적으로 'I'm IBMER'라고 외치더군요. ㅡㅅ-);; 머릿 속에 각인되어버렸습니다. 나도 아이비에머가 될 것 같아요. ㅎㅎ.


오늘 세미나 강연자인 고덕한 님입니다. 좋은 인상으로 말씀하시는게 상당히 리드미컬하시더군요. ^^ 22기 스터디 그룹을 모집하고 계시답니다(http://www.javamodeling.com/index.jsp). 관심있으신 분은 참석하여보시기 바랍니다. ^^; 세미나 자료를 얻고 싶어서 가입했는데 아직 관련한 자료는 안올리셨나봐요?


오늘의 주제인 JavaFX 입니다. JavaFX에 대해서는
http://www.sun.com/software/javafx/index.xml
http://www.javafx.com/
http://java.ihoney.pe.kr/9
http://java.ihoney.pe.kr/26
의 내용을 참조해 주세요. ^^


핸드폰으로 찍은 사진이라 화질이 좋지 못한 점은 양해 부탁드립니다. 강연을 마치고 나니까, 저도 스터디를 다시 시작해야겠구나라는 생각을 하게 되었습니다. ^^; 개인적으로 하고 있기는 하지만, 개인이 할 수 있는 것의 한계가 곧 나타날 것이고 그걸 극복할 수 있는 방법은 그룹 스터디를 통해서 다른 사람들과 지식을 공유하는 방법일 것입니다. 우선은 제가 있는 기술교육센터에서 다시한번 조성을 해봐야겠습니다. ^^

  전체적으로 유익한 강연이었습니다. JavaFX를 구현하는 방법을 조금이라도 감을 잡을 수 있었으니까요. 강연을 듣고 집에오자마자 netbeans를 설치하였습니다. NetBeans 설치방법은 (http://java.ihoney.pe.kr/35)을 참조하시면 손쉽게 하실 수 있을 겁니다. ㅡㅅ-) 어렵지 않아요. 다운 받아서 실행하고 다음다음~~만 눌러주시면 됩니다. ^^




이상으로 JavaFX 세미나에 관한 내용을 마칩니다. ^^
그럼 다음 글은 JavaFX를 이용해서 간단하게 구현한 것을 보여드리겠습니다. ㅡㅅ-)b

'Java > Language' 카테고리의 다른 글

09/05/22 쿠키  (0) 2009.05.25
허니몬, JavaFX 예제 만들기  (0) 2009.05.24
Java IDE, NetBeans를 설치하다.  (0) 2009.05.24
JavaFX SDK 1.1 설치하기  (0) 2009.05.24
j2ee API DOCs, 자바EE 한글화 API 문서(1.3.1 버전)  (0) 2009.05.21
JavaFX를 설치하고 이를 IDE를 통해서 개발하기 위해서는 이클립스나 넷빈 둘 중에 하나를 선택해서 사용하는 것이 좋은 듯 합니다. 두 개발툴 모두 자바 개발툴로서 나름 한가닥씩 하는 곳(IBM, SUN)에서 개발한 개발툴이고, 다양한 플러그인을 지원하고, 지속적으로 업그레이드가 진행되기 때문에 안정적으로 사용할 수가 있지요. ^^; 다만 메모리를 많이 잡아먹는다는 단점이 있다는 것은 흠이라면 흠이라고 할 수 있겠네요. 이는 JVM 때문이기도 할 겁니다. 일반적인 데스크탑에서는 어떨지 모르겠네요. ^^;

넷빈을 다운 받을 수 있는 곳은 http://www.netbeans.org 이곳을 방문하셔서 보이시는 DownLoad NetBeans IDE를 클릭하시면 되겠습니다.

넷빈의 설치를 위해 인스톨러가 설치를 준비하고 있는 모습입니다. ^^

제가 설치한 버전은 All Version을 설치하였습니다. 여기에다가 JavaFX 플러그인을 설치해주었습니다. 리눅스에서는 어떻게 될지 모르겠네요. ㅡ0-);; 우분투에서는 sudo apt-get install netbeans 하면, 자동으로 연결되어서 설치가 되는데 말이죠. ^^;;
필요한 용량은 642.1 MB 이군요. ㅡ_-);; 그래도 뭐... MS의 VS 에 비하면 가볍죠. ㅎㅎ

위의 라이센스에 동이한다고 하시고 체크 해주신다음 next를 누르면 됩니다. ^^

다음은 설치경로를 확인하시면 되겠습니다.
GlassFish는 무엇에 쓰는 녀석일까요? 서버라고 하는 것 같은데 말이죠... 흐흠... 거기에 Apache Tomcat이 설치되는군요. 최근 자바 서블릿과 관련된 부분을 공부하고 있는데, 아마도 웹 컨테이너(웹엔진)으로서 사용을 하게 되는 것 같습니다. ㅡ_-); 흐음~~ 암튼 설치 고고!!
설치가 완료되었습니다. NetBeans 프로젝트에 익명성을 가지고서 사용과 관련된 데이터들을 제공한다는 내용인 듯 하군요.
자, 넷빈을 설치한 화면 입니다. 깔끔하죠. ㅡㅅ-)>

설치를 했으면 구동을 시켜봐야겠지요? ^^ 그럼 간단하게 HelloWorld를 출력하여 보도록 하겠습니다.

+ Recent posts