특정 Servlet이 생성될 때 초기에 필요한 데이터(예를 들어 특정 경로, 아이디 정보)들을 초기화 파라미터라고 하며, web.xml에

기술하고 Servlet파일에서는 ServletConfig 클래스를 이용해서 접근합니다.

방법 1. 초기화 파라미터를 web.xml에서 기술

방법 2. Servlet 파일에 직접 기술



첫번째 방법. 초기화 파라미터를 web.xml에서 기술

우선 web.xml 파일을 만들기 위해서

위와 같이 프로젝트 오른쪽 클릭 -> JAVA EE Tools -> Generate Deloyment Descriptor Stub 를 하여 web.xml을 생성한다.


그 후 java 파일에 getInitParam 메소드를 이용해 String 변수에 web.xml에서 가져온 값을 저장할 수 있다.



첫번째 방법. Servlet 파일에서 직접 기술

이렇게 Servlet 파일안에서 바로 기술해준다.


지금까지 두 가지 방식으로 Servlet 데이터값을 초기화 하는 것을 설명했다.

web.xml으로 사용하는 방법은 프록시사용할때나 db접근시 계정이랑 비밀번호 설정을 하드코딩하는걸 막을 수 있을거라고 생각한다.




다음은 Servlet 데이터 공유이다

web.xml에 데이터를 기술하고 Servlet에서 공유하는 간단한 방법이다.


어떤 특정한 Servlet 에서만 초기의 데이터만 들고 와야한다 -> 첫번째 방법

모든 Servlet이 데이터를 공유해야한다. -> 두번째 방법


정리 


데이터를 특정서블릿에서만 공유를 하겠다 (servletConfig 사용)

모든 서블릿에 다 공유하겠다.(servletContext 사용)

웹 어플리케이션을 감시하는 리스너를 만들수 있다. (servletContextListener 사용)



JAVA 관련 사이트


JAVA 기술 커리큘럼


'프로그래밍 > JAVA' 카테고리의 다른 글

자바 다운그레이드  (0) 2018.08.26
자바빈(DTO), DAO  (0) 2018.07.28
스트레티지 패턴  (0) 2018.07.23
Java for-each 쉽게 이해하기  (0) 2018.07.19
JAVA 싱글턴 패턴  (0) 2018.07.19

스트레티지 패턴은 기능을 부품화 하는 것을 말한다.


이 패턴을 사용하면 클라이언트와 무관하게 독립적으로 알고리즘을 변경할 수 있고(quickSortbubbleSort), 클라이언트는 독립적으로 원하는 알고리즘을 사용할 수 있다. 즉 이 패턴은 클라이언트에게 알고리즘이 사용하는 데이터나 그 구조를 숨겨주는 역할을 한다. strategy 패턴은 알고리즘을 사용하는 곳과, 알고리즘을 제공하는 곳을 분리시킨 구조로 알고리즘을 동적으로 교체할 수 있다.


스트레티지 패턴(Strategy Pattern)

알고리즘 군을 정의하고 각각을 캡슐화하여 교환해서 사용할 수 있도록 만든다.

스트래티지를 활용하면 알고리즘을 사용하는 클라이언트와는 독립적으로 알고리즘을 변경할 수 있다.

 

조금 말이 어려울 것입니다쉽게 말하면어떤 객체를 만들 때 객체가 가지는 기능들이 다양하게 존재할 것 니다이러한 기능들을 추상화 하여 언제든지 적용할수 있게 만드는 것 입니다즉 기능을 부품화 하는 것 입니다.

예를 들어 포니와 그랜저 자동차가 있습니다포니에 들어가는 기어 연결부분과 그랜저에 들어가는 연결부분이 동일하다고(추상화하면저급기어중급기어고급기어를 만들어 두고 상황에 따라서 적당한 기어를 적용할수 있을것 입니다즉 포니에는 저급기어를그랜저에는 고급기어를 적용하는것 입니다.

이렇게 기능을 부품화하여 구조를 만드는 것을 스트레티지라고 생각하시면 됩니다.

 

개인적으로 실무에서 가장 많이 사용했고알아두면 아주 유용하게 사용할 수 있는 패턴 입니다노파심에 말씀 드리면한번에 모든 것을 알 수는 없습니다그리고 안다고 하여도 실제 본인의 개발 소스에 적용하시란 쉽지 않습니다꾸준히 살펴보고고민해 보는 자세가 중요 합니다.

 

이번에 살펴 볼 예제는 로봇을 프로그램으로 만들어 보는 것 입니다.

시나리오

1.로봇 모양은 팔다리머리몸통으로 이루어져 있습니다.
2.모든 로봇은 기본적으로 걷고달릴 수 있어야 합니다.
3.Super로봇은 날수 있고미사일을 쏠 수 있으며레이저 검을 가지고 있습니다.
4.Standard 로봇은 날수는 없지만 미사일을 쏠 수 있습니다그리고 레이저 검은 없지만목검은 가지고 있습니다.
5.Low 로봇은 날수도 없고미사일을 쏠 수도 없습니다그리고 레이저검 또는 목검도 없습니다.

 

위 3가지 형태의 로봇을 만들어 보도록 하고추후 다른 로봇을 만들어야 할 경우를 생각하여 유연한 프로그램을 만들어 보도록 합니다.  

​1. 상속, 추상클래스를 하지 않고 일반적으로 class를 만들고 메소드를 만들면 코드에 양이 많아지고 똑같은 기능에 코드를 반복적으로 코딩을 해야하는 불편함이 있다. 나중에 다른 사용자가 기능을 추가하기 불편하다.

​exntends = 상속

2. 위에 class (super, standard, Low) 에서 공통적인 기능들은 따로 Robot.class를 만들어서 상속 기능을 통해 코드를 줄여서 효율적으로 만들수 있다.

상속 - 공통적인 기능 : 걷고, 달린다, 로봇 모양은 팔, 다리, 머리, 몸통 이다.

abstract = 추상클래스

3. 새로운 사용자가 로봇을 만들려고할때 ​

​메소드를 추상화 시켜놓고 무조건 구현하게 만든다

( 날다, 미사일, 레이저검(목검) 기능​

​  public abstract void actionFly();
  public abstract void actionMisail(); 
  public abstract void actionKnife();  )


참고: https://www.youtube.com/watch?v=YqqkElW8PR0&list=PLieE0qnqO2kTyzAlsvxzoulHVISvO8zA9&index=22

  http://hwan1402.tistory.com/9




'프로그래밍 > JAVA' 카테고리의 다른 글

자바빈(DTO), DAO  (0) 2018.07.28
JAVA 관련 사이트 기술 커리큘럼  (0) 2018.07.25
Java for-each 쉽게 이해하기  (0) 2018.07.19
JAVA 싱글턴 패턴  (0) 2018.07.19
자바 interface(인터페이스)  (0) 2018.07.18

ava for-each에 대해서 쉽게 이해하기 



 



 for-each


: jdk 1.5 이후에 추가 된 문법이다. 따로 키워드가 있는 것은 아니다. 기존의 for문을 그대로 사용한다. 



코드의 가독성이 좋아지고, 반복자나 변수를 사용하지 않아 오류 가능성을 없앤다. 



/**
*
* @author hoTire
*
*/

for (int i = 0; i < 10; i++) {
System.out.println(list.get(i));
}
    
for (Integer integer : list) {
System.out.println(integer);
}


아래가 for-each 방법이다. 


for-each를 구현하기 위해선 


public interface Iterable<T> {
/**
* Returns an iterator over elements of type {@code T}.
*
* @return an Iterator.
*/
Iterator<T> iterator();
}


Iterable 인터페이스를 implements 구현하면 된다. 







성능 차이




@Benchmark
    public void testFor() {
        int[] classicFor = new int[200000000];
        int size = classicFor.length;
        int a;
        for (int i = 0; i< size; i++) {
            a = classicFor[i];
        }
    }
    
    @Benchmark
    public void testFor2() {
        int[] classicFor = new int[200000000];
        int a;
        for (int i = 0; i< classicFor.length; i++) {
            a = classicFor[i];
        }
    }
    
    @Benchmark
    public void testForEach() {
        int[] forEach = new int[200000000];
        int a;
        for (int n : forEach) {
            a = n;
        }
    }

Benchmark Mode Cnt Score Error Units
MyBenchmark.testFor avgt 5 390.766 ± 42.219 ms/op
MyBenchmark.testFor2 avgt 5 418.466 ± 219.746 ms/op
MyBenchmark.testForEach avgt 5 386.739 ± 47.636 ms/op

 


for문 안에 size나 length를 알아내는 코드가 있다면 느리다. 

계속해서 lenght, size를 알아내는 비용이 발생한다. 


크기가 크면 클수록 for-each가 빠르다. 

JIT컴파일러가 최적화를 하기 때문이다. 







이렇게 좋은 for-each를 사용하지 못할 때가 있다.


1. 필터링(filtering) : 순회하는 도중 특정한 원소를 삭제해야할 경우 


2. 변환(transforming) : 순회하는 도중 원소의 값을 수정해야할 경우


3. 병렬순회(parallel iteration) : 병렬적으로 순회할 경우 



'프로그래밍 > JAVA' 카테고리의 다른 글

JAVA 관련 사이트 기술 커리큘럼  (0) 2018.07.25
스트레티지 패턴  (0) 2018.07.23
JAVA 싱글턴 패턴  (0) 2018.07.19
자바 interface(인터페이스)  (0) 2018.07.18
JAVA 상속(Override) 재정의, super  (0) 2018.07.17
싱글턴 패턴

소프트웨어 디자인 패턴에서 싱글턴 패턴(Singleton pattern)을 따르는 클래스는, 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴한다. 이와 같은 디자인 유형을 싱글턴 패턴이라고 한다. 주로 공통된 객체를 여러개 생성해서 사용하는 DBCP(DataBase Connection Pool)와 같은 상황에서 많이 사용된다.


예제는 아래와 같다.



싱글턴 패턴은 데이터타입을 자신의 클래스로 한다. 객체를 생성하지 못해서(객체 접근 안되도록 private로 막음) 객체를 생성하기 전 클래스 생성 단계(static)으로 자기 자신을 생성해서 리턴해 주어야한다. 즉 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나가 된다(하나의 객체를 전역적으로 공유해서 쓴다)

'프로그래밍 > JAVA' 카테고리의 다른 글

스트레티지 패턴  (0) 2018.07.23
Java for-each 쉽게 이해하기  (0) 2018.07.19
자바 interface(인터페이스)  (0) 2018.07.18
JAVA 상속(Override) 재정의, super  (0) 2018.07.17
자바 Static 변수  (0) 2018.07.16

안드로이드 Node.js 연결

GET 방식

http://gakari.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-Nodejs%EC%84%9C%EB%B2%84%EB%A1%9C%EB%B6%80%ED%84%B0-GET%EB%B0%A9%EC%8B%9D%EC%9C%BC%EB%A1%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC-%EB%B0%9B%EA%B8%B0?category=414830


POST 방식

http://gakari.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-Nodejs%EC%84%9C%EB%B2%84%EB%A1%9C-POST%EB%B0%A9%EC%8B%9D%EC%9C%BC%EB%A1%9C-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC-%EB%B3%B4%EB%82%B4%EA%B8%B0


nodejs 라즈베리 LED 제어

https://m.blog.naver.com/roboholic84/220340532170


nodejs로 라즈베리 캠 제어

https://m.blog.naver.com/PostView.nhn?blogId=roboholic84&logNo=220353710330&proxyReferer=https%3A%2F%2Fwww.google.com%2F


nodejs로 온습도 센서 보기

http://www.modulabs.co.kr/ModuIoT/4829

https://nodejs.org/ko/docs/guides/timers-in-node/

https://blog.naver.com/chandong83/221144142343

날씨



https://developer.yahoo.com/weather/?guccounter=1

어느 데이터를 가지고 올수 있는지 확인 할수있다

json 데이터 가져오는 방법. 

pprint(result.query.results.channel.item.forecast)

forecast의 키를 가지는 item의 키를 가지는 channel의 키를 가지는 

results의 키를 가지는 query의 키를 가지는 result를 찾아 불러온다..



https://blog.kjwon15.net/2017/11/27/yahoo-weather-api/

야후 날씨



https://developer.yahoo.com/weather/documentation.html

야후 날씨 코드



https://www.youtube.com/watch?v=XQHNrJ_3Rjc

파이썬 기상청

Node.js 설치부터 DB까지

https://javafa.gitbooks.io/nodejs_server_basic/content/chapter1.html



Node js와 몽고디비로 블로그 만들기

http://supdev.tistory.com/37

http://html5around.com/wordpress/tutorials/node-js%EB%A1%9C-%EA%B0%84%EB%8B%A8%ED%95%9C-%EA%B2%8C%EC%8B%9C%ED%8C%90-%EB%A7%8C%EB%93%A4%EA%B8%B0/



Node js 이메일

https://blog.naver.com/cck223/220982251294



node.js mongodb 연동 및 웹에 json 형식으로 데이터 보여주기

http://junnyproject.tistory.com/m/70

http://itpangpang.xyz/269?category=585481

web storm 5월 4일 1달간 무료로 사용 시작함.


https://blog.naver.com/kuhas2011/220596422744

무료 서버 호스팅


2018년 5월 5일 어린이날

node js 강의 7장 ch02 까지 완료 path 내장모듈 사용해서 파일의 경로를 자유자재로 사용 가능

객체 안에 함수 할당 가능 !!

13장 까지 완료 push,pop 내부함수 중요! callback 함수도 중요!


2018년 5월  7일 nodejs 유튜브 25장 까지 완료

콜백함수 .... 앞에 것이 되면 뒤에 함수 실행

express로 웹서버 만들기


2018 5월 8일 nodejs get 과 post로 클라이언트와 서버간에 데이터를 주고받을수있다.


2018 5월 9일

클라이언트가 데이터를 전달하고 싶은 방법 3가지

get 방식:query

post방식 :body

url 안에 넣어서 보내는 방식(path안에 포함) : params

ch05-13 까지 강의 완료

쿠키와 세션---> 자동으로 로그인 


2018년 5월 10일

ch05 모든 강의 완료 파일업로드 기능 해봤지만 에러뜸

다음 ch06은 몽고DB를 이용한 node js와 DB의 연결. DB를 사용해보기 전 node js의  기능들을 더 숙달해 봐야할듯 싶다


2018년 5월 11일

mongdb와 nodejs 연결 도중 db.collection is not a function에러

--->mongodb 버전 3.0이상을 사용할 때는, connection을 할 때에 database명을 명시해야 한다는 것이다.

3.0 버전 이후부터는 database 오브젝트를 가지고있는 클라이언트 오브젝트를 반환해주기때문에

db = database.db('local'); <----이렇게 해줘야 한다.


-----------------예시----------------------

var database;


function connectDB() {

    var databaseUrl = 'mongodb://localhost:27017/local';


    MongoClient.connect(databaseUrl,function (err,db) {

        if(err){

            console.log('데이터베이스 연결 에러 발생');

            return;

        }

        console.log('데이터베이스에 연결됨 : '+databaseUrl);

        database = db.db('local');

    });

}

----------------예시-----------------------

http://preamtree.tistory.com/109


mongoose 외장 모듈 사용시 UserShema와 UserModel을 선언해준다. 

UserShema은 테이블을 정의하는것과같다탇 UserModel은 데이터를 조작한다.

6-8까지 완료


2018년 5월 12일

C:\Program Files\MongoDB\Server\3.6\bin 들어가서

mongod --dbpath /Users/kim/database/local 마우스 오른쪽으로 복사 붙여넣기 실행

C:\Users\kim 에서 mongo 실행 완료..


/public 안에 html 파일의 버튼 액션

<form method="post" action="/process/adduser">

이 js파일의 router.route('/process/adduser') 과 같아야지 route안으로 들어와

동작하게된다.

https://www.youtube.com/watch?v=iXkl5lwjsD8&index=25&list=PLuHgQVnccGMBnrdKRODJmbH7UZ2A48LBK

query 사용예제


-get방식 사용 : 링크 클릭했을때 주소가 바뀌길 원하면( 복사 할때 친구한테 주소 복사해줄때)

쿼리 스트링으로 데이터를 전송!! <- 중요

express가 기본적으로 제공!


-post방식 사용:아이디와 비밀번호를 입력하려고 했을때 만약 get방식이면

아이디와 비밀번호가 url상에 나타나기 때문에 id,password를 복사하면

큰일난다. 그래서 url상에 나타나지 않는 방식인 post 방식을 사용하는게 맞다.

url상에 엄청나게 많은 데이터가 있으면 길이가 너무 길어진다 그래서 post방식을 쓰기도 한다.

데이터가 암시적으로 사람의 눈에 보이지 않게 전송<-중요!

express가 기본적으로 제공하지 않아서 미들웨어(body-parser)을 lead하고

app.use(bodyParser.urlencoded({extended:false}));

한다음 req.body에서 데이터를 받을 수 있다.


생활코딩 node js 34강까지 완료...

http://expressjs.com/ko/

express 설명들 있음


5월 19일

http://luckyyowu.tistory.com/346

req,res 객체 정리

router 안에서 res.write와 res.redirect를 같이 쓸수없다

이유는 다른한개가 버퍼에 저장되면 뒤에꺼를 잡아먹고 버퍼로 가기때문이다

res.write('<script>alert("패스워드가 틀립니다.");location.href="/views/login.html";</script>');

이렇게 해야한다.


5월 20일

static을 사용하면 따로 함수를 선언 않해주고도 router에서  사용할수있다

제 6강의 마지막 부분은 비밀번호를 암호화하는 부분이고 MYSQL과 NODEJS

를 연동하는 부분이기 때문에 넘어감

제 7-1강 부터 시작 exports사용

exports는 한계가 있음 exports 전역객체 설정

exports에다가 속성을 추가하는게 아니라 exports에 객체를 바로 할당

하면 문제가 생김

exports를 사용할때에는 무조건 속성으로 추갛해줘야한다.

그래서 module.exports를 사용한다.



5월 21일

http://supdev.tistory.com/37

php에서 php와 같은 역할은 하는 ejs 라는것을알았다


5월 22일

list를 js파일에서 ejs로

이제 views/listuser.html에서가 아닌 board.html 에서 조회 클릭시 데이터를

보여주게 ..... 

내일 할거 게시판 글 삭제.. 팀원소개 앞에꺼.... 


5월 23일

좋은거 알았다.https://getbootstrap.com/docs/4.1/examples/blog/

부트스트랩!

https://hidelryn.com/view/6

몽고디비 업데이트 delete


5월 25일 

iot 데이터 과제 index.html 파일 읽어오는 코드랑 app2.js 에서

 fs.writeFile('a.txt','weather: '+input2+'\n'+input,'utf-8',function(e){


        });

추가 해야함


5월 26일

NODE JS 

https://www.youtube.com/watch?v=SGU_UMDVEdM

여기서 동영상 강의 듣자 개념 완벽하지 않은거 여기서 보완할수 있을듯하다.

node js나 다른언어를 배울때도 책을 통해서 배우는 것이 좋아보인다


5월 29일

nodejs에서 context라는 객체의 값을 확인 하고 싶을때

console.log('context :',context); 하면 객체가 가진 값 확인 가능

사용자 행동 로그남기기 http://thesunrises.tistory.com/950


6월 1일

https://www.youtube.com/watch?v=PNtsOqW4wnE

6강

https://www.youtube.com/watch?v=HILKjcFePOA 

7강 여기있음


6월 2일

비동기 방식의 nodejs를  순차적으로 실행하기 위해서 async 를 쓴다.

async.series([ 태스크1, 태스크2, 태스크3],function(err,results){완료콜백});


https://www.youtube.com/watch?v=_kH7JJqe3lo

10강


6월 3일

https://www.youtube.com/watch?v=_kH7JJqe3lo

10강에서 JSON에 대해서 강의.

JSON은 V8 내장 클래스로서 모듈 로딩이 불필요하다.

JSON을 생성하는 코드는 JSON.stringfy()

JSON을 파싱하는 코드는 JSON.parse()


rest api

url 가져와서 그 url을 분석한뒤 사용자가 원하는 걸 보여줄수있다.

json과 xml 을 사용한다.


app.use('/public',static(path.join(__dirname,'public')));

(앞)public 경로를 요청하면 (뒤)public이라는 파일안에서 찾아서 있으면 요청에 답해준다.


로그 남기기 쉽게해주는 모듈 : morgan

다양한 형태로 로그 남기기: winston --> 별도의 transports(DailyRotateFile, MongoDB 등)

HTML METHOD 에서 GET이랑 POST 말고 다른거 쓰고싶으면 --> METHOD OVERRIDE 모듈씀

15강 까지 완료


6월 6일

https://opentutorials.org/module/938/7373

fs 모듈 read,write, 예외 처리



자바 Interface 문법


0.인테페이스는 작업 명세서(작업 지시서) 라고 불린다. 

1.인터페이스는 상수와 추상메소드만 존재 한다.

2.자바는 다중 상속(extends)는 불가하지만 인터페이스는 여러개의 클래스를 imprement(다중 구현) 가능하다.

3.인터페이스 안의 추상 메소드를 각각 재정의 해서 사용해야 한다.


객체 타입으로 인터페이스로 사용 할 수있다. ==> 배열의 타입으로 사용할 수 있다.

  


  3개의 데이터타입을 하나로 묶어주는 Toy


 PoohToyClass를 다양한 형식의 타입으로 나타낼 수 있다. (다형성)



인터페이스와 추상클래스의 공통점과 차이점


'프로그래밍 > JAVA' 카테고리의 다른 글

Java for-each 쉽게 이해하기  (0) 2018.07.19
JAVA 싱글턴 패턴  (0) 2018.07.19
JAVA 상속(Override) 재정의, super  (0) 2018.07.17
자바 Static 변수  (0) 2018.07.16
리펙토링(Refactoring)의 원칙과 정의  (0) 2018.07.16

+ Recent posts