input accept 속성사용기

Java 2018. 9. 28. 13:07
SMALL

정의

type 속성이 File Upload state일 경우 accept 속성을 활용하여 서버에서 수용하는 파일의 타입에 대해 사용자 에이전트가힌트를 주도록 할 수 있습니다.

속성 값

콤마로 구분된 예약어 목록입니다. 각각의 예약어들은 다음 중 하나와 매칭되어야 합니다.(대소문자는 구분하지 않습니다.)

예약어들은 중복될 수 없습니다. 이 중복을 체크할때는 대소문자를 구분하지 않습니다. (audio/* 와 Audio/* 는 중복입니다.)

예제

예제1

<p><label>프로필 사진: <input type="file" name="profile" accept="image/*"></label></p>
Opera 11 에서 실행화면

예제1은 모든 이미지 형태의 파일을 힌트로 보여줍니다.

예제2

<p><label>동영상: <input type="file" name="profile" accept="video/mp4"></label></p>
Opera 11 에서 실행화면

예제2는 'mp4' 형식의 동영상 파일을 힌트로 보여줍니다.

예제3

<p><label>지원서: <input type="file" name="profile" accept="application/msword"></label></p>
Opera 11 에서 실행화면

예제3은 MS Word 파일을 매개변수 없는 유효한 마임 타입(valid MIME type with no parameters) 지정함으로 해당 파일을 힌트로 보여줍니다.


출처: http://html5ref.clearboth.org/html5:attribute:accept_input



LIST
블로그 이미지

SeoHW

,

java split 문자열자르기

Java 2018. 9. 28. 09:22
SMALL

split는 문자열을 나누는 메서드다.

String 문자열 = "가:나:다:가나다";
String[] 나눈배열 = 문자열.split(":");
//나눈배열 : {"가", "나", "다", "가나다"}
System.out.println(나눈배열[0]);
//결과 : 가
System.out.println(나눈배열[나눈배열.length-1]);
//결과 : 가나다

그런데 아래처럼 쓰면 작동을 안 한다.

String 문자열 = "가.나.다.가나다";
String[] 나눈배열 = 문자열.split(".");

이렇게 써야 한다.

String 문자열 = "가.나.다.가나다";
String[] 나눈배열 = 문자열.split("\\.");

그래야 작동한다.

이건 split의 인자로 들어가는 String 토큰이 regex 정규식이기 때문이다. 정규식에서 .은 무작위의 한 글자를 의미한다. 그러면 모든 문자가 토큰이 되기 때문에 배열에 남는 게 없게 되는 것이다.

따라서 이스케이프 문자를 앞에 붙여 줘야 한다. 그런데 String 안에 이스케이프 문자인 \를 써 주려면 \\라고 써 줘야 한다. 따라서 \\라고 쓰는 것이다. 그래서 \\.이라고 쓰면 정규식 쪽에서는 \.라고 인식을 하고 실제 .을 찾게 되는 것이다.

아악… 머리아프다. 여튼 기억하라. 기호를 써서 split를 쓸 때 뭔가 작동을 안 하면 \\을 붙여 보라.

참, 그냥 \라고만 붙여야 하는 것도 있는데, 아래 애들이다.

\b \t \n \f \r \" \' \\

참고하면 될 것이다.

출처 : https://mytory.net/archives/285

LIST
블로그 이미지

SeoHW

,
SMALL

String형 배열 seoul의 element중 Kim의 위치 x를 찾아, 김서방은 x에 있다는 String을 반환하는 함수, solution을 완성하세요. seoul에 Kim은 오직 한 번만 나타나며 잘못된 값이 입력되는 경우는 없습니다.

제한 사항
  • seoul은 길이 1 이상, 1000 이하인 배열입니다.
  • seoul의 원소는 길이 1 이상, 20 이하인 문자열입니다.
  • Kim은 반드시 seoul 안에 포함되어 있습니다.
입출력 예
seoulreturn
[JaneKim]김서방은 1에 있다



풀이다


import java.util.*;

class Solution {

  public String solution(String[] seoul) {

      String answer = "";

        int a = Arrays.asList(seoul).indexOf("Kim");


   

    return "김서방은 "+ a + "에 있다";

  }

}

배열에서 "Kim" 을 찾아서 인덱스 값을 가져오는것이다 


https://programmers.co.kr/ 에서 문제를 풀었다



LIST
블로그 이미지

SeoHW

,
SMALL

※ JAVA 배열 내에 중복값 제거하기/출력하기


import java.util.TreeSet;

import java.util.Iterator;


TreeSet 중복값을 제거해주고 정렬해줍니다

int [] arr = {1,1,1,2,3,4,5,6};

TreeSet t = new TreeSet();

            for(int i=0; i< arr.length; i++)

            {

                t.add(arr[i]);

            }

            Iterator it = t.iterator();

            int x = 0;

            while(it.hasNext())

            {

                System.out.println(it.next());


            }

결과값은 1,2,3,4,5,6 으로 나오게 됩니다


LIST
블로그 이미지

SeoHW

,
SMALL
String[] test = {"1","2","3","1","2"};
System.out.println("before length=" + test.length);
 
test = new HashSet<String>
(Arrays.asList(test)).toArray(new String[0]);
System.out.println("after length=" + test.length);
 
for(String s:test){
    System.out.println(s);            
}
 
/* result 
before length=5
after length=3
1
2
3

*/


LIST
블로그 이미지

SeoHW

,
SMALL

SimpleMagic  example 입니다

SimpleMagic - Simple Magic Content and Mime Type Detection Java Package

Here's a quick "magic" number package that I whipped up which allows content-type (mime-type) determination from files and byte arrays. It makes use of the magic(5) Unix content-type files to implement the same functionality as the Unix file(1) command in Java which detects the contents of a file. It uses either internal config files or can read /etc/magic/usr/share/file/magic, or other magic(5) files and determine file content from FileInputStream, or byte[].

Simple Code Sample

The following is a quick code sample to help you get started using the library for mime-type detection.

// create a magic utility using the internal magic file
ContentInfoUtil util = new ContentInfoUtil();
// if you want to use a different config file(s), you can load them by hand:
// ContentInfoUtil util = new ContentInfoUtil("/etc/magic");
...
ContentInfo info = util.findMatch("/tmp/upload.tmp");
// or
ContentInfo info = util.findMatch(inputStream);
// or
ContentInfo info = util.findMatch(contentByteArray);
// display content type information
if (info == null) {
   System.out.println("Unknown content-type");
} else {
   // other information in ContentInfo type
   System.out.println("Content-type is: " + info.getName());
}

Free Spam Protection   Eggnog Recipe   Android ORM   Simple Java Magic   JMX using HTTP   OAuth 2.0 Simple Example   Great Eggnog Recipe   Christopher Randolph  


다운

링크 : https://github.com/j256/simplemagic

LIST
블로그 이미지

SeoHW

,

ORM, JPA Hibernate 란?

Java 2018. 3. 16. 17:49
SMALL

ORM, JPA, Hibernate란?

ORM (Object Relational Mapping) 무엇인가?

RDB 테이블을 객체지향적으로 사용하기 위한 기술입니다. RDB 은 객체지향적 (상속, 다형성, 레퍼런스, 오브젝트 등)으로 접근하기 쉽지 않습니다.

때문에 ORM을 사용해 오브젝트와 RDB 사이에 객체지향적으로 다루기 위한 기술입니다.


 


JPA (Java Persistence API) 무엇인가?

ORM 전문가가 참여한 EJB 3.0 스펙 작업에서 기존 EJB ORM이던 Entity Bean JPA라고 바꾸고 JavaSE, JavaEE를 위한 영속성(persistence) 관리와 ORM을 위한 표준 기술입니다. JPA ORM 표준 기술로 Hibernate, OpenJPA, EclipseLink, TopLink Essentials과 같은 구현체가 있고 이에 표준 인터페이스가 바로 JPA입니다.


 


HIBERNATE 무엇인가?

Boss에서 개발한 ORM(Object Relational Mapping) 프레임워크 입니다.


장점

Hibernate는 특정 클래스에 매핑되어야 하는 데이터베이스의 테이블에 대한 관계 정의가 되어 있는 XML 파일의 메타데이터로 객체관계 매핑을 간단하게 수행시킵니다.

Hibernate를 사용하면 데이터베이스가 변경되더라도 SQL 스크립트를 수정하는등의 작업을 할 필요가 없습니다.

애플리케이션에서 사용되는 데이터베이스를 변경시키고자 한다면 설정파일의 dialect 프로퍼티를 수정함으로서 쉽게 처리할 수 있습니다.

Hibernate MySQL, Oracle, Sybase, Derby, PostgreSQL를 포함한 많은 데이터베이스를 지원하며 POJO기반의 모델과도 원활하게 동작합니다.


 


 


JPA를 쓰는가?

1. 기존 SQL 중심적인 개발시 불편하다

-       쿼리가 변경되면 이에따른 프로그램 소스 DTO객체의 변경도 불가피하게 일어난다

-       데이터를 가져와 객체지향적으로 관계를 Mapping하는 일이 매번 일어난다.

!!SQL의존적인 개발이 이루어진다.


 


2. 객체-관계 간 모델 불일치

관계형 데이터베이스에는 로우와 컬럼의 2차원 형태로 데이터가 저장된다. 데이터 관계는 외래키foreign key 형태로 표현된다. 문제는 도메인 객체를 관계형 데이터 베이스로 저장할 때 발생한다. 애플리케이션의 객체는 로우와 컬럼 형태가 아니다. 도메인 객체는 객체의 상태를 속성(변수)으로 가지고 있다. 그래서 도메인 객체 그대로 관계형 데이터베이스에 저장할 수가 없다. 이러한 불일치를 객체-관계 간 임피던스 불일치object-relational impedance mismatch라고 합니다.


 


3. 상속 불일치

상속은 객체 세계에서는 지원하지만, 관계형 스키마에서는 지원하지 않는다. 상속은 모든 객체지향 언어, 특히 자바에서 바늘과 실처럼 뗄 수 없는 특징입니다. 안타깝게도 관계형 스키마에는 상속 개념이 없습니다. 회사에서 임원과 직원의 예를 들어보면. 임원 개인도 회사의 직원이죠. 이 관계를 데이터베이스에서 표현하는 것은 테이블 간 관계 수정이 필요해서 쉽지 않습니다. 상속 없이 현실 세계의 문제 상황을 표현하는 것은 매우 복잡한 일입니다. 그런데 데이터베이스는 상속 관계와 같은 형태를 알지 못하지요. 이것을 해결할 간단한 방법은없지만, 문제를 풀 수 있는 몇 가지 접근법이 있습니다. 이 접근법은 다양한 클래스-테이블class-to-table 전략을 사용합니다.


4. 관계와 연관 관계의 불일치

1. SQL 중심적인 개발의 문제점

 - field 하나추가시  쿼리도 바꿔야하고  VO도 바꿔야되고 ...

 - SQL에 의존적인 개발을 피하기 어렵다.

 - 객체답게 모델링 할수록 매핑 작업만 늘어난다


 


장점

-       객체지향적으로 데이터를 관리할 수 있기 때문에 비즈니스 로직에 집중 할 수 있으며,

객체지향 개발이 가능합니다.

-       테이블 생성, 변경, 관리가 쉽다. (JPA를 잘 이해하고 있는 경우) 로직을 쿼리에 집중하기 보다는

객체자체에 집중 할 수 있습니다.

-       빠른 개발이 가능합니다.


 


단점

-       어렵다. 장점을 더 극대화 하기 위해서 알아야 할게 많습니다.

-       잘 이해하고 사용하지 않으면 독이될수도 있습니다.

-       성능상 문제가 있을 수 있다.(이 문제 또한 잘 이해해야 해결이 가능합니다.



 


 


JPA, HIBERNATE  Architecture










 

 


 


 


 


 

 



 



 


 



출처 http://www.libqa.com/wiki/769


LIST
블로그 이미지

SeoHW

,
SMALL

문제

자연수 N이 주어지면, N의 각 자릿수의 합을 구해서 return 하는 solution 함수를 만들어 주세요.
예를들어 N = 123이면 1 + 2 + 3 = 6을 return 하면 됩니다.

제한사항
  • N의 범위 : 100,000,000 이하의 자연수

제가 작성한 답

import java.util.*;


public class Solution {

public int solution(int n) {

int answer = 0;

        int length = (int)(Math.log10(n)+1);

            

int k = 0;

for(int i =0; i<length; i++)

{


k++;

String answer1 = String.valueOf(n).substring(i,k);

answer += Integer.parseInt(answer1);

}

return answer;

}

}

LIST
블로그 이미지

SeoHW

,

java 한글 깨짐 찾기

Java 2018. 1. 25. 16:09
SMALL
String word = "인코딩 문제인가? 이클립스 문제인가? WAS문제 인가 그것이 알고 싶다....";
System.out.println("utf-8 -> euc-kr        : " + new String(word.getBytes("utf-8"), "euc-kr"));
System.out.println("utf-8 -> ksc5601       : " + new String(word.getBytes("utf-8"), "ksc5601"));
System.out.println("utf-8 -> x-windows-949 : " + new String(word.getBytes("utf-8"), "x-windows-949"));
System.out.println("utf-8 -> iso-8859-1    : " + new String(word.getBytes("utf-8"), "iso-8859-1"));
System.out.println("iso-8859-1 -> euc-kr        : " + new String(word.getBytes("iso-8859-1"), "euc-kr"));
System.out.println("iso-8859-1 -> ksc5601       : " + new String(word.getBytes("iso-8859-1"), "ksc5601"));
System.out.println("iso-8859-1 -> x-windows-949 : " + new String(word.getBytes("iso-8859-1"), "x-windows-949"));
System.out.println("iso-8859-1 -> utf-8         : " + new String(word.getBytes("iso-8859-1"), "utf-8"));
System.out.println("euc-kr -> utf-8         : " + new String(word.getBytes("euc-kr"), "utf-8"));
System.out.println("euc-kr -> ksc5601       : " + new String(word.getBytes("euc-kr"), "ksc5601"));
System.out.println("euc-kr -> x-windows-949 : " + new String(word.getBytes("euc-kr"), "x-windows-949"));
System.out.println("euc-kr -> iso-8859-1    : " + new String(word.getBytes("euc-kr"), "iso-8859-1"));
System.out.println("ksc5601 -> euc-kr        : " + new String(word.getBytes("ksc5601"), "euc-kr"));
System.out.println("ksc5601 -> utf-8         : " + new String(word.getBytes("ksc5601"), "utf-8"));
System.out.println("ksc5601 -> x-windows-949 : " + new String(word.getBytes("ksc5601"), "x-windows-949"));
System.out.println("ksc5601 -> iso-8859-1    : " + new String(word.getBytes("ksc5601"), "iso-8859-1"));
System.out.println("x-windows-949 -> euc-kr     : " + new String(word.getBytes("x-windows-949"), "euc-kr"));
System.out.println("x-windows-949 -> utf-8      : " + new String(word.getBytes("x-windows-949"), "utf-8"));
System.out.println("x-windows-949 -> ksc5601    : " + new String(word.getBytes("x-windows-949"), "ksc5601"));
System.out.println("x-windows-949 -> iso-8859-1 : " + new String(word.getBytes("x-windows-949"), "iso-8859-1"));


'JAVA 개발 > JAVA' 카테고리의 다른 글



출처: http://devlop.tistory.com/6 [삽질 LEE의 아이티 이야기]

LIST
블로그 이미지

SeoHW

,
SMALL

String dd = "Sun, 22 Oct 2017 15:00:00 GMT";

String o11 ="";

위 형식을 Date 형식으로 바꿀것이다


SimpleDateFormat org_format = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss" ,Locale.ENGLISH);

SimpleDateFormat new_format = new SimpleDateFormat("yyyy-MM-dd");





Date dt = org_format.parse(dd);

o11 =  org_format.format(dt);

dd =  new_format.format(dt);


System.out.println(o11);

System.out.println(dd);




결과 :

Sun, 22 Oct 2017 15:00:00

2017-10-22


이렇게 출력된다 date형변환 Data의 형식에 맞춰줘야 형변환됨

예)EEE, dd MMM yyyy HH 위에 참고하시면 될것같습니다


이것떄문에 삽질 많이했네요 ㅠ



감사합니다.


LIST
블로그 이미지

SeoHW

,