레이블이 자바괄호체크인 게시물을 표시합니다. 모든 게시물 표시
레이블이 자바괄호체크인 게시물을 표시합니다. 모든 게시물 표시

2013년 11월 6일 수요일

자바 클래스, 메소드, 멤버(인스턴스, 클래스)변수 선언, 접근제어자,

자바 클래스, 메소드, 멤버(인스턴스, 클래스)변수 선언, 접근제어자,
 
1. 클래스 선언
 
선언하면서 붙여야 하는 키워드
 - public(접근지시자가 맨 처음 온다. 생략 가능)
 - abstract(클래스의 종류를 명시, abstract라고 쓰면 추상클래스를 의미, 생략가능 )
 - final(클래스의 종류를 명시, 생략가능)
 - ClassName(클래스 이름, 대문자로 시작)
 - extends(다른클래스를 상속)
 - implements(인터페이스 구현)
   예)public abstract class MyClass extends Circle implement MyInterface {

2. 멤버 변수 선언

클래스 선언 방법과 동일하며 transient와 volatile 등이 차이가 있다.
 - access level(public, protected, friendly, private)
 - static (클래스 변수 선언)
 - final(상수임을 지정)
 - transient(transient 변수 선언) 직렬화에서 제외
 - volatile(volatile 변수 선언)
         어떤 데이터값이 특정 객체에서만 사용되는것이 아니라 다른 객체에서도 변경
         및 참조할 수 있는 값으로 사용되고자 할때 쓰는 키워드입니다
 - type name(기본데이터 타입, 참조타입)
   예)public static final double PI = 3.141594;
  
  
3.    메소드 선언
 
접근제어자, Return Type, Method Name, Parameter 형식으로 작성
Method Signature : 메소드 이름, 인자 타입, 인자 갯수
 (주의 : 메소드의 리턴형(Return Type)은 메소드 시그네쳐가 아님, 즉 리턴타입이 틀리더라도 같은 메소드로 인식)
   예)public void setAge(int age) {
  
   예) public void setAge(int age), public int setAge(int age) 는 같은 메소드로 인식, 컴파일 오류

2013년 8월 8일 목요일

[오라클자바커뮤니티, 자바교육]스트럿츠에서의 파일 업로드 Example 입니다.(struts file upload)

스트럿츠에서의 파일 업로드 Example 입니다.(struts file upload)


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)  



스트럿츠의 폼에서 File을 인식하기 못하기 때문에

org.apache.struts.upload.FormFile 클래스를 사용하여야 합니다.

제가 작업하던중 스트럿츠의 파일 업로드에 사용한 소스입니다.

궁금하신 점은 답글 남겨주시거나 메일 보내주시면 대답해 드리겠습니다. ^^


///////////////// image_insert.jsp/////////////////////////////////////


<%@ page contentType="text/html;charset=EUC-KR" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>


<html:form action="/ImageInsert" enctype="multipart/form-data" >
  <table>
    <TR bgcolor=FFFFFF>
                      <TD height="30" bgcolor='#E6EBF0'>* 이미지(대)</TD>
                      <TD colspan="2">
                        <html:file property="image_path[0]" size="30"/>       
                      </TD>
                    </TR>
                    <TR bgcolor=FFFFFF>
                      <TD height="30" bgcolor='#E6EBF0'>* 이미지(중)</TD>
                      <TD colspan="2">
                        <html:file property="image_path[1]" size="30"/>               
                      </TD>
                    </TR>
                    <TR bgcolor=FFFFFF>
                      <TD height="30" bgcolor='#E6EBF0'>* 이미지(소)</TD>
                      <TD colspan="2">
                        <html:file property="image_path[2]" size="30"/>               
                      </TD>
                    </TR>
  </table>
</form:html>

///////////////////struts-config.xml///////////////////////////////////

<form-beans>
  <form-bean name="imageinsertForm" type="ImageInsertForm"/>
</form-beans>

<action-mappings>
  <action         
                path="/ImageInsert"
                type="ImageInsertAction"
            name="imageinsertForm"                       
            validate="false"
            input="/image_insert.jsp"
        />

///////////////////ImageInsertForm.java///////////////////////////////

import org.apache.struts.upload.FormFile;
public class ImageInsertForm  extends ActionForm
{

    private FormFile[] image_path = new FormFile[3];
   
    public FormFile[] getImage_path() {
                return image_path;
        }
        /**
        * @param image_path The image_path to set.
        */
        public void setImage_path(FormFile[] image_path) {
                this.image_path = image_path;
        }
}       

////////////////////ImageInsertAction.java/////////////////////////////

import org.apache.struts.upload.FormFile;

public class GoodsInsertAction extends BaseAction
{
        public ActionForward execute(ActionMapping mapping, ActionForm form,HttpServletRequest request, HttpServletResponse response)
        {
                  FormFile image_path[] = ((ImageInsertForm)form).getImage_path();
                  ImageDAO imageDAO = new ImageDAO();
                  imageDAO.imageInsert( image_path );
                 
                  return (mapping.findForward( "image_insert_success" ));
        }
}

/////////////////////////// GoodsFile.java////////////////////////////
/**
 * @author Administrator
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class GoodsFile
{
        private String fileName = null;
        private String tempFileName = null;

        public String getFileName() {
                return fileName;
        }
       
       
        public String getTempFileName() {
                return tempFileName;
        }
       


        public void setFileName(String fileName) {
                this.fileName = fileName;
        }



        public void setTempFileName(String tempFileName) {
                this.tempFileName = tempFileName;
        }
}

////////////////////ImageDAO.java///////////////////////////////////

import org.apache.struts.upload.FormFile;

public class ImageDAO
{

    public  void imageInsert( FormFile[] image_path )
    {
        Connection con=null;
        PreparedStatement pstmt=null;
        ResultSet rs = null;
        String sql = "";
        GoodsFile goodsFile[] = new GoodsFile[ 3 ];
        String path = "D:\\upload";

        try
        {
                for( int i = 0 ; i < 3 ; i++ )
                {
                        goodsFile[ i ] = FileUploadUtil.doFileUpload( image_path[ i ] , gcode , Integer.toString( ( i + 1 ) ) );
                }

                con = DriverManager.getConnection(ConnectionPoolManager.URL_PREFIX+"oraclejava");
               
                sql = "INSERT INTO IMAGES( IMAGE_PATH1 , IMAGE_PATH2 , IMAGE_PATH3 ) VALUES(  :IMAGE_PATH1 , :IMAGE_PATH2 , :IMAGE_PATH3 );
                pstmt = con.prepareStatement(sql);
                pstmt.setString( 1 , goodsFile[ 1 ].getFileName()  );
                    pstmt.setString( 2 , goodsFile[ 2 ].getFileName() );
                    pstmt.setString( 3 , goodsFile[ 3 ].getFileName() );
                pstmt.executeUpdate();
 
                }
        catch( Exception e )
        {
                return null;
        }
        finally
        {
                    try
                {

                    if ( rs != null )
                        rs.close();
                    if ( pstmt != null )
                        pstmt.close();
                    if ( con != null )
                        con.close();
                }
                catch ( Exception ignore )
                {
               
        }         
    }
}


///////////////////////FileUploadUtil.java/////////////////////////////
ublic class FileUploadUtil
{
        public static GoodsFile doFileUpload(FormFile fileList  )
        throws FileNotFoundException, IOException
        {
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                InputStream stream = fileList.getInputStream();

                               

                //파일을 업로드할 절대 경로를 지정해야 한다.
                String path = "D:\\upload\";
                OutputStream bos = new FileOutputStream( path + fileList.getFileName()  );
                int bytesRead = 0;
                byte[] buffer = new byte[8192];
                while ((bytesRead = stream.read(buffer, 0, 8192)) != -1)
                {
                        bos.write(buffer, 0, bytesRead);
                }
                bos.close();
                stream.close();

        GoodsFile boardFile = new GoodsFile();
        boardFile.setFileName(fileList.getFileName());
        boardFile.setTempFileName(fileList.getFileName() );

        return boardFile;
}
[출처] 오라클자바커뮤니티 - http://www.oraclejavanew.kr/bbs/board.php?bo_table=LecStruts&wr_id=64

Struts 커스텀 태그 개요 (custom tag)

JSP의 커스텀 태그에 관련 부분은 JSP강좌를 참고 하시기를 바라며 여기서는 Struts의 Taglib에 대해 살펴 보도록 하겠습니다.


------------------------------------------------------------------
먼저 TagLib을 위한 설치/사용 과정에 대해 잠시 정리해 보도록 하겠습니다.
------------------------------------------------------------------

1. taglib을 사용하기 위해서는 우선 JAR파일을 /WEB-INF/lib에 복사를 한 후 tld파일들은 꼭은 아니지만 대부분 /WEB-INF/ 폴더에 위치를 시킵니다.

2. 필수 사항은 아니지만 web.xml에 uri와 location을 설정 합니다. 아래의 예를 볼까요…

<web-app>
        <taglib-uri>/tags/struts-bean</taglib-uri>
        <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
</web-app>

이러한 식으로 매핑을 하게 되는데 이 과정을 생략하고 JSP에서 직접 tld 파일을 부르게 되는 경우에는 추후 파일의 이름이나 위치가 바뀌는 경우 모든 JSP 파일에서 일일이 수정을 해야 하는 번거로움이 있으니 web.xml에서의 매핑은 필요한 것 입니다. 또한 uri와 location을 같게 하면 추후 TLD 파일의 위치가 변경되면 문제가 발생할 수도 있습니다.

때에 따라서는 tld와 jar를 /WEB-INF/lib에 두기도 하며 tld를 위해 별도의 폴더를 만들기도 합니다.

3. 새롭게 정의한 taglib을 JSP에서 사용 하기
taglib을 가지고 올 때 web.xml의 uri를 통해 참조하게 되는데 taglib 지시자에서 다음과 같이 정의 합니다.

<%@ taglib uri=”/tags/struts-bean” prefix=”bean” %>

그런 다음 JSP페이지에서 prefix를 이용하여 다음과 같이 사용 합니다.

<bean:write name=”userInfo” property=”lastName”/>



--------------------------------
자바 빈 사용하기
--------------------------------

애플리케이션을 만들 때 스트럿츠에서 제공하는 태그 라이브러리만 이용하라는 법은 없습니다. SUN의 JSTL, Jakarta Taglibs, Improve의 Struts-Layout등의 다른 표준 태그 라이브러리도 이용 가능 합니다.

스트럿츠에는 bean, html, logic, nested와 같은 4가지의 핵심 태그 라이브러리를 제공 합니다.

bean : 자바빈의 프로퍼티에 접근하기가 용이하며 새로운 자바 빈을 정의하는데도 사용 됩니다.

html : 스트럿츠 프레임워크와 상호 작용 가능한 HTML 입력 폼을 생성하는데 사용 또는 HTML Tag와 관련된 태그

logic : 조건적인 결과물의 실행, 반복실행, 애플리케이션의 흐름을 관리하는 태그
nested : 다른 스트럿츠 태그들의 기능을 포함하는 확장된 성능을 제공 하는 태그


-------------------------------------------
Struts 태그와 함께 자바 빈 사용 하기
-------------------------------------------

대부분의 경우 태그 라이브러리에 있는 태그들을 자바 빈즈와 함께 사용 합니다. 태그들과 함께 사용되는 자바 빈즈는 HTML의 입력 폼 필드에 대응하는 ActionForm 일 수도 있지만 ActionForm이 아닌 경우 보통 MODEL Layer의 VO(Value Object) 입니다. 이러한 VO는 Page, Request, Session, Application등의 Scope안에 존재 할 수 있습니다.



오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)  



1.        단순 프로퍼티의 접근


단순 프로퍼티의 접근은 JSP의 <jsp:getProperty>액션과 동일하게 수행 됩니다. “property=firstName”이라는 프로퍼티는 메소드 getForstName()이나 setFirstName()의 호출로 변환 됩니다.

2.        중첩된 프로퍼티의 접근

중첩된 프로퍼티들은 마침표(.)로 구분되는 이름 계층구조를 사용하여 프로퍼티에 접근 합니다. 다음과 같은 프로퍼티 레퍼런스가 있다면

“property=user.address.city” 이 레퍼런스는 다음과 같은 자바 구문으로 변환 됩니다.

getUser().getAddress().getCity()

만약 입력 폼에서 수행되는 setter에서 중첩된 레퍼런스를 사용 했다면 중첩된 레퍼런스의 맨마지막  프로퍼티에서는 setter가 호출 됩니다. 이 경우 앞의 프로퍼티 레퍼런스는 다음과 같은 자바 구문으로 변역 됩니다.

getUser().getAddress().setCity()

3.        인덱스 프로퍼티

인덱스가 있는 프로퍼티에서는 첨자를 사용하여 프로퍼티에 속한 각 요소에 접근 합니다. 예를 들어 다음과 같은 프로퍼티 레퍼런스가 있다고 할 때

“property=”address[2]”

이 레퍼런스 구문은 다음과 같은 자바 구문으로 변환 됩니다.

getAddress(2);

setter에서 같은 프로퍼티 레퍼런스를 사용했다면 setAddress(2, address); 와 같은 자바 구문으로 변환 됩니다. 

자바 AWT에 관하여

이번강좌에서는  AWT(Abstract Windows Toolkit) 프로그래밍에 대해 알아 보겠습니다.

오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의)  





AWT (Abstract Window Toolkit) 프로그래밍

- 윈도우 프로그래밍을 위한 UI 컴포넌트와 보조라이브러리를 모아놓은 툴 킷을 말합니다.
- 모든 윈도우 Component는 Component Class(자바 AWT의 모든 Component들이 가져야 하는 속성과 메소드를 가지고 있슴)로 부터 상속 을 받습니다.
- 이들 Component는 두가지로 구분되는데 다른 Component를 자신안에 둘수 있는 컨테이너, 또 다른 하나는 컨테이너 역할을 할수 없는 단순한 Component 가 있습니다.
- 관련 클래스는 Java.awt Package안에 포함되어 있습니다.
- 일정하게 정해진 모양이 없다는것은 장점 인듯하나 Component의 정렬등 기타 문제점으로 인해 현재는 Swing을 주로 사용 합니다.
- OS마다 사용하는 Window창, Font등이 다르므로 자바에서는 AWT를 제공하며 , 실행될때 각 OS에서 적합한 Component로 대체 됩니다. 현재 OS 의 각 Component를 Peer Component라고 한다.
- AWT 패키지의 각 Component가 생성 되거나 임의의 Container 또는 하위 Class에 등록 되어서 표시 되어야 할 때 해당 Component의 addNotify 메소드가 호출되며 여기 에서는 다시 java.awt.Toolkit의 createButton과 같은 메소드를 사용하여 현재 OS에 상응하는 Peer Component를 생성 합니다.


AWT Component의 종류
1. Window : 경계표시, 타이틀바등이 없는 단순한 사각형 윈도우 Component 자신안에 다른 Component를 담으면서 동시에 자신은 독립적인 윈도우를 생성
2. Frame : 경계표시와 타이틀바를 가지는 윈도우 Component(Window Class를 상속 받음) , 프레임은 실질적으로 사용되는 가장 기본적인 윈도우로 우리가 윈도우라 부르는 것은 보통 이 프레임을 말함
3. Button : 버튼을 표시하는 Component
4. Canvas : 빈 사각형 영역을 나타내는 Component(주로 그래픽이나 이미지를 표현 하는데 사용)
5.CheckBox : 선택된 상태와 선택되지 않은 상태 두가지를 가지는 Component(그룹 화 또는 개별로 존재 가능)
6. Choice : 흔히 팝업메뉴라고 불리는것, 여러요소중 하나를 선택
7.Dialog : 대화상자 윈도우, Frame위에서 작은 윈도우를 하나더 띄움
8.FileDialog : 파일을 선택할수 있는 파일대화상자
9.Label : 문자열을 나타내는데 사용되는 Component
10. List : 여러 개의 텍스트 목록을 나타내는Component(목록에서 하나또는 여러개 선택가능)
11. Panel : 다른 Component를 배치하는데 사용되는 간단한 Container Component, 판넬Panel은 윈도우(프레임) 안에 부착된 여러 컴포넌트들을 비슷한 기능끼리 함께 모아두는 컨테이너 입니다. 이런 점에서, Window 와 그 부속 컨테이너들은 독립된 윈도우를 구성하는 반면, 판넬은 독립적인 창 구실은 할 수 없고, 오로지 기존 윈도우의 한 컴포넌트로서만 사용 됩니다.
12. ScrollBar : 사용자가 어떤 영역안에서 값을 선택할수 있게 해 줍니다.
13. ScrollPane : 다른 Component를 담고서 스크롤바를 움직임에 따라 자동으로 다른 Component의 위치를 변경시켜주는 Component, 스크롤 부착창ScrollPane은 수평 및 수직 스크롤바를 부착하기 위한 창입니다.
14. TextField : 한줄로 된 Text입력 Component
15. TextArea : 여러줄 입력이 가능한 텍스트 입력 Component

종류는 아래와 같습니다.


GUI 프로그램의 구조



아래는 AWT를 이용한 윈도우를 띄우는 샘플 입니다.

import java.awt.*;
public class HelloWindow1 extends Frame {
public HelloWindow1(String title) {
super(title);
}
public static void main(String args[]) {
HelloWindow1 frame = new HelloWindow1("AWT Sample1"); frame.setSize(400,400);
frame.setVisible(true);
}
public void paint(Graphics g) {
g.drawString("HelloWindow1", 150, 150);
}
}

[결과]




2013년 8월 6일 화요일

(오라클자바교육,ORACELJAVA강좌)JAVA Swing과 JDBC(오라클)를 이용한 예제

//오라클의 EMP Table의 데이터를 가지고 화면에 뿌리는 예제
//이름을 입력하고 Enter Key를 누르면 JDBC를 이용하여  데이터를 가지고 옵니다.


오라클자바커뮤니티에서 설립한 오엔제이프로그래밍 실무교육센터
(오라클SQL, 튜닝, 힌트,자바프레임워크, 안드로이드, 아이폰, 닷넷 실무전문 강의) 
 www.onjprogramming.co.kr  


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import java.sql.*;

class DBTest {
        JTextField name;    JPasswordField tel;  JTextField addr;
        public DBTest() {
                JFrame f = new JFrame();
                Container cp = f.getContentPane();
                cp.setLayout(new FlowLayout());
                name = new JTextField("",10);
                name.setCaretColor(Color.blue);
                tel  = new JPasswordField("",10);
               
                                tel.setEditable(false);
                addr = new JTextField("",10);
                addr.setEditable(false);
                cp.add(new JLabel("성명 : "));        cp.add(name);
                cp.add(new JLabel("전화번호 : ")); cp.add(tel);
                cp.add(new JLabel("주소 : "));        cp.add(addr);

                name.addActionListener( new ActionListener()
                        {
                                public void actionPerformed(ActionEvent ae) {
                                        dataGet();
                                }
                        }
                );
                f.setSize(600, 100);                f.setVisible(true);
        }
       
                public static void main(String[] args) {
                new DBTest();       
        }

        public void dataGet() {
                Connection con=null;
                Statement stmt=null;
                ResultSet rs=null;
                try {
              Class.forName("oracle.jdbc.driver.OracleDriver");                       
                  con = DriverManager.getConnection("jdbc:oracle:thin:@***.***.***.***:1521:WINK", "test", "test");
                  stmt = con.createStatement();
                  rs = stmt.executeQuery("select tel, addr from emp where name = " + "'" + name.getText().trim() + "'");
                  if (rs!=null) {

                                            rs.next();
                          tel.setText(rs.getString("tel"));
                          addr.setText(rs.getString("addr"));
                  }
                }
                catch(Exception e) {System.out.println(e);}
                finally {
                        try        {
                                if (con != null) {con.close();        }
                        }
                        catch (Exception e){}
                }
        }
}


2013년 8월 5일 월요일

java Brackets Balance Method

자바 스택을 이용한 괄호 체크 하는 메소드 입니다. 

public static boolean bracketsBalance (String exp) {
    ArrayStack stk = new ArrayStack(exp.length() +1);
    for (int i = 0; i < exp.length(); i++) {
         char ch = exp.charAt(i);
         //시작괄호 이면 스택에 넣음
         if (  ch== '[' || ch == '('  )  {
            stk.push( new Character(ch));
         }        
         else if(ch == ']' || ch == ')')  { 
 //파싱중 우측괄호를 봤는데, 스택이 비어있다면 오류
 if (stk.isEmpty())   return false;          
               //우선 스택에서 하나를 꺼낸다.                       
               char charFromStack = ((Character)stk.pop()).charValue();
    // 파싱한것이 ‘(‘ 인데 스택에서 꺼낸것이 ‘)’ 아니거나,
               //  파싱한것이 ‘[’ 인데 스택에서 꺼낸것이 ‘]’ 아닌경우
     if (  ch == ']' && charFromStack != '['
    ||  (ch == ')' && charFromStack != '(')  )
    return false;
 } // end if
    } // end for loop
    return stk.isEmpty();  //empty means matched,  else unmatched
}