자바로 오늘날짜와 시간 표현하기

 

DateMain.java

 

public class DateMain {

    public static void main(String[] args) {
        DateUtil date = new DateUtil();
        // 오늘날짜
        System.out.println("오늘날짜 => "+date.getDate());
        // 오늘 날짜와 현재 시간
        System.out.println("오늘날짜와 시간 => "+date.getDateTime());
        // 오늘 날자와 현재 시간(초)
        System.out.println("오늘날짜와 시간(초) => "+date.getTimeMillisecond());
    }
}

DateUtil.java

import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * DateUtil
 */
public class DateUtil {

    /**
     * 오늘날짜
     * @return
     */
    public String getDate() {
        long time = System.currentTimeMillis();
        SimpleDateFormat dayTime = new SimpleDateFormat("yyyy-MM-dd");
        String now = dayTime.format(new Date(time));
        return now;
    }

    /**
     * 오늘날짜와 시간 
     * @return
     */
    public String getDateTime() {
        long time = System.currentTimeMillis();
        SimpleDateFormat dayTime = new SimpleDateFormat("yyyy-MM-dd HHmmss");
        String now = dayTime.format(new Date(time));
        return now;
    }

    /**
     * 오늘날짜와 시간(초 까지)
     * @return
     */
    public String getTimeMillisecond() {
        long time = System.currentTimeMillis();
        SimpleDateFormat dayTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
        String now = dayTime.format(new Date(time));
        return now;
    }
}

 


결과화면

 

블로그 이미지

미나미나미

,

[java] gson 파싱(parse) double형 Int형 문제



Javascript 쪽에속 String으로 보낸 값을 파싱할 때,

int형을 double로 파싱하는 경우에 대해서 자체적으로 

class를 선언해서 이 부분을 지정해줘야 합니다.




예를 들어 , Map을 사용하는 경우.


Gson 선언 할때, Map 부분으로 파싱할 때, 만든 Java Class로 활용해서 파싱을 하겠다라고 지정해줍니다.


static Gson gson = new GsonBuilder().registerTypeAdapter(Map.class, new MapDeserializer()).setDateFormat("yyyy-MM-dd HH:mm:ss").serializeNulls().create();



Map으로 변환 할때 TypeToken을 지정해줍니다.


//String 값을 map으로 변환
public Map<String , ?> strJsonToHash(String json){
return gson.fromJson(json, new TypeToken<Map<String,Object>>() {}.getType());
}




Map.class, new MapDeserializer()


MapDeserializer.java


public class MapDeserializer implements JsonDeserializer<Map<String, Object>> {

@Override @SuppressWarnings("unchecked")
public Map<String, Object> deserialize(JsonElement json, Type typeOfT,
JsonDeserializationContext context) throws JsonParseException {
return (Map<String, Object>) read(json);
}

public Object read(JsonElement in) {
if(in.isJsonArray()){
//JsonArray인 경우
List<Object> list = new ArrayList<Object>();
JsonArray arr = in.getAsJsonArray();
for (JsonElement anArr : arr) {
//JsonPrimitive 나올 떄까지 for문
list.add(read(anArr));
}
return list;
}else if(in.isJsonObject()){
Map<String, Object> map = new HashMap<String, Object>();
JsonObject obj = in.getAsJsonObject();
Set<Entry<String, JsonElement>> entitySet = obj.entrySet();
for(Map.Entry<String, JsonElement> entry: entitySet){
//JsonPrimitive 나올 떄까지 for문
map.put(entry.getKey(), read(entry.getValue()));
}
return map;
}else if( in.isJsonPrimitive()){
JsonPrimitive prim = in.getAsJsonPrimitive();
if(prim.isBoolean()){
//true , fales 형으로
return prim.getAsBoolean();
}else if(prim.isString()){
//String으로
return prim.getAsString();
}else if(prim.isNumber()){
Number num = prim.getAsNumber();
//Math.ceil 소수점을 올림한다.
if(Math.ceil(num.doubleValue()) == num.longValue())
//소수점 버림, Int형으로.
return num.longValue();
else{
//소수점 안버림, Double 형으로
return num.doubleValue();
}
}
}
return null;
}
}





결과화면


Int형 값들은 int형으로 

Double의 값들은 Double형으로 반환합니다.



블로그 이미지

미나미나미

,

[java] url로 json 값 가져오기.



java URL로 json 값을 가져오겠습니다.



1. 특정 json 값을 가져올 수 있는 url이 존재해야합니다.


# soundcloud에서 Json 값을 가져오 겠습니다.

http://soundcloud.com/oembed?url=http%3A//soundcloud.com/forss/flickermood&format=json

String getJson = callURL("http://soundcloud.com/oembed?url=http%3A//soundcloud.com/forss/flickermood&format=json");


# URL 접속시 Json 값을 가져옵니다.






2. Json 읽어오기 위해서 특별한 Class를 생성하고, 메소드로 callURL 메소드를 생성합니다. 여기서 빠르게 처리하기 위해서 "static"으로 만들었음을 주의하세요.


import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.Charset;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLSession;

public class JsonReader {
public static String callURL(String myURL) {

System.out.println("Requeted URL:" + myURL);
StringBuilder sb = new StringBuilder();
URLConnection urlConn = null;
InputStreamReader in = null;

//error : Caused by: javax.net.ssl.SSLPeerUnverifiedException: Hostname not verified:
HostnameVerifier allHostsValid = new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
//특정 hostname만 승인을 해주는 형태
return true;
}
};
//
HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);

try {
URL url = new URL(myURL);
urlConn = url.openConnection();
if (urlConn != null)
urlConn.setReadTimeout(60 * 1000);
if (urlConn != null && urlConn.getInputStream() != null) {
in = new InputStreamReader(urlConn.getInputStream(), Charset.defaultCharset());
//charset 문자 집합의 인코딩을 사용해 urlConn.getInputStream을 문자스트림으로 변환 객체를 생성.
BufferedReader bufferedReader = new BufferedReader(in);
//주어진 문자 입력 스트림 inputStream에 대해 기본 크기의 버퍼를 갖는 객체를 생성.
if (bufferedReader != null) {
int cp;
while ((cp = bufferedReader.read()) != -1) {
sb.append((char) cp);
}
bufferedReader.close();
}
}
in.close();
} catch (Exception e) {
throw new RuntimeException("Exception URL:"+ myURL, e);
}
return sb.toString();
}
}






3. 결과화면



받은 문자를 json으로 확인.







블로그 이미지

미나미나미

,

[java] javax.net.ssl.SSLPeerUnverifiedException: Hostname not verified:



java URL conn 할 때, SSL 인증서 문제로

인한 Error 처리하기.




아래의 코드를 통해서  SSL인증 무시하기 위해서 내가 우회하고자 하는 url 주소를 "127.0.0.1" 부분에 넣어줍니다.


//error : Caused by: javax.net.ssl.SSLPeerUnverifiedException: Hostname not verified:
HostnameVerifier allHostsValid = new HostnameVerifier() {
@Override
public boolean verify(String hostname, SSLSession session) {
//특정 hostname만 승인을 해주는 형태
if(hostname.equalsIgnoreCase("127.0.0.1")) //내가 우회하고자하는 url 주소를 넣어준다.
return true;
else
return false;
}
};

HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);




블로그 이미지

미나미나미

,

파파고 NMT 테스트 / JSP로 해보기 (Servlet 사용)



nmt 파파고 api를 jsp로 테스트 해보겠습니다.


사용방법은 ajax - servlet를 사용합니다.


간단한 테스트를 진행합니다.




1. 파파고 nmt를 사용하기 위해서


open API 이용 신청을 하여야 합니다.


 https://developers.naver.com/products/nmt/ 



Client_ID와 Client_Secret의 값이 필요합니다.




2. client id 와 secret 이 생성된 후에 jsp 페이지를 생성합니다.



textarea 2개,

실행할 button 1개를 만듭니다.


그리고, jquery를 추가해줍니다.


<p>NMT를 테스를 합니다.</p>

<textarea id="send_text" class="form-control" name="content" cols="40" rows="4" placeholder="보낼값"></textarea>
<button id="jsonConvertStringSend" type="button"> 번역하기 </button>
<textarea id="result_text" class="form-control" name="content" cols="40" rows="4" placeholder="결과값" readonly></textarea>


<script>
//번역을 위해서 button 이벤트를 위해서 사용하는 것
$('#jsonConvertStringSend').click(function () {
//번역할 object를 생성
var test = {
"original_str": $("#send_text").val()
};
jsonSend(test);
});
function jsonSend(test) {
$.ajax({
type: "POST",
url: "/TistoryExample/NMTTestServlet",
data: test, //json을 보내는 방법
success: function (data) { //서블렛을 통한 결과 값을 받을 수 있습니다.
console.log(data);
//alert(data);

//string의 값을 object 형식으로 변환합니다.
var resulut_obj = JSON.parse(data);
//결과값을 textarea에 넣기 위해서
$("#result_text").val(resulut_obj.message.result.translatedText);
},
error: function (e) {
console.log(e);
alert('실패했습니다.');
}
});
}
</script>




3. servlet를 만들어줍니다.


protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    System.out.println("NMTTestServlet doPost 메소드가 실행되었습니다.");
    request.setCharacterEncoding("UTF-8");
    response.setContentType("text/html;charset=utf-8");

    //번역할 text 값을 받아 옵니다
    String original_str = (String)request.getParameter("original_str");

    //결과값 보내기 위한것
    PrintWriter out = response.getWriter();
    out.print((String)nmtReturnRseult(original_str));
    
}

// nmtReturnResult의 함수를 통해서 한글 - > 영어로 번역
public String nmtReturnRseult(String original_str){
    
    //애플리케이션 클라이언트 아이디값";
    String clientId = "jPPntjzUc09zBQsT_zU7";
    //애플리케이션 클라이언트 시크릿값";
    String clientSecret = "iSGGw0F3NI";
    
    String resultString ="";
    try {
        //original_str 값이 우리가 변환할 값
        String text = URLEncoder.encode(original_str, "UTF-8");
        
        String apiURL = "https://openapi.naver.com/v1/papago/n2mt";
        URL url = new URL(apiURL);
        HttpURLConnection con = (HttpURLConnection)url.openConnection();
        con.setRequestMethod("POST");
        con.setRequestProperty("X-Naver-Client-Id", clientId);
        con.setRequestProperty("X-Naver-Client-Secret", clientSecret);
        // post request
        String postParams = "source=ko&target=en&text=" + text;
        con.setDoOutput(true);
        DataOutputStream wr = new DataOutputStream(con.getOutputStream());
        wr.writeBytes(postParams);
        wr.flush();
        wr.close();
        int responseCode = con.getResponseCode();
        BufferedReader br;
        if(responseCode==200) { // 정상 호출
            br = new BufferedReader(new InputStreamReader(con.getInputStream()));
        } else { // 에러 발생
            br = new BufferedReader(new InputStreamReader(con.getErrorStream()));
        }
        String inputLine;
        StringBuffer response = new StringBuffer();
        while ((inputLine = br.readLine()) != null) {
            response.append(inputLine);
        }
        br.close();
        System.out.println(response.toString());
        
        resultString = response.toString();
    } catch (Exception e) {
        System.out.println(e);
    }
    
    return resultString;
}




블로그 이미지

미나미나미

,

[java] object 통한 getClass()를 사용하여 데이터 알아내기



가끔 받아온 값에 대해서 

알 수 없을 때까 있습니다.


error : mismatch cannot convert from


이러한 문제가 발견 될 때가 있습니다.


이런 문제를 해결하기 위해서... 

Object로 임시로 받아서 getClass()를 통해서 

확인하는 방법이 있어요!





package java_sort;

public class ConvertByteString {

    public static void main(String[] args) {
        String testStr = "test할 문자";
        int testInt = 11;
        double testDouble = 1.1;
        
        Object obj = null;
        
        obj = testStr;
        System.out.println(obj.getClass());
        //testStr java.lang.String의 값이 나옵니다.
        
        obj = testInt;
        System.out.println(obj.getClass());
        //testStr java.lang.Integer의 값이 나옵니다.

        obj = testDouble;
        System.out.println(obj.getClass());
        //testStr java.lang.Integer의 값이 나옵니다.

    }   

}



결과화면




블로그 이미지

미나미나미

,

web.xml이 없는 경우

[java] 2018. 9. 30. 20:23

web.xml이 없는 경우


web.xml일 없는 경우 


WEB-INF/web.xml가 없는 경우


당황하시지 마시고 아래 사진 처럼 따라오세요.



해당 프로젝트에서 우클릭 후에 빨간색 네모칸 부분


Generate Deployment Descriptor Stub 부분을 클릭해주세요.



짜잔, 그러면 아래 web.xml이 생길거에요


블로그 이미지

미나미나미

,

[java] hashmap value 값으로 key 값 찾기 

(get key from value)


가끔 key 값은 알게 되었는데

value 값을 알아야 하는 경우가 있습니다.

그럴 때 찾는 방법을 기록합니다.



package java_sort;

import java.util.HashMap;
import java.util.Map;

public class HashmapGetKeyFromValue {

    public static void main(String[] args) {
        Map<String, Object> hashMap = new HashMap();
//hashmap을 생성합니다.
//그리고 아래에 데이터를 넣어줍니다.
        hashMap.put("A", "test");
        hashMap.put("B", 212123);
        hashMap.put("C", "ashdjkashdjk");
        hashMap.put("D", 77);
        
        
        System.out.println(getKey(hashMap,"test"));
        //test라는 value 값을 통해서 key 값은 = > A
        System.out.println(getKey(hashMap,77));
        //77라는 value 값을 통해서 key 값은 = > D
    }
    
    
    public static <K, V> K getKey(Map<K, V> map, V value) {
        // 찾을 hashmap 과 주어진 단서 value
        for (K key : map.keySet()) {
            if (value.equals(map.get(key))) {
                return key;
            }
        }
        return null;
    }

}




결과화면







블로그 이미지

미나미나미

,