레이블이 자바 JAR인 게시물을 표시합니다. 모든 게시물 표시
레이블이 자바 JAR인 게시물을 표시합니다. 모든 게시물 표시

2013년 10월 22일 화요일

[자바상속컴포지션]Java Inheritance & Composition 상속과 컴포지션은 동전의 양면과 같이 유사하게 서로에게 관련이 있다. 상속은 마치 양파가 여러 껍질로 이루어진 것과 같이 계층화된 객체 컴포지션은 여러 재료(객체)가 한데 뭉쳐서 만들어진 죽 컴포지션은 개체들간의 'has a' 관계, 상속은 ‘is a’관계 상속과 컴포지션은 상호 배타적이지 않으며 개발자는 이 둘을 같이 사용한다. 다음 예제는 ‘is a’와 ‘has a’의 착각에는 나오게 되는 실수이다. 1. 원은 반지름 값을 갖는 하나의 점이다(a Circle is a Point with a radius.) 그래서 Circle은 Point를 상속 class Point { private double x, y; Point(double x, double y) { this.x = x; this.y = y; } double getX() { return x; } double getY() { return y; } } class Circle extends Point { private double radius; Circle(double x, double y, double radius) { super(x, y); this.radius = radius; } double getRadius() { return radius; } } 2. 원은 한 점과 반지름을 가지고 있다(a circle has a point and a radius) class Point { private double x, y; Point(double x, double y) { this.x = x; this.y = y; } //redundant code 로 인한 유지보수 어려움(코드의 재사용 실패) double getX() { return x; } double getY() { return y; } } class Circle { private Point p; private double radius; Circle(double x, double y, double radius) { p = new Point(x, y); this.radius = radius; } double getX() { return p.getX(); } double getY() { return p.getY(); } double getRadius() { return radius; } } [출처] 오라클자바커뮤니티 - http://www.oraclejavanew.kr/bbs/board.php?bo_table=LecJava&wr_id=601 오라클자바커뮤니티에서 설립한 개발자교육6년차 오엔제이프로그래밍 실무교육센터(오라클SQL,튜닝,힌트,자바프레임워크,안드로이드,아이폰,닷넷 실무개발강의) www.onjprogramming.co.kr [개강확정강좌]오라클자바커뮤니티에서 운영하는 개발자 전문교육 ,개인80%환급(www.onjprogramming.co.kr) [주말] [10/26]C#,ASP.NET마스터 [10/26]Spring3.X, MyBatis, Hibernate실무과정 [10/27]JAVA&WEB프레임워크실무과정 [평일야간] [10/29]C#,ASP.NET마스터 [10/25]Spring3.X, MyBatis, Hibernate실무과정 [10/31]JAVA&WEB프레임워크실무과정 [주간] [11/4]Spring3.X, MyBatis, Hibernate실무과정 [기타 다른 강좌는 아래 해당 카테고리를 클릭해주세요] JAVA ORACLE iPhone/Android .NET 표준웹/HTML5 채용/취업무료교육 초보자(재학생)코스

[자바상속컴포지션]Java Inheritance & Composition

상속과 컴포지션은 동전의 양면과 같이 유사하게 서로에게 관련이 있다. 
상속은 마치 양파가 여러 껍질로 이루어진 것과 같이 계층화된 객체
컴포지션은 여러 재료(객체)가 한데 뭉쳐서 만들어진 죽
컴포지션은 개체들간의 'has a' 관계, 상속은 ‘is a’관계
상속과 컴포지션은 상호 배타적이지 않으며 개발자는 이 둘을 같이 사용한다.
다음 예제는 ‘is a’와 ‘has a’의 착각에는 나오게 되는 실수이다.

1. 원은 반지름 값을 갖는 하나의 점이다(a Circle is a Point with a radius.)
   그래서 Circle은 Point를 상속

   
   
class Point {
 private double x, y;
 Point(double x, double y) {
  this.x = x;
  this.y = y;
 }
 double getX() {
  return x;
 }
 double getY() {
  return y;
 }
}
class Circle extends Point {
 private double radius;
 Circle(double x, double y, double radius) {
  super(x, y);
  this.radius = radius;
 }
 double getRadius() {
  return radius;
 }
}
 
2. 원은 한 점과 반지름을 가지고 있다(a circle has a point and a radius)
 
class Point {
 private double x, y;
 Point(double x, double y) {
  this.x = x;
  this.y = y;
 }
 //redundant code 로 인한 유지보수 어려움(코드의 재사용 실패)
 double getX() {
  return x;
 }
 double getY() {
  return y;
 }
}
 
class Circle {
 private Point p;
 private double radius;
 Circle(double x, double y, double radius) {
  p = new Point(x, y);
  this.radius = radius;
 }
 double getX() {
  return p.getX();
 }
 double getY() {
  return p.getY();
 }
 double getRadius() {
  return radius;
 }
}

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


[기타 다른 강좌는 아래 해당 카테고리를 클릭해주세요]

2013년 8월 8일 목요일

[오라클자바닷넷교]Struts Logic Custom Tag

Struts Logic 커스텀 태그 


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


Logic 태그 라이브러리는 출력 텍스트를 조건을 걸어 생성하는 경우나 객체 컬렉션을 돌면서 출력 텍스트를 반복적으로 생성 하는 경우 그리고 애플리케이션의 흐름을 제어 하는 경우 등에 유용한 태그들을 포함하고 있습니다.

사용 용도에 따라 값 비교, 부분 문자열 매칭, 리다이렉팅과 포워딩, 컬렉션 유틸리티  4가지 정도로 기능상 분류 할 수 있습니다.

아래는 Logic 태그 라이브러리내의 커스텀 태그 입니다.

Custom tags within the Logic tag library

empty : 요청한 변수가  null 또는 빈 문자열인 경우 이 태그의 BODY를 수행
equal : 요청한 변수가 지정한 값과 동일한 경우 이 태그의 BODY를 수행
forward : ActionForward Entry를 통해 지정한 페이지로 포워드를 수행
greaterEqual : 요청한 변수가 지정한 값보다 크거나 같으면 이 태그의 BODY를 수행
greaterThan : 요청한 변수가 지정한 값보다 크면 이 태그의 BODY를 수행
iterate : 지정한 컬렉션으로 이 태그내의 BODY 컨텐츠를 반복
lessEqual : 요청한 변수가 지정한 값보다 작거나 동일한 경우 이 태그의 BODY를 수행
lessThan : 요청한 변수가 지정한 값보다 작은 경우 이 태그의 BODY를 수행
match : 지정한 값이 요청한 변수에 포함되어 일치하는 경우 이 태그의 컨텐츠를 수행
messageNotPresent : 지정한 메시지가 이 요청에  없는 경우 이 태그의 BODY 컨텐츠를 생성
messagePresent : 지정한 메시지가 이 요청에  있는 경우 이 태그의 BODY 컨텐츠를 생성
notEmpty : 요청한 변수가 null도 빈 문자열도 아닌 경우 이 태그의 BODY 컨텐츠를 수행
notEqual : 요청한 변수가 지정한 값과 동일하지 않은 경우 이 태그의 BODY 컨텐츠를 수행
notMatch : 지정한 값이 요청한 변수의 문자열의 부분에 없는 경우 이 태그의 BODY 컨텐츠를 수행

notPresent : 지정한 값이 이 요청에 없는 경우 이 태그의 BODY 컨텐츠를 수행
present : 지정한 값이 이 요청에 있는 경우 이 태그의 BODY 컨텐츠를 수행
redirect : HTTP 리다이렉트를 표시


1.        값 비교

비교 결과가 “true” 인 경우에만 body 컨텐츠를 출력 합니다.

값을 취하여 VALUE 속성의 값과 비교, 태그에 주어진 값이 숫자로 변환되는 경우 숫자비교를 수행, 숫자로 변환되지 않는 경우 문자열 지교

<logic:present parameter="id">
<!—요청 파라미터에 “id”가 있으면 이 부분이 출력됨 -->
</logic:present>

어떤 컬렉션에서 반복을 수행하기 전에 컬렉션이 비었는지 여부를 체크하기 위해 아래와 같이 notEmpty를 사용 합니다.

<logic:notEmpty name="userSummary" property="addresses">
<!—사용자의 address 컬렉션에서 모든 객체들을 돌며 반복 출력 합니다.-->
<logic:iterate id="address" name="userSummary" property="addresses">
<!-- Print out the address obejct in a table -->
</logic:iterate>
</logic:notEmpty>

아래는 ActionForm내의 property와 숫자 값을 비교하는 예 입니다.

<logic:lessThan property="age" value="21">
<!-- 21세보다 나이가 작은 경우 이 부분이 실행 -->
</logic:lessThan>

아래는 bean1.value와 bean2.value가 같을 경우 본문을 수행 합니다.

<bean:define id=”value2” name=”beans2” property=”value”/>
<logic:equal value=”<%= (String) value2 %>” name=”bean1” property=”value”>
Equals~~~
</logic:equal>

<logic:equal name="bean" property="doubleProperty" value="<%= doub1 %>">
equal
</logic:equal>
<logic:greaterEqual name="bean" property="doubleProperty" value="<%= doub1 %>">
greaterEqual
</logic:greaterEqual>


이러한 비교를 위한 평가용 태그(equal, notEqual,greaterEqual, lessEqual, greaterThan, leeThan, match, notMatch)는 모두 평가 할 value 프로퍼티를 지정 해야 합니다.

아래는 empty와 notEmpty예제 입니다.

<logic:empty name="myBean">
The bean is missing
</logic:empty>
<logic:notEmpty name="myBean">
The bean is not missing
</logic:notEmpty>


2.        부분 문자열 매칭

value속성에 지정한 문자열과  다른 속성을 통해 주어진 값과 비교를 수행 합니다. 이때 주어지는 값은 cookie, header, parametert, property, name 속성들중 하나 입니다. 매칭 태그에는 값 비교 태그에는 없는 location 속성이 있는데 이는 태그가 문자열의 시작에서  또는 끝부분에서 매칭을 시작할 것인가를 알려 줍니다.

아래는 요청 파라미터 “action”의 값이 문자열 “processLogin”으로 시작하는지 여부를 결정하는 매칭 태그 입니다.

<logic:matchTag parameter="action" value="processLogin" location="start">
Processing Login....
</logic:matchTag>

만약 “location” 속성을 지정하지 않으면 변수와 value 속성값 사이의 매칭은 아무 곳에서나 시작 합니다. Location이 “start”인 경우 value 속성의 값으로 문자열이 시작해야 ”true”임

[브라우저 타입을 확인 하는 예제]

<logic:match header="User-Agent" value="Mozilla">
Mozilla!
</logic:match>
<logic:notMatch header="User-Agent" value="Mozilla">
Not Mozilla :(
</logic:notMatch>


[아래는 빈 프로퍼티와 문자열을 비교 합니다.]
<logic:match name="bean" property="stringProperty" value="hello world">
Hello World!
</logic:match>
<logic:notMatch name="bean" property="stringProperty" value="hello world">
I'm so sad and lonely.
</logic:notMatch>

3.        리다이렉팅과 포워딩

redirect 태그는 컨테이너가 지원하는 경우 URL을 완전히 다시 써서 클라이언트에 보냅니다.

forward 태그는 지정된 전역 ActionForward로 포워딩/리다이렉팅을 수행, redirect와 달리 name 속성을 포함하는데 이것은 ActionForward의 논리적인 이름 입니다. 스트럿츠에서 forward인지 redirext인지는 설정 파일에서 기술 합니다.

아래는 redirect 예제 입니다.

<logic:notPresent name="loginForm">
<logic:redirect href="/registeruser/index.jsp" />
</logic:notPresent>

아래는 포워드 예젭니다.

<logic:forward name="login" />

설정 파일에서는 ……

<global-forwards>
<forward name="login" path="/loginForm.jsp"/>
</global-forwards>




4.        컬렉션 유틸리티

Iterate 태그는 지정된 컬렉션내에 있는 모든 요소에 대해 한번씩 자신의 BODY 컨텐츠를 반복 합니다. id라는 속성을 가지는데 이는 반복에 사용 할 요소 등을 포함하는 페이지 스코프의 JSP 빈 이름 입니다.

<logic:iterate id="address" name="userSummary" property="addresses">
<!-- Print out the address obejct in a table -->
</logic:iterate>

위에서 iterate 태그는 userSummary 빈의 getAddress() 메소드를 호출 함으로써 address 컬렉션을 얻어 냅니다.각 반복 동안 address 컬렉션에 포함된 각각의 주소가 “address” 변수에 차례로 할당 됩니다.

아래의 예제를 참고 하세요~

<UL>
        <logic:iterate id=”item” name=”list”>
                <LI><bean:write name=”item”/></LI>
        </logic:iterate>
</UL>

다음 예제도 참고 하세요…

<logic:iterate id="employee" name="department" property="employees" scope= "request">

<bean:write name="employee" property="username" />

<bean:write name="employee" property="name" />

<bean:write name="employee" property="phone" />

</logic:iterate>

[예제]

        다음과 같은 빈이 있을 때


import java.io.Serializable;
public class User implements Serializable {
private String lastName;
private String firstName;
private String email;
public String getEmail() {
return email;
}
...
public void setEmail(String string) {
email = string;
}
...
}


        Action에서 다음과 같은 처리를 한 경우


while (rs.next()){
String firstName = rs.getString(1);
String lastName = rs.getString(2);
String email = rs.getString(3);

User user = new User();
user.setEmail(email);
user.setFirstName(firstName);
user.setLastName(lastName);

list.add(user);
}

if (list.size() > 0){
request.setAttribute("users", list);
}

        JSP 파일에서 처리 예

<logic:present name="users">
<table border="1">
<tr>
<th>
<bean:message key="userRegistration.firstName"/>
</th>
<th>
<bean:message key="userRegistration.lastName" />
</th>
<th>
<bean:message key="userRegistration.email" />
</th>
</tr>
<logic:iterate id="user" name="users">
<tr>
<td>
<bean:write name="user" property="firstName"/>
</td>
<td>
<bean:write name="user" property="lastName"/>
</td>
<td>
<bean:write name="user" property="email"/>
</td>
</tr>
</logic:iterate>
</table>
</logic:present>





5.        메시지와 에러

messagePresent와 messageNotPresent 테그는 요청 스코프에 ActionMessage나 ActionErrors 객체가 존재하는지에 따라 BODY 컨텐츠의 수행 여부를 결정 합니다. 

2013년 8월 2일 금요일

[SQL초보전문가]조인 방법 변경(USE_MERGE) , SQL교육,오라클힌트 교육, SQL강좌

Hint]조인 방법 변경(USE_MERGE)
 
구로디지털 오엔제이프로그래밍실무교육센터
 
 
머지 조인(Merge Join)이 일어나도록 유도하는 힌트 구문으로 이 경우 거의 SORT를 동반하므로 SORT MERGE JOIN이라고 부릅니다머지 조인이란 양쪽 테이블에서 대상 로우를 추출 후 조인 컬럼을 기준으로 SORT를 한 후 최종 결과를 만들어 내는 조인 방식 입니다.
 
USE_NL처럼 FROM 절 다음에 위치하는 테이블의 순서는 중요하지 않은데 그 이유는 어차피 독립적으로 정렬된 후 병합이 일어나므로 중요하지 않다고 할 수 있으며 SORT MERGE JOIN에서는 드라이빙 테이블의 의미가 없습니다.
 
[형식]
 
 
[]
아래 예제는 Oracle 10g에서 돌렸습니다.
 
 
select 
       e.empno,
          e.ename,
          d.dname,
          d.loc
from   dept d, emp e
where  e.deptno = d.deptno
 
---------------------------------------------------------------
Operation            Object Name      Rows     Bytes    Cost     
-------------------------------------------------------------
SELECT STATEMENT Optimizer Mode=ALL_ROWS               14                      5
  MERGE JOIN                  14         406       5                                                       
    TABLE ACCESS BY INDEX ROWID         SCOTT.DEPT      4           72         2            
      INDEX FULL SCAN   SCOTT.PK_DEPT             4                        1            
    SORT JOIN                 14         154       3                                                       
      TABLE ACCESS BY INDEX ROWID      SCOTT.EMP        14         154       2            
        INDEX FULL SCAN             SCOTT.IDX_EMP_DEPTNO            13                      1                                                           
 
select 
       e.empno,
          e.ename,
          d.dname,
          d.loc
from   dept d, emp e
where  e.deptno = d.deptno
 
---------------------------------------------------------------------
Operation            Object Name      Rows     Bytes    Cost     
------------------------------------------------------------------
SELECT STATEMENT Optimizer Mode=ALL_ROWS               14                      5
  MERGE JOIN                  14         406       5                                                       
    TABLE ACCESS BY INDEX ROWID         SCOTT.DEPT      4           72         2            
      INDEX FULL SCAN   SCOTT.PK_DEPT             4                        1                SORT JOIN                14         154               3                                                       
      TABLE ACCESS BY INDEX ROWID      SCOTT.EMP        14         154       2            
        INDEX FULL SCAN             SCOTT.IDX_EMP_DEPTNO            13                      1                                                           
 
[실습]
 
-      실습을 위한 예제 테이블 및 데이터는 아래 링크에서 확인 바랍니다.
 
myemp1 : 1000만건
myemp1_old : 100만건
mydept : 5
 
테스트환경 : oracle 11g
 
 
MYEMP1이 비드라이빙 테이블이지만 머지조인 에서는 별 의미 없다.
 
SQL> select
  2         e.ename,
  3         d.dname
  4  from   mydept1 d, myemp1 e
  5  where  e.deptno = d.deptno   ;
 
20000000 개의 행이 선택되었습니다.
 
   : 00:02:22.62
 
 
---------------------------------------------------------------------------------------
| Id  | Operation           | Name    | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT    |         |    20M|   476M|       | 68516   (2)| 00:13:43 |
|   1 |  MERGE JOIN         |         |    20M|   476M|       | 68516   (2)| 00:13:43 |
|   2 |   SORT JOIN         |         |    10 |   100 |       |     4  (25)| 00:00:01 |
|   3 |    TABLE ACCESS FULL| MYDEPT1 |    10 |   100 |       |     3   (0)| 00:00:01 |
|*  4 |   SORT JOIN         |         |    10M|   143M|   459M| 68463   (1)| 00:13:42 |
|   5 |    TABLE ACCESS FULL| MYEMP1  |    10M|   143M|       | 16941   (1)| 00:03:24 |
 
 
SQL> select
  2         e.ename,
  3         d.dname
  4  from   myemp1 e, mydept1 d
  5  where  e.deptno = d.deptno ;
 
20000000 개의 행이 선택되었습니다.
 
   : 00:02:09.58
 
---------------------------------------------------------------------------------------
| Id  | Operation           | Name    | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT    |         |    20M|   476M|       | 68516   (2)| 00:13:43 |
|   1 |  MERGE JOIN         |         |    20M|   476M|       | 68516   (2)| 00:13:43 |
|   2 |   SORT JOIN         |         |    10M|   143M|   459M| 68463   (1)| 00:13:42 |
|   3 |    TABLE ACCESS FULL| MYEMP1  |    10M|   143M|       | 16941   (1)| 00:03:24 |
|*  4 |   SORT JOIN         |         |    10 |   100 |       |     4  (25)| 00:00:01 |
|   5 |    TABLE ACCESS FULL| MYDEPT1 |    10 |   100 |       |     3   (0)| 00:00:01 |
---------------------------------------------------------------------------------------

2013년 8월 1일 목요일

(Static Member, Field)클래스멤버 - 클래스변수(필드)/클래스메소드

클래스필드(변수)
 클래스의 인스턴스가 아니라 그것이 정의된 클래스와  연관된다.
 static 한정자는 이 변수(필드)가 클래스필드임을 의미
 상수를 정의하는것이 클래스필드의 일반적인 사용이다.
  public static final double PI=3.14159;
  모든 클래스 필드가 상수인것은 아니다. Static만 기술하고 
  final은 빠질수도 있다.
 정적필드의 복사본은 오직 한 개 존재하며 전역변수
 같은 클래스 내부에서는 PI로 지칭되며 클래스 외부에서
  해당 변수(필드)를 유일하게 지칭하기 위해서는 클래스.PI 
   
 클래스메소드
 static 한정자로 선언된다. 
  public static double radiansToDegree(double rads)
- 객체가 아니라 클래스와 연관
  클래스의 외부에서 메소드를 호출하기 위해서는 클래스.메
  소드 형태로 가리킨다.
  double d = Circle.radiansToDegree(2.0);
  물론 그 클래스 내부에서는 클래스 이름을 지정할 필요가
  없다
 자신의 클래스의 모든 클래스변수(필드)와 클래스 메소드 
  를 사용할수 있다. 인스턴스 필드(변수)나 인스턴스 메소드
  는 사용할수 없다.

JAVA, JAR EXAMPLE(자바 JAR, 자바실무교육, 오라클자바실무, 오엔제이프로그래밍)

JAR 명령어는 UNIX TAR와 비슷해서 공부하기도 쉽습니다.

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


Jar c|t|u|x[f][m][M][0][v] [jar파일의이름] [menifest] [-C directory] [files]
  Jar –I[jar]
  - 처음 Option의 첫번째 문자(기본적인 연산을 지정)
  c : 새로운 Jar Archive를 생성, 마지막인자로 입력파일등을 표시, 새롭게 생성된 JAR File 
      은 첫번째 엔트리로 META-INF/MENIFEST.MF 파일을 가지며 이파일은 JAR File의 
      내용을 나열하며 각각의 파일에 대한 메시지 요약을 포함한다.
  t : Jar Archive의 내용을 나열한다. 
  u : Jar Archive 파일의 내용을 갱신, 커맨드라인에 나열된 파일은 이 아카이브에 추가된다. 
      m 옵션과 같이 사용된 경우에는 지정된 메니페스트 정보를 Jar File 에 추가한다.
 x : JAR Archive의 내용을 추출한다.
 - 한정자 옵션(4개의 명령지정문 뒤에서 연산에 관한 자세한 정보를 제공)
 f: jar가  Command Line의 지정된 이름의 JAR File에 대해 수행되는 것임을 나타낸다. 
    지정되지 않으면 표준입력으로 JAR File을 읽고 표준출력으로 JAR File을 쓴다.
m : 메니페스트 템플릿이 코맨드라인에 지정되었음을 JAR 명령에게 알린다.,(c,u Option과
    함께사용)


M : jar가 기본 메니페스트 파일을 생성하지 않도록 함(c, u와 함께 사용)
v : 여러 가지 출력을 내보내도록 함
0 : jar가 압축 없이 파일을 JAR 아카이브에 저장 하도록 함 

첫번째 옵션이 f를 포함한다면 jar파일의 이름을 기술하며, m을 포함한다면 menifest파일이름을 기술한다. 만약 첫번째 Option이 f,m을 모두 포함한다면 이와 동일한 순서로 나열해야 한다. Files에는 JAR Archive에 포함시킬 파일을 나열한다.

** 추가옵션
-C Directory : Jar가 다음파일및 디렉토리를 처리하는중에 지정된 dir을 바꾸도록 한다. –C Option은 몇개라도 사용이 가능하며, 다음 –C Option이 올때까지 유효하다.
-I jarfile : c,t,u,x 대신 사용, Jar File의 파일구조등의 인덱스를 산출하도록, META-INF/INDEX.LIST 파일에 저장
 추후 자바인터프리터나 애플릿뷰어등이 알고리즘의 최적화하고 불필요한 Jar File을 다운로드 하지 않기 위해서 이 인덱스 정보를 이용활수 있다.



jar cvf hello.jar HelloWorld*.class
jar cf hello.jar HelloWorld*.class -> 위의 것과 동일하나 화면에 출력이 나타나지 않는다.
jar cmf myMenifest test.jar HelloWorld.class -> test.jar File을 만들면서 myMenifest 라는 파일의 내용을 MENIFEST.MF File에 첨가한다.
Jar ufm test.jar myMenifest -> 이미 만들어져 있는 test.jar File의 MENIFEST.MF File을 myMenifest 를 참조하여 갱신한다.
Jar umf myMenifest test.jar

D:\자바프로그래밍\예제>jar tvf hello.jar
    0 Fri Jun 28 19:07:24 KST 2002 META-INF/
    95 Wed Jul 03 00:08:38 KST 2002 META-INF/MANIFEST.MF
  430 Fri Jun 28 18:30:38 KST 2002 HelloWorld.class
D:\자바프로그래밍\예제>jar tf test.jar
META-INF/
META-INF/MANIFEST.MF
HelloWorld.class


D:\자바프로그래밍\예제>jar uf test.jar HelloWorld1.class

D:\자바프로그래밍\예제>jar uf test.jar HelloWorld2.class

D:\자바프로그래밍>jar cvf sample.jar -C 예제/  .  sample.jar file은 예제 dir에 생김

D:\자바프로그래밍\예제>jar tvf test.jar
    0 Fri Jun 28 19:07:24 KST 2002 META-INF/
    95 Wed Jul 03 00:08:38 KST 2002 META-INF/MANIFEST.MF
  430 Fri Jun 28 18:30:38 KST 2002 HelloWorld.class
  391 Fri Jun 28 17:35:00 KST 2002 HelloWorld1.class
  354 Fri Jun 28 17:35:00 KST 2002 HelloWorld2.class