Java2013. 2. 5. 23:35

현재 진행중인 유지 보수를 하는데 처음 접하는 브라우저에 올릴 웹페이지를 작업하다보니 타임아웃 테스트를 하기 위한


페이지를 만들어야 했다.


나는 아무것도 몰라 이것저것 검색해 간단한 타임아웃 테스트용 코드를 만들어 봤다.


브라우저가 20초간 응답이 없으면 요청했던 페이지를 다시 요청 하는것 같아 지연 시간은 30초로 설정하였다.


System.out.println("TimeoutTest!!");


long time = System.currentTimeMillis();

SimpleDateFormat dayTime = new SimpleDateFormat("yyyy-mm-dd hh:mm:ss");

String str = dayTime.format(new Date(time));

System.out.println(str);


Thread.sleep(30000);


화면에 출력하는 내용을 위한건 그냥 건너 뛰도록 하고..


내용은 보면 위에것은 재 요청 시간이 얼마인지 보기 위한 테스트 코드라 보면 되고 제일 아래줄에 있는 소스 코드가 


Timeout테스트를 위한 코드라 보면 된다.


Thread.sleep(30000);


밀리세컨드로 파라미터를 넣게 된다. 그러면 그 시간동안 응답이 없게 되는 코드.

'Java' 카테고리의 다른 글

Java Object Copy(Clone)..  (0) 2013.12.12
java.lang.NoSuchMethodError..  (0) 2013.08.27
Https SSLHandshakeException..!  (0) 2012.10.16
EhCache의 Spring Framework(iBatis)적용...!  (0) 2012.09.18
json-lib-2.4-jdk15.jar  (0) 2012.08.24
Posted by Z700zZz
Java2012. 10. 16. 16:59

https로 데이터를 요구할 경우에 인증서가 만료되었거나 없을 경우 다음과 같은 Exception이 발생하게 된다.


Caused by: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target


이때 인증서를 다운 받거나 아니면 인증서를 무시하는 코드를 작성하면 문제는 해결이 된다.


인증서를 무시하는 방법에 대해서 알아보겠다.


TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return null;
        }

        public void checkClientTrusted(
                java.security.cert.X509Certificate[] certs,
                String authType) {
        }

        public void checkServerTrusted(
                java.security.cert.X509Certificate[] certs,
                String authType) {
        }
    } };

    //Install the all-trusting trust manager
    try {
        SSLContext sc = SSLContext.getInstance("SSL");
        sc.init(null, trustAllCerts, new java.security.SecureRandom());
        HttpsURLConnection.setDefaultSSLSocketFactory(sc
                .getSocketFactory());
        HttpsURLConnection
                .setDefaultHostnameVerifier(new HostnameVerifier() {
                    public boolean verify(String paramString,
                            SSLSession paramSSLSession) {
                        return true;
                    }
                });
    } catch (Exception e) {
    }

    InputStreamReader isr = null;
    //Now you can access an https URL without having the certificate in the truststore
    try {
        URL url = new URL(
                "https://requestUrl");
        HttpsURLConnection con = (HttpsURLConnection) url
                .openConnection();
        isr = new InputStreamReader(con.getInputStream(), "utf-8");

        int c;
        while ((c = isr.read()) != -1) {
            sb.append((char) c);
        }

        //System.out.println(sb.toString());

    } catch (MalformedURLException e) {
        out.println(e.toString());
    } finally {
        try {
            isr.close();
        } catch (Exception e) {

        }
    }


다음의 코드로 데이터를 받으면 문제 없이 받을 수 있다.


참 쉽다.

'Java' 카테고리의 다른 글

java.lang.NoSuchMethodError..  (0) 2013.08.27
Java Server Timeout Test하기.  (0) 2013.02.05
EhCache의 Spring Framework(iBatis)적용...!  (0) 2012.09.18
json-lib-2.4-jdk15.jar  (0) 2012.08.24
Log4j의 Appender..!  (0) 2012.06.26
Posted by Z700zZz
Java2012. 9. 18. 16:48

EhCache의 Spring Framework적용에 대해서 알아 보겠다.


동일한 데이터 요청을 여러번 할 경우 매번 그데이터를 Database에 접근해서 데이터를 가지고 온다면..


Database에는 큰 부하가 걸릴 것이다.


만약 이 요청한 데이터의 변하지 않는다면 Database를 거치지 않고 그대로 그 데이터를 저장하고 있다가


보내준다면 Database에는 무리가 덜 할 것이다.


그 기능을 해줄 것이 바로 Cache!!


이러한 고민을 나만 한것이 아니라 아마도 개발자들이 개발을 시작하면서 부터 계속 해왔을 것이다.


검색을 해보니 OSCache, JCS, EhCache등 여러 오픈 소스들이 있었다.


그중에 성능이 가장 좋고 또 사용 하기에 간편하고 Spring에서 Annotation설정 하나 만으로도 사용가능한


EhCache을 선택해 Spring에 적용을 해보았다.


EhCache를 iBatis에 바로 적용 시키는 방법도 있다.


하지만 EhCache는 Spring에서 지원(?) 콜라보레이션(?)을 하고 있다.


http://code.google.com/p/ehcache-spring-annotations/


위의 사이트에서 라이브러리를 다운 받자.


압축을 풀면 ehcache-spring-annotations-1.2.0.jar 파일과


lib폴더 안에는 Ehcache에 관련되 라이브러리들이 들어 있다.


이미 Spring Framework의 라이브러리를 추가해 놓았다면 그외에 필요한 라이브 러리를 프로젝트에 추가하자.


필요 한 라이브러리의 목록은 다음과 같다.


aopalliance-1.0.jar

commons-codec-1.5.jar

ehcache-core-2.4.5.jar

guava-r09.jar

slf4j-api-1.6.2.jar


라이브 러리 추가를 마쳤으니 이제는 설정!!


우선은 Spring Framework의 Application-Context.xml에 EhCache의 FactoryBean을 등록 해야한다.


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:ehcache="http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring"
       xsi:schemaLocation="
            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
            http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring http://ehcache-spring-annotations.googlecode.com/svn/schema/ehcache-spring/ehcache-spring-1.1.xsd">
    <ehcache:annotation-driven cache-manager="ehCacheManager" />
   
    <bean id="ehCacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
        <property name="configLocation" value="/WEB-INF/config/ehcache.xml" />
    </bean>

</beans>

붉은색으로 표시된 부분을 추가 해줘야 한다.


FactoryBean추가 부분을 보면 Property의 configLocation이 있는데 여기엔 EhCache설정 파일의 경로를 적어 주어야 한다.


다음은 EhCache의 설정 파일 부분이다.


<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
    updateCheck="false">
    <diskStore path="java.io.tmpdir" />
   
    <cacheManagerPeerProviderFactory
        class="net.sf.ehcache.distribution.RMICacheManagerPeerProviderFactory"
        properties="peerDiscovery=manual,
                    rmiUrls=//192.168.0.99:2424/TalkMsg.channelTalkCache"/>
    <cacheManagerPeerListenerFactory
    class="net.sf.ehcache.distribution.RMICacheManagerPeerListenerFactory"
    properties="port=2424, socketTimeoutMillis=120000" />
   
    <defaultCache eternal="false"  
        maxElementsInMemory="5000" 
        timeToIdleSeconds="300"
        timeToLiveSeconds="600"
        overflowToDisk="false"
        diskPersistent="false"
        diskExpiryThreadIntervalSeconds="120"
        memoryStoreEvictionPolicy="LRU">
    </defaultCache>
   
    <cache name="cache1"
        maxElementsInMemory="5000"
        eternal="false"
        timeToIdleSeconds="300"
        timeToLiveSeconds="600"
        overflowToDisk="false"
        diskPersistent="false"
        diskExpiryThreadIntervalSeconds="120"
        memoryStoreEvictionPolicy="LRU">
        <cacheEventListenerFactory
           class="net.sf.ehcache.distribution.RMICacheReplicatorFactory"
           properties="replicateAsynchronously=false,replicateUpdatesViaCopy=false" />
          
        <bootstrapCacheLoaderFactory
                 class="net.sf.ehcache.distribution.RMIBootstrapCacheLoaderFactory"
           properties="bootstrapAsynchronously=false,
                     maximumChunkSizeBytes=5000000" />
    </cache>
</ehcache>

설정 파일 안에는 캐쉬를 어떻게 사용할지에 대해서 설정을 한다.


cacheManagerPeerProviderFactory와 cacheManagerPeerListenerFactory는 캐시 서버가 여러대일 경우


다른 서버와의 동기화에 필요한 설정들이다.


그리고 defaultCache는 꼭 있어야 하는 캐쉬 설정이며, cache name="cache1"는 내가 프로젝트내에서 사용할 캐쉬의 설정.


그외 설정의 세부적인 부분은 이후의 포스팅에 다룰것이다.


EhCache는 Java RMI를 이용하여 다른 캐시 서버와의 통신을 한다.


그럼 마지막으로 캐시를 적용할 부분을 보자.


@Override
    @Cacheable(cacheName="cache1")
    public List<?> getList(Map<String, Object> param) {
        return getSqlMapClientTemplate().queryForList("TalkMsg.getTalkMsgList", param);
    }

    @Override
    @TriggersRemove(cacheName="cache1", removeAll=true)
    public Object insertMsg(Map<String, Object> param) {
        return getSqlMapClientTemplate().insert("TalkMsg.insertTalkMsg", param);
    }

Annotation만으로도 설정이 가능하다.


단순히 List만을 가져오는 경우에는 캐시를 가져와 저장하고 또 불러오기 전 캐시에 내가 원하는 데이터가 있는지 확인하는


Annotation인 @Cacheble를 사용하고 데이터 삽입, 삭제, 수정같은 데이터의 변화가 있을 경우에는 @TriggerRemove


Annotation을 이용하여 캐시의 내용을 모두 지워 데이터의 유효성을 높인다.


이 세가지의 설정만으로 캐시는 정상적으로 잘 작동한다.


영어가 된다면 EhCache의 공식 홈페이지에 가는것을 권장한다.


설정이 너무 간단하다 보니 영어만 좀 된다면 공식 홈페이지의 내용을 보는것이 좀더 정확하고 빠를 것 같다.


EhCache는 단순하고 가볍고 거기에 성능까지 좋다는 평을 받고 있다.


실제로 설정을 하고 사용을 해보니 정말 편하고 성능도 좋았다.


이 이후의 포스팅은 설정의 세세한 부분과 성능 테스트가 될것이다.


그리고 내가 올린 포스팅은 잘못 된 정보가 있을 것이니 참고만 하고 공식 홈페이지의 내용이나 공식 홈페이지에서 제공하는


문서를 주로 참고 할 것을 권장한다.

'Java' 카테고리의 다른 글

Java Server Timeout Test하기.  (0) 2013.02.05
Https SSLHandshakeException..!  (0) 2012.10.16
json-lib-2.4-jdk15.jar  (0) 2012.08.24
Log4j의 Appender..!  (0) 2012.06.26
Log4j 설정..!  (0) 2012.06.25
Posted by Z700zZz
Java2012. 8. 24. 18:19

자바에서 JSON을 다루려면 JSON을 다룰수 있는 라이브러리가 필요하다.


그중에 하나인 json-lib-2.4-jdk15.jar


이 라이브러리를 사용 하려면 다음의 라이브러리들이 필요하다.


commons-beanutils-1.8.3.jar

commons-collections-3.2.1.jar

commons-lang-2.6.jar

commons-logging-1.1.1.jar

ezmorph-1.0.6.jar


여기서 한가지 주의해야 할점.


json-lib-2.4-jdk15.jar만 넣고 서버를 구동하게 되면 클래스 파일을 찾을수 없다는 에러가 발생하게 된다.


그 이후 여러가지 검색을 하다 보면 위와 같은 라이브 러리 파일드링 필요 하다는것을 알게 되고..


www.apache.org사이트에서 하나씩 찾아 넣게 되는데..


무턱대고 최신 파일을 찾아서 넣다가는 계속해서 클래스 파일을 찾을 수 없다는 에러만을 보게 될 것이다.


그중에서 내가 여러번 삽질 했던것이 commons-lang-2.6.jar이 파일이다.


최신 버전은 lang3버전이 있을텐데 이것을 다운받아 라이브러리에 추가 하게 되면 서버를 구동 시킬때 계속해서 클래스를 찾지


못한다는 에러만을 보여주게 될것이다.

'Java' 카테고리의 다른 글

Https SSLHandshakeException..!  (0) 2012.10.16
EhCache의 Spring Framework(iBatis)적용...!  (0) 2012.09.18
Log4j의 Appender..!  (0) 2012.06.26
Log4j 설정..!  (0) 2012.06.25
Java Compile Version Error..!  (0) 2012.03.15
Posted by Z700zZz
Java2012. 6. 26. 10:20

좀전에 포스팅에서는 Log4j의 전체적인 설정을 설명하였다.


하다보니 뭔가 허전하다. 이번엔 Appender에 대해서 설명하겠다.


Appender란 무엇인가.


Appender의 종류에는 여러가지가 있다.


Class Output Direction
org.apache.log4j.ConsoleAppender Console
org.apache.log4j.DailyRollingFileAppender File
org.apache.log4j.FileAppender
org.apache.log4j.RollingFileAppender
org.apache.log4j.WriterAppender Java.io.Writer
org.apache.log4j.net.JMSAppender JMS(Java Message Service)
org.apache.log4j.net.SMTPAppender Electronical Mail
org.apache.log4j.net.SocketAppender Remote Socket Server
org.apache.log4j.net.SyslogAppender Remove UnixSyslog Daemon
org.apache.log4j.nt.NTEventLogAppender Window NT Event Log
org.apache.log4j.AsyncAppender Others..
org.apache.log4j.performance.NullAppender
org.apache.log4j.varia.ExternallyRolledFileAppender


위의 표와 같은 수많은(?) Appender가 있다.


1. ConsoleAppender


쉽게 말해서 이클립스 Console창에 나오는 정보라고 보면된다.


log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n


위와 같이 설정 하면 og4j.rootLogger=DEBUG에서 DEBUG로 설정했으면 DEBUG이상 레벨의 모든 Log가 설정한 ConversionPattern대로 Console창에 나오게 된다.


2. RollingFileAppender


파일에 로그를 기록하는 Appender.


어떠한 용량을 정해주고 그 용량이 넘어가면 로그 파일을 새로 기록하는 Appender다.


3. DailyRollingFileAppender


RollingFileAppender는 용량을 정해주는 거라면 DailyRollingFileAppender는 기간을 정해주는 Appender다.


log4j.appender.logfile.DatePattern='.'yyyy-MM                     <월단위

log4j.appender.logfile.DatePattern='.'yyyy-MM-ww         <주단위
log4j.appender.logfile.DatePattern='.'yyyy-MM-dd-a
        <12시간단위
log4j.appender.logfile.DatePattern='.'yyyy-MM-dd-HH         <시간단위
log4j.appender.logfile.DatePattern='.'yyyy-MM-dd-HH-mm    <분단위


위와같이 설정 파일에 설정을 해주면 시간이 지나면 알아서 파일을 새로 생성하여 로그를 기록한다


표에 보면 많은 Appender들이 있지만 주로 쓰이는 몇가지만 설명을..(아는게 이것밖에는..ㅋ)


아무튼 이것만 알아도 되지는 않을것이고 좀더 공부하고 포스팅을..

'Java' 카테고리의 다른 글

EhCache의 Spring Framework(iBatis)적용...!  (0) 2012.09.18
json-lib-2.4-jdk15.jar  (0) 2012.08.24
Log4j 설정..!  (0) 2012.06.25
Java Compile Version Error..!  (0) 2012.03.15
Java의 문자열 비교..!  (0) 2011.10.04
Posted by Z700zZz
Java2012. 6. 25. 21:33

Log를 과리를 잘하기 위해서 존재하는 프레임워크가 바로 Log4j다.


자 간단하게 log4j.properties 설정 법에 대해서 설명하겠다.


뭐 사실 설명하고 싶은건 일별로 로그 파일을 관리 할 때의 방법이다.


log4j.rootLogger=DEBUG, stdout, logfile

전체 적인 로그의 레벨을 정한다.


# Console

이클립스의 콘솔에 찍힐 로그를 정한다.

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - <%m>%n

# LogFile

파일에 쓸 로그의 내용을 정한다.

log4j.appender.logfile.Threshold=DEBUG

파일에 쓸 로그의 레벨을 정한다.
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender

하나의 파일에 계속해서 로그를 쌓을 것인지 매일매일 다른 파일에 로그를 쌓을것인지를 정한다.
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.DatePattern='.'yyyy-MM-dd'.log'

매일 매일 다른 파일에 로그를 쌓을 때 파일 이름의 규칙을 정한다.

위와 같은 형식으로 설정 할 경우 자정이 지나면 파일을 새로 생성한다.

검색해보면 DatePattern에 따라서 파일 하나에 기록할 것인지 하루에 정오와 자정에 나눠서 파일에 기록 할 것인지..

등등에 대해서 나눠 설정 할 수 있다.

log4j.appender.logfile.layout.ConversionPattern=%d %-5p [%t] %-17c{2} (%13F:%L) %3x - %m%n

파일에 기록 할 내용을 지정한다.

자세한 옵션은 검색 하면 많이 나온다.

log4j.appender.logfile.File=/Users/Jeonjinkang/Documents/workspace/ChannelTalk/WebContent/WEB-INF/logs/logfile

저장 할 파일의 위치와 이름을 지정한다.


여기서 중요한 것은 위와 같이 설정을 하고 서버를 돌리면 서버가 돌아가는 순간부터 Log파일에 기록이 된다.

Log파일을 찾아 보면 logfile라는 이름의 Log파일이 생겼을 것이다.

뭔가 이상하다..

나는 분명 설정에서 logfile라는 파일 이름과 그뒤에 '.'yyyy-MM-dd'.log'라는 파일 명명 규칙을 줬는데 왜 이렇게 밖에 생성을 못하는 것일까??

제대로 생성이 된다면 logfile.2012-06-25.log라는 파일이 생겨야 하는것이 아닌가??

그만 고민하자..그날 당일에 생긴 파일은 File에 설정한 이름대로 파일이 생기고 자정이 넘어가야만 DatePattern에 설정한 파일명이 붙는 단다..

설정한대로 안되서 2시간동안 검색하고 했는데 이런 결과가..

일단 기본적인 설정 방법은 설명했다.

다음엔 Spring FrameWork에 Log4j를 구동하기 위한 설정에 대해서 설명해 보겠다.

'Java' 카테고리의 다른 글

json-lib-2.4-jdk15.jar  (0) 2012.08.24
Log4j의 Appender..!  (0) 2012.06.26
Java Compile Version Error..!  (0) 2012.03.15
Java의 문자열 비교..!  (0) 2011.10.04
Java - Lotto(로또)  (0) 2009.10.14
Posted by Z700zZz
Java2012. 3. 15. 01:02
Was에 자바 컴파일한 클래스 파일을 올려놓고 실행을 하였더니..

java.lang.UnsupportedClassVersionError와 같은  에러가 발생할 때가 있다.

이는 Was의 자바 버전과 컴파일한 자바 버전이 맞지 않아 생기는 에러이다.

어떻게 해결 하느냐..

보통 자바를 깔때 최신버전을 깐다.

1.6버전을 많이 사용 할 것이다.

나의 개발 환경은 MacOSX 10.7이며 자바 1.6버전을 바탕으로 개발을 하였다.

그리고 Was의 환경은 Tomcat 5.5에 자바 1.5버전이다.

우선 이클립스의 프로젝트에서 우클릭 후 - Build Path - Configure  Build Path를 선택하자.


선택하게 되면 밑의 창이 나타나게 된다.

Java Build Path -  Libraries - JRE System Library - Edit를 선택한다.




선택 후 아래와 같은 창이 나타나면 Excution environment - 내가 컴파일할 자바 버전을 선택 후 Finish를 누르면 된다.


위의 방법대로 하면 될것 같지만..

절대로 안된다.

프로젝트 위에 빨간색 x표시를 보게 될 것 이다.

다시 한가지 더 해주어야 할 것이 있다.

다시 한번 프로젝트에서 우클릭 후 - Build Path - Configure  Build Path를 선택하자.

선택후 나타나는 창에서 Project Facets를 선택한 후 Java를 클릭하고 내가 컴파일 하고자 하는 버전으로 선택해주면 된다.


 
예전에는 버전 별로 자바를 모두 깔아 등록 해주고 사용을 해야 했지만 이제는 기본으로 모든 버전을 사용가능 한가보다.

 Was에 올리기전 자바의 버전을 확인하자.

'Java' 카테고리의 다른 글

Log4j의 Appender..!  (0) 2012.06.26
Log4j 설정..!  (0) 2012.06.25
Java의 문자열 비교..!  (0) 2011.10.04
Java - Lotto(로또)  (0) 2009.10.14
JavaScript...!  (0) 2009.07.07
Posted by Z700zZz
Java2011. 10. 4. 14:57
자바에서 문자열 비교는 어떻게 할까..?

==로 한다면 경기도 오산이다.

==는 같은 저장소 안에 있는 것 인가를 구별해 주기 위한 것 이지 두 문자열이 같은지를 비교해 주지는 않는다.

 그럼 어떤 것으로 해야 하는것일까..?

바로 equals로 비교하면된다..

"abc".equals("abc") 

이와 같이 사용하면 된다.

equals와 비슷한 것은 무엇이 있을까??

비슷한 것에는 equalsIgnoreCase가 있다.

문자열을 비교한다는 기능은 같지만 대소문자를 구분하는 equals에 비해 equalsIgnoreCase는 대소문자를 구분하지 않는다.

또한 문자열을 비교하기 전에 두 문자열의 길이를 먼저 비교하기 때문에 길이가 다를경우 false를 반환해준다.

그렇기 때문에 속도가 더 빠르다.

사용에 있어서 어떠한것이 더 좋은지 나쁜지는 판단하여 사용하도록 하자..! 

'Java' 카테고리의 다른 글

Log4j 설정..!  (0) 2012.06.25
Java Compile Version Error..!  (0) 2012.03.15
Java - Lotto(로또)  (0) 2009.10.14
JavaScript...!  (0) 2009.07.07
Eclipse Galileo Ver...!  (0) 2009.07.02
Posted by Z700zZz
Java2009. 10. 14. 23:54
수업 시간에 내준 과제...

선생님이 숙제에 대한 조건??을 걸었다.

int[] balls = new int[45];
int[] lotto = new int[6];

공을 나타내는 배열과 뽑은 공이 들어갈 배열...

public class Lotto456 {
    private int[] balls = new int[45];
    private int[] lotto = new int[6];
    private int count = 0;
    Random random = new Random();
    public void inputNum(){
        for(int i = 0;i < balls.length;i++){
            balls[i] = i + 1;
        }
    }
//공 배열에 공마다 숫자를 넣어주는 작업...
   
    public void ballCatch(){
        int randomNum = 0;
        int ballNum = 0;
       
        while(true){
            randomNum = random.nextInt(45);
            ballNum = balls[randomNum];
            if(ballNum == 0){
                System.out.println("중복");
                ballCatch();
            }
            balls[randomNum] = 0;
            if(count == 6){
                return;
            }
            lotto[count] = ballNum;
            count++;
        }
    }
  //랜덤하게 공을 꺼내서 뽑힌 공이 들어갈 배열에 넣는 작업... 
   
   
    public int[] getLotto(){
       
        return lotto;
    }
}
//뽑힌 공을 주는 메소드

그외에 실행하는 부분은 알아서 하길...
공에 숫자넣는 작업 한번..공 뽑는거 한번...그다음엔 뽑힌 공을 주는거 한번..
너무 간단하니 이정도만 해도 되겠지..

'Java' 카테고리의 다른 글

Java Compile Version Error..!  (0) 2012.03.15
Java의 문자열 비교..!  (0) 2011.10.04
JavaScript...!  (0) 2009.07.07
Eclipse Galileo Ver...!  (0) 2009.07.02
Java Oracle JDBC 관련 부분...!  (0) 2009.06.24
Posted by Z700zZz
Java2009. 7. 7. 20:34
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Insert title here</title>
<script type="text/javascript">
function checkit(objFrm){
    //1.데이터 추출
    var userId = objFrm.userId.value;
    var userPw = objFrm.userPw.value;
    var userPwConfirm = objFrm.userPwConfirm.value;
    var sex = "";
    var objSex = document.getElementsByName("sex");
    if(objSex == null){
        sex = objFrm.sex.value;
    }else{
        for(var indexI = 0;indexI < objSex.length;indexI++){
            if(objSex[indexI].checked){
                sex = objSex[indexI].value;
            }
        }
    }
    var hobbyCount = 0;
    //checkbox에 체크된게 있는지 없는지 검사하기 위하여 선택된 수를 저장하게된 변수
    var objHobby = document.getElementsByName("hobby");
    if(objHobby == null){
       
    }else{
        for(var indexI = 0;indexI < objHobby.length;indexI++){
            if(objHobby[indexI].checked){
                hobbyCount++;
    //checkbox의 수만큼 loop문을 돌며 체크되어 있는 수를 저장한다.
    //checkbox에 체크되어 있으면 hobbyCount가 1씩 증가한다.
            }
        }
    }
    //radio, checkbox, select의 값을 가져오려면 loop문을 이용하여 가져온다.
    var location = objFrm.location.selectedIndex;
    //select에 선택된 값이 있는지를 검사하기 위하여 location에 select의 인덱스 값을 저장
    //선택이 안되있을경우 0값을 리턴해준다.
    //그외에 선택된 경우엔 선택된 인덱스 값을 리턴해준다.
    //2.유효성 검사
    if(userId == null || userId.length < 6 || userId.length > 20){
        alert("사용자 아이디는 6글자 이상 20자 미만이어야 합니다.");
        objFrm.userId.focus();
        return false;
    }
    if(userPw == null || userPw.length < 6 || userPw.length > 20){
        alert("사용자 비밀번호는 6글자 이상 20자 미만이어야 합니다.");
        return false;
    }
    if(userPw != userPwConfirm){
        alert("패스워드가 일치하지 않습니다.");
        return false;
    }
    if(hobbyCount == 0){
        alert("취미는 최소한 한가지 이상 선택하셔야 합니다.");
        return false;
    }
    if(location == 0){
        alert("거주지를 선택하세요");
        return false;
    }
    //3.처리
   
    //4.결과출력
    return true;
    //유효성 검사를 다 통과한 경우에 true값을 리턴한다.
   
}
</script>
</head>
<body>
<form name="objFrm" action="regist_process.jsp" method="POST" onsubmit="return checkit(this);">
//function 앞에 return이 붙은 이유..
//안붙는 경우엔 submit이 클릭되는경우에 무조건 action이 실행된다.
//return이 붙는 경우엔 submit이 클릭될때 function이 리턴하는값이 true일 경우에 실행된다.
//파라미터로 현재의 폼을 준다.

<table width="80%" border="1" align="center">
    <tr>
        <td>사용자 아이디</td>
        <td><input type="text" id="userId" name="userId" size="20" maxlength="20"/></td>
    </tr>
    <tr>
        <td>패스워드</td>
        <td><input type="password" id="userPw" name="userPw" size="20" maxlength="20"/></td>
    </tr>
    <tr>
        <td>패스워드확인</td>
        <td><input type="password" id="userPwConfirm" name="userPwConfirm" size="20" maxlength="20"/></td>
    </tr>
    <tr>
        <td>성별</td>
        <td>
            <input type="radio" id="sex_m" name="sex" value="M" checked="checked"/>남성
            <input type="radio" id="sex_f" name="sex" value="F" />여성
        </td>
    </tr>
    <tr>
        <td>취미</td>
        <td>
            <input type="checkbox" id="hobby_ski" name="hobby" value="ski"/>스키
            <input type="checkbox" id="hobby_sky" name="hobby" value="sky"/>스카이다이빙
            <input type="checkbox" id="hobby_swim" name="hobby" value="swim"/>수영
            <input type="checkbox" id="hobby_soccer" name="hobby" value="soccer"/>축구
            <input type="checkbox" id="hobby_basketball" name="hobby" value="basketball"/>농구
        </td>
    </tr>
    <tr>
        <td>거주지</td>
        <td>
            <select id="location" name="location">
                <option value="choice">거주지를 선택하여 주세요.</option>
                <option value="seoul">서울</option>
                <option value="pusan">부산</option>
                <option value="gyounggi">경기</option>
                <option value="ulsan">울산</option>
                <option value="chungnam">충남</option>
            </select>
        </td>
    </tr>
</table>
<table width="80%" border="1" align="center">
    <tr>
        <td>
            <input type="submit" value="회원가입">
        </td>
    </tr>
</table>
</form>
</body>
</html>

역시나 웹으로 들어오면서 HTML과 JavaScript는 어렵다.
어렵다 생각하면 계속 어려운데..어려운걸 어떡하나..-_-;;
게다가 조장까지..수업시간의 모든내용을 머릿속에 담는 기능을 코딩 해야 하는건가..
JavaScript의 여러기능들은 잘 숙지하도록 하자..!

'Java' 카테고리의 다른 글

Java Compile Version Error..!  (0) 2012.03.15
Java의 문자열 비교..!  (0) 2011.10.04
Java - Lotto(로또)  (0) 2009.10.14
Eclipse Galileo Ver...!  (0) 2009.07.02
Java Oracle JDBC 관련 부분...!  (0) 2009.06.24
Posted by Z700zZz