import java.io.UnsupportedEncodingException;

import java.util.List;

import java.util.Properties;


import javax.mail.Address;

import javax.mail.Authenticator;

import javax.mail.Message;

import javax.mail.MessagingException;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeMessage;

import javax.mail.internet.MimeUtility;


import com.srpost.salmon.lang.StringUtil;


public class SMTPMailSend {


    public static void mailSend(List<String> toMails, String fromMail, String fromName, 

 String contents, String title, String mailId, 

 String mailPwd) throws MessagingException, UnsupportedEncodingException {


        if (StringUtil.isEmpty(mailPwd)) {


            // 내 메일 Access 허용 비밀번호,

            mailPwd = "구글에서 발급받은 16자리"; (gmail 로그인 비밀번호 아님)

        }


        Properties props = new Properties();


        props.put("mail.smtp.user", "내 Gmail 주소"); // "user@gmail.com"

        props.put("mail.smtp.host", "smtp.gmail.com");

        props.put("mail.smtp.port", "465");

        props.put("mail.smtp.starttls.enable", "true");

        props.put("mail.smtp.auth", "true");

        props.put("mail.smtp.debug", "true");

        props.put("mail.smtp.socketFactory.port", "465");

        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

        props.put("mail.smtp.socketFactory.fallback", "false");


        Authenticator auth = new SMTPAuthenticator(mailId, mailPwd);


        Session mailSession = Session.getInstance(props, auth);

        mailSession.setDebug(true); // 메일 전송할 때 상세한 상황을 콘솔에 출력한다.


        Address fromMailAddress = null;


        if (StringUtil.isEmpty(fromName)) { // 메일 보낸사람이름 등록시

            fromMailAddress = new InternetAddress(fromMail);

        }

        else { // 메일 보낸사람이름 미등록시

            fromMailAddress = new InternetAddress(fromMail, MimeUtility.encodeText(fromName, "UTF-8", "B"));

        }


        MimeMessage mailMsg = new MimeMessage(mailSession);

        mailMsg.setFrom(fromMailAddress);

        mailMsg.setSubject(title, "UTF-8");


        InternetAddress[] toMailAddress = new InternetAddress[toMails.size()];


        for (int i = 0; i < toMails.size(); i++) {


            toMailAddress[i] = new InternetAddress(toMails.get(i));

        }

        mailMsg.setRecipients(Message.RecipientType.TO, toMailAddress);

        mailMsg.setContent(contents, "text/html;charset=utf-8");


        // 전송

        Transport.send(mailMsg);

    }

}



import javax.mail.Authenticator;

import javax.mail.PasswordAuthentication;


public class SMTPAuthenticator extends Authenticator {


    private String mailId;

    private String mailPwd;


    public SMTPAuthenticator(String mailId, String mailPwd) {

        this.mailId = mailId;

        this.mailPwd = mailPwd;

    }


    @Override

    public PasswordAuthentication getPasswordAuthentication() {


        return new PasswordAuthentication(mailId, mailPwd);

    }

}


PS. 위의 작업 전 구글 계정 2단계 인증을 등록해야만, 가능하다. 인증 안 받고 해보진 않았다. 
     인터넷에서 인증을 받아야 된다고 해서..

1. https://myaccount.google.com/

2. https://accounts.google.com/b/0/SmsAuthConfig?hl=ko 
> 설정 시작

3. 재로그인

4. https://accounts.google.com/b/0/SmsAuthSettings?Setup=1
> 전화번호 입력 후 코드 전송

> 인증코드 입력

5. https://security.google.com/settings/security/apppasswords?pli=1
> 기기선택과 앱(MAIL) 선택 후 생성

6. 생성된 비밀번호를 위 소스의 pwd란에 입력한다.
          > mailPwd = "구글에서 발급받은 16자리";     여기 입력 할 비밀번호.


'공부 > JAVA' 카테고리의 다른 글

JAVA_[Google URL Shortener API]  (0) 2017.11.22
JAVA_[ Collection.srot (리스트 정렬)]  (0) 2015.03.26
JAVA_[ 제어자 ]  (0) 2015.02.10
JAVA_[ JVM의 메모리구조 ]  (0) 2015.02.10
JAVA_[Thread join()]  (0) 2015.02.09









출처 : www.hyoyoung.net/60 (문제시 자삭)

- 정렬하는데 쓰는 Interface 2가지가 있다.

1. Java.lang Interface Comparable<T>

2. Java.util Interface Comparator<T>


- Comparable Implements<T>

Implements Comparable 하면, public int compareTo(object o) {} 메서드가 생성이 되는데..

해당하는 객체로 타입을 변경하고, 정렬부분을 구현하면된다.(총 점수 내림차순)

Collections.srot();


- Implements Comarator<T>

Collections.sort(studentList, new ClassStudentNoComparator());

Collections.sort(studentList, new ClassTotalComparator());

'공부 > JAVA' 카테고리의 다른 글

JAVA_[Google URL Shortener API]  (0) 2017.11.22
JAVA_[SMTP mail 전송(Gmail)]  (0) 2015.05.06
JAVA_[ 제어자 ]  (0) 2015.02.10
JAVA_[ JVM의 메모리구조 ]  (0) 2015.02.10
JAVA_[Thread join()]  (0) 2015.02.09


* 이미지에요.(화면단에서 OptGroup Label 명은 선택되지 않는다)

'공부 > JSP' 카테고리의 다른 글

JSP_[ <init-param> & <context-param> ]  (0) 2015.02.12
JSP_[ forward 와 sendRedirect ]  (0) 2015.02.11
JSP_[ 첨부파일 유무확인 ]  (0) 2014.06.03
JSP_[ ServletConfig 와 ServletContext 차이점 ]  (0) 2014.06.02
JSP_[ EL 비교연산자 ]  (0) 2014.03.11

인터넷 펌

- toPrice(cipher)

: 엘리먼트의 value 에서 문자열을 제거한 숫자값에 3자리 콤마(,)

(cipher) 의 숫자를 넣으면 해당 숫자의 자릿수만큼 콤마로 자리수를 표시한다. 값을 넣지 않으면 기본 3자리

- getOnlyNumberic(data)

: 엘리먼트의 value 에서 문자열을 제거한 숫자만은 반환

 

- 파일 :

jquery.money.js

 

- 예제(함수) :

jQuery("#inputForm").keyup(function(event) {

jQuery(this).toPrice();

});

 

 

'공부 > JQuery' 카테고리의 다른 글

JQuery_[상태 필터 선택자]  (0) 2015.01.29
JQuery_[위치기반 필터 선택자]  (0) 2015.01.29
JQuery_[ $.param() / serialize() ]  (0) 2014.08.26
JQuery_[ Scroll 이벤트 ]  (0) 2014.08.25
JQuery_[ $.extend() ]  (0) 2014.08.25

▶ <init-param>

jsp 파일은 web.xml 파일에 등록하지 않아도, 웹 브라우저에서 호출할 수 있지만, 

초기화 파라미터를 기재하기 위해서는 web.xml 파일에 등록해야 한다.


- 등록

<webapp>

<servelt>

<servlet-name>DBName-jsp</servlet-name>

<jsp-file>/DBName.jsp</jsp-file>

<init-param>

<param-name>DB_NAME</param-name>

<param-value>Oracle</param-value>

</init-param>

</servlet>

<servlet-mapping>

<servlet-name>DBName-jsp</servlet-name>

<url-pattern>/DBName</url-pattenr>

</servlet-mapping>

</webapp>


- 호출

<url-pattern> 의 값으로 호출 (http://localhost:8080/DBName) 하고,

실제 jsp 파일은 <jsp-file> 에 입력한 /DBName.jsp 가 호출되며, 해당 jsp 내에서 <init-param>에 입력한

초기화 파라미터를 사용할 수 있다.


- 사용(/DBName.jsp 안에서 사용한다고 가정)

<%

String dbName = config.getInitParameter("DB_NAME");

%>



▶ <context-param>

웹 어플리케이션 전체에서 호출가능한 초기화 파라미터


- 등록

<webapp>

<context-param>

<param-name>DB_NAME</param-name>

<param-value>Oracle</param-value>

</context-param>

</webapp>


- 호출

<init-param> 와 같이 특정 서블릿(& JSP)에 속하는 초기화 파라미터뿐 아니라 웹 어플리케이션 전체에서 호출 및 사용가능


- 사용

<%

    String dbName = application.getInitParameter("DB_NAME");

%>

※ JSP 내 에서 익스프레션 'EL' 문으로도 사용가능하다

1. ${initParam["DB_NAME"]}

2. ${initParam.DB_NAME}

'공부 > JSP' 카테고리의 다른 글

JSP_[ SelectBox 그룹묶기(HTML) ]  (0) 2015.03.20
JSP_[ forward 와 sendRedirect ]  (0) 2015.02.11
JSP_[ 첨부파일 유무확인 ]  (0) 2014.06.03
JSP_[ ServletConfig 와 ServletContext 차이점 ]  (0) 2014.06.02
JSP_[ EL 비교연산자 ]  (0) 2014.03.11

▶ sendRedirect 는 URL 을 웹 브라우저로 보내서 간접적으로 웹 자원을 호출하지만, forward 메서드는 웹 서버쪽에서 호출

▶ sendRedirect 메서드를 이용하면 다른 웹 서버에 있는 웹 자원도 호출 가능 하지만, forward 메서드는 같은 웹 서버,

    같은 웹 어플리케이션 디렉터리 내에 있는 웹 자원만 호출 가능하다.

▶ sendRedirect 는 텍스트 데이터만 전달할 수 있지만, forward 메서드는 객체 형태의 모든 데이터를 전달할 수 있다.

▶ sendRedirect 는 한글 데이터를 전달하기 위해서는 URL 인코딩을 해야 하지만, forward 메서드는 그런 작업이 필요치 않다.

 

- ex)

- forward

RequestDispatcher dispatcher = request.getRequestDispatcher(url);
dispatcher.forward(request, response);

 

- sendRedirect

response.sendRedirect(url);

'공부 > JSP' 카테고리의 다른 글

JSP_[ SelectBox 그룹묶기(HTML) ]  (0) 2015.03.20
JSP_[ <init-param> & <context-param> ]  (0) 2015.02.12
JSP_[ 첨부파일 유무확인 ]  (0) 2014.06.03
JSP_[ ServletConfig 와 ServletContext 차이점 ]  (0) 2014.06.02
JSP_[ EL 비교연산자 ]  (0) 2014.03.11

- 제어자 분류

1. 접근제어자 : public, protected, default, private

2. 그외제어자 : static(클래스), final, abstract(추상), native, transient(직렬화 X), synchronized(동기화), volatile, strictfp


public - 접근제한이 전혀 없다.

protected - 같은 패키지 내에서, 그리고 다른패키지의 자손클래스에서 접근이 가능하다.

default - 같은 패키지내에서만 접근이 가능하다.

private - 같은 클래스 내에서만 접근이 가능하다.


private < default < protected < public 




- 제어자의 조합자

  

- 제어자 조합시 주의사항

1. 메서드에 static 과  abstract(추상) 함꼐 사용할 수 없다.

: static 메서드는 몸통(구현)있는 메서드만 사용 가능하다.

2. 클래스에 abstract(추상) 와 final 을 동시에 사용할 수 없다.

: 클래스에서 사용되는 final 은 확장할 수 없다는 의미이고, abstract 는 상속을 통해 완성해야한다는 의미로

  모순이다.

3. abstract(추상) 메서드의 접근제어자가 private 일 수 없다.

: abstract 메서드는 자손클래스에서 구현해 주어야 하는데 접근제어자가 private 이면, 자손클래스에서 접근할 수 없다.

4. 메서드에 private 와 final 을 같이 사용할 필요는 없다.

: 접근제어자가 private 인 메서드는 오버라이딩할 수 없기 때문이다.

'공부 > JAVA' 카테고리의 다른 글

JAVA_[SMTP mail 전송(Gmail)]  (0) 2015.05.06
JAVA_[ Collection.srot (리스트 정렬)]  (0) 2015.03.26
JAVA_[ JVM의 메모리구조 ]  (0) 2015.02.10
JAVA_[Thread join()]  (0) 2015.02.09
JAVA_[Thread start() & run()]  (0) 2015.02.06

- 응용프로그램이 실행되면, JVM 은 시스템으로부터 프로그램을 수행하는데 필요한 메모리를 할당받고 JVM은 이 메모리를 용도   에 따라 여러 영역으로 나누어 관리한다.


1. 메서드 영역(Method Area)

- 프로그램 실행 중 어떤 클래스가 사용되면, JVM 은 해당 클래스의 *.class 읽어서 분석하여 클래스에 대한 정보를

  Method Area 에 저장한다. 이 때, 클래스 내의 클래스변수 도 이 영역에 함꼐 생성된다.


2. 힙(Heap)

- 인스턴스가 생성되는 공간.

  프로그램을 실행 중 생성되는 인스턴스 모두 이 곳에 생성된다. 즉, 인스턴스변수(Instance variable)들이 생성되는 공간


3. 호출스택(Call Stack 또는 Execution Stack)

- 호출스택은 메서드의 작업에 필요한 메모리 공간을 제공한다.

  메서드가 호출되면, 호출스택에 호출된 메서드를 위한 메모리가 할당되며, 이 메모리는 메서드가 작업을 수행하는 동안 

  지역변수(매개변수)들과 연산의 중간결과 등을 저장하는데 사용된다. 그리고, 메서드가 작업을 마치게 되면 할당되었던 메모리

  공간은 반환되어 비워진다.

  

  각 메서드별 메모리상의 작업공간은 서로 구별되며, 호출된 메서드는 작업공간에 쌓이게 되는데, 순차적으로 쌓이게 되며,

  젤 최근에 호출된 메서드 작업공간이 가장위에 쌓인다.

  - 언제나 호출스택의 제일 위에 있는 메서드가 현재 실행 중인 메서드이다.

  - 아래에 있는 메서드가 바로 위의 메서드를 호출한 메서드이다.

  


'공부 > JAVA' 카테고리의 다른 글

JAVA_[ Collection.srot (리스트 정렬)]  (0) 2015.03.26
JAVA_[ 제어자 ]  (0) 2015.02.10
JAVA_[Thread join()]  (0) 2015.02.09
JAVA_[Thread start() & run()]  (0) 2015.02.06
JAVA_[ 리눅스 권한변경 ]  (0) 2014.12.26

▶ join()

- 지정된 시간동안 쓰레드가 실행되도록 한다. 지정된 시간이 지나거나 작업이 종료되면, join() 을 호출한 쓰레드로 다시 돌아와

  실행을 계속한다.


- ex (th1 start() 후에 th1.join() 하면 th1 쓰레드가 종료되기전까지 main 메서드가 대기중으로 th2 쓰레드를 실행하지 않고 대기)

public class Thread_Ex14 {


    public static void main(String args[]) {

        ThreadEx14_1 th1 = new ThreadEx14_1();

        ThreadEx14_2 th2 = new ThreadEx14_2();


        th1.start();

        try {

            th1.join();

        } catch (InterruptedException e) {

            e.printStackTrace();

        }

        th2.start();

    }

}


class ThreadEx14_1 extends Thread {

    @Override

    public void run() {

        for (int i = 0; i < 300; i++) {

            System.out.println("-");

        }

    }

}


class ThreadEx14_2 extends Thread {

    @Override

    public void run() {

        for (int i = 0; i < 300; i++) {

            System.out.println("|");

        }

    }

}

'공부 > JAVA' 카테고리의 다른 글

JAVA_[ 제어자 ]  (0) 2015.02.10
JAVA_[ JVM의 메모리구조 ]  (0) 2015.02.10
JAVA_[Thread start() & run()]  (0) 2015.02.06
JAVA_[ 리눅스 권한변경 ]  (0) 2014.12.26
JAVA_[ map의 Key, Value Iterator 으로 자동으로 불러오기 ]  (0) 2014.12.10

+ Recent posts