정규식을 이용한 자바 특수문자 체크입니다.
if (!nickname.matches([ 0 - 9 |a-z|A-Z|ㄱ-ㅎ|ㅏ-ㅣ|가-힝]*") { //특수문자가 있을 경우 } else { //특수문자가 없을 경우 } |
정규식 너무 편합니다.
자바 위키 -http://ko.wikipedia.org/wiki/자바
정규식을 이용한 자바 특수문자 체크입니다.
if (!nickname.matches([ 0 - 9 |a-z|A-Z|ㄱ-ㅎ|ㅏ-ㅣ|가-힝]*") { //특수문자가 있을 경우 } else { //특수문자가 없을 경우 } |
정규식 너무 편합니다.
AES알고리즘
http://marcof.tistory.com/95
위키
http://ko.wikipedia.org/wiki/고급_암호화_표준
/** * AES 방식의 암호화 * * @param message * @return * @throws Exception */ public static String encrypt(String message) throws Exception { // use key coss2 SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes(), “AES”); // Instantiate the cipher Cipher cipher = Cipher.getInstance(“AES”); cipher.init(Cipher.ENCRYPT_MODE, skeySpec); byte[] encrypted = cipher.doFinal(message.getBytes()); return byteArrayToHex(encrypted); }
/** * AES 방식의 복호화 * * @param message * @return * @throws Exception */ public static String decrypt(String encrypted) throws Exception { // use key coss2 SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes(), “AES”); Cipher cipher = Cipher.getInstance(“AES”); cipher.init(Cipher.DECRYPT_MODE, skeySpec); byte[] original = cipher.doFinal(hexToByteArray(encrypted)); String originalString = new String(original); return originalString; } public static void main(String[] args) { try { String encrypt = encrypt(“test1234″); System.out.println(“origin str = “+”test1234″); System.out.println(“encrypt str = “+encrypt); String decrypt = decrypt(encrypt); System.out.println(“decrypt str = “+decrypt); } catch (Exception e) { e.printStackTrace(); } } }
JSON 문자열로 변환하기
– JSON 객체를 생성
JSONObject jsonObj = new JSONObject();
– JSON 객체에 데이터 저장(복수저장 가능)
jsonObj.put("이름1", "내용1"); jsonObj.put("이름2", "내용2");
– JSON 객체를 전송할 문자열로 변환
String sendMsg = jsonObj.toJSONString();
여기서 만들어진 문자열을 전송시에 이용하시면 됩니다.
JSON 문자열 파싱하기
– JSON Parser 생성
JSONParser parser = new JSONParser();
– 넘어온 문자열을 JSON 객체로 변환
JSONObject jsonObj = (JSONObject)parser.parse(receiveMsg);
– JSON 객체에서 데이터 가져오기
String data1 = jsonObj.get("이름1").toString(); String data2 = jsonObj.get("이름2").toString();
이런 형태로 이용하면 된다.
## 추가내용 ##
JSON 배열 저장하기
– JSON 배열객체 생성
JSONArray jArr = new JSONArray();
– 여러개의 JSON 객체 생성
JSONObject obj1 = new JSONObject(); obj1.put("name","유준상"); obj1.put("sex","남"); JSONObject obj2 = new JSONObject(); obj2.put("name","티아라"); obj2.pub("sex","여");
– JSONArray에 담기
jArr.add(obj1); jArr.add(obj2);
– JSON 객체생성
JSONObject jObj = new JSONObject();
– JSON 객체에 배열을 담음
jObj.put("연예인", jArr);
– JSONArray 가져오기
JSONArray arr = (JSONArray)jObj.get("연예인")
– iterator를 가져와서 처리
Iterator it = outArr.iterator();
– 반복하여 존재하는 데이터 가져옴
while(it.hasNext()){ JSONObject o = (JSONObject)it.next(); }
참고로 JSON을 이용하기 위해서는 JSON 패키지를 설치하시고,
import org.json.simple.JSONObject; 를 포함 시켜서 이용하세요~
1. JSON.simple Dependency
Maven을 사용한다면 pom.xml에 설정하나로 central repository에서 받아오게 설정
<dependency> <groupId>com.googlecode.json-simple</groupId> <artifactId>json-simple</artifactId> <version>1.1</version> </dependency>
아니면 직접 json_simple-1.1.jar를 다운 받아서 클래스 패스 설정
http://code.google.com/p/json-simple/
2. Write JSON to file
import java.io.FileWriter; import java.io.IOException; import org.json.simple.JSONArray; import org.json.simple.JSONObject; public class JsonSimpleExample { public static void main(String[] args) { JSONObject obj = new JSONObject(); obj.put("name", "mkyong.com"); obj.put("age", new Integer(100)); JSONArray list = new JSONArray(); list.add("msg 1"); list.add("msg 2"); list.add("msg 3"); obj.put("messages", list); try { FileWriter file = new FileWriter("c:\\test.json"); file.write(obj.toJSONString()); file.flush(); file.close(); } catch (IOException e) { e.printStackTrace(); } System.out.print(obj); } }
Output : test.json
{ "age":100, "name":"mkyong.com", "messages":["msg 1","msg 2","msg 3"] }
3. Read JSON from file
import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.Iterator; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; public class JsonSimpleExample { public static void main(String[] args) { JSONParser parser = new JSONParser(); try { Object obj = parser.parse(new FileReader("c:\\test.json")); JSONObject jsonObject = (JSONObject) obj; String name = (String) jsonObject.get("name"); System.out.println(name); long age = (Long) jsonObject.get("age"); System.out.println(age); // loop array JSONArray msg = (JSONArray) // jsonObject.get("messages"); Iterator<String> iterator = msg.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (ParseException e) { e.printStackTrace(); } } }
Output :
mkyong.com 100 msg 1 msg 2 msg 3
자바 또는 안드로이드 통신을 하기 위해
타입은 스트링(String)이지만 데이터 값은 JSON 상태를 가지고 있을 수 있다.
예) String test = {“text” : [ { “code” : “011”, “responsetext” : “응답입니다.” } ] }; (문법 무시)
이런식으로.
그러나 다른 객체 등과의 통신을 위해서 JSONObject 로 변환해야 할 때가 있다.
이 때는 이렇게 선언하면 된다.
JSONObject json = null;
json = new JSONObject(test);
간단하다.
이외에 JSON을 처리하는 코드는 다른 문서를 참조하자.
자바로 DNS 를 조회해보자..
package demo; import java.net.UnknownHostException; import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingException; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; public class test { public static void main(String[] args) throws NamingException, UnknownHostException { <span style="text-decoration: underline;">Hashtable</span> env = new <span style="text-decoration: underline;">Hashtable</span>(); <span style="text-decoration: underline;">env</span><span style="text-decoration: underline;">.</span><span style="text-decoration: underline;">put</span><span style="text-decoration: underline;">(</span><span style="text-decoration: underline;">Context</span><span style="text-decoration: underline;">.</span><span style="text-decoration: underline;">INITIAL_CONTEXT_FACTORY</span><span style="text-decoration: underline;">,</span> <span style="text-decoration: underline;">"com.sun.jndi.dns.DnsContextFactory"</span><span style="text-decoration: underline;">)</span>; DirContext ictx = new InitialDirContext(env); String dnsServers = (String) ictx.getEnvironment().get("java.naming.provider.url"); System.out.println("DNS Servers: " + dnsServers ); } }
자바로 서버 Host 조회 해보자 ..
package test; import java.net.InetAddress; import java.net.UnknownHostException; public class DnsTest { public static void main(String[] args) { try { InetAddress inetAddress = InetAddress.getLocalHost(); displayStuff("local host", inetAddress); System.out.print("--------------------------"); inetAddress = InetAddress.getByName("www.google.com"); displayStuff("www.google.com", inetAddress); System.out.print("--------------------------"); InetAddress[] inetAddressArray = InetAddress .getAllByName("www.google.com"); for (int i = 0; i < inetAddressArray.length; i++) { displayStuff("www.google.com #" + (i + 1), inetAddressArray[i]); } } catch (UnknownHostException e) { e.printStackTrace(); } } public static void displayStuff(String whichHost, InetAddress inetAddress) { System.out.println("--------------------------"); System.out.println("Which Host:" + whichHost); System.out.println("Canonical Host Name:" + inetAddress.getCanonicalHostName()); System.out.println("Host Name:" + inetAddress.getHostName()); System.out.println("Host Address:" + inetAddress.getHostAddress()); } }
URL 뒤에 데이터를 덧붙이고자 할때 스트링을 URL에 맞게 인코딩을 해야하는데 아래와 같이 하면 된다.
String encodeResult = URLEncoder.encode(String encodingString, String charsetName);
그냥 URLEncoder.encode(String s); 는 deprecated 되었으니까 사용하지 말고 위의 함수를 사용하자.
charsetName에는 “UTF-8″과 같은 캐릭터 인코딩 셋을 넣으면 된다.
반대로 디코딩하는 것은 아래와 같이 하면 된다.
String decodeResult = URLDecoder.decode(String decodingString, String charsetName);
끝.
현재 mybatis는 3.1.1 까지 나와 있다.
하지만 뭐가 문제인지 spring 3.1.1에서 같이 사용해보니 아래와 같은 오류가 난다.
java.lang.AbstractMethodError: org.mybatis.spring.transaction.SpringManagedTransactionFactory.newTransaction(Ljava/sql/Connection;)Lorg/apache/ibatis/transaction/Transaction;
그래서 3.1.0으로 해봤으나 결과는 같은 오류가 났다.
다시 버전을 하나더 내려서 3.0.6으로 해봤더니 정상적으로 동작하는걸 확인할 수 있었다.
======================================================================================================================
위의 문제가 발생한 원인은
mybatis-3.1.1.jar 과 mybatis-spring-1.0.0-RC3.jar를 사용하여 발생한 문제 인것으로 추측 된다.
mybatis-3.1.1.jar 과 mybatis-spring-1.1.1.jar을 사용하니 위와 같은 문제는 해결 되었다.
어찌보면 너무나도 당연한것 같은데 모르고 있었을때는 한없이 어렵다.
문제:
JEUS를 설치하고 끄고 켜기를 몇 번 하다보니, 아래와 같은 에러가 발생했다.
java.net.BindException: Address already in use: JVM_Bind
아무래도 기존 프로세스가 죽지 않아서 그런 것 같은데,
무슨 오류일까…
해결책:
해당 포트가 이미 사용 중이란 오류이므로, 해당 포트를 사용하는 프로세스를 종료해주면 된다.
그 프로세스가 어떤 건지 모를 경우, cmd 에서
또는 작업 관리자에서 PID 를 보이게 한 후, 종료하면 된다.
** 추가: 2010.01.21
위 에러 발생이 잦아 매번 찾기 번거로워 간단한 배치파일을 하나 만들었다.
포트를 사용하는 프로세스를 찾아 죽이는 기능을 한다.
배치 파일을 실행시켜 찾을 포트를 입력하면, 해당 포트의 목록을 보여준다.
(맨 오른쪽 컬럼이 PID 를 가리킨다.)
포트 목록을 확인하고, 삭제할 PID 를 입력하면 해당 프로세스가 죽는다.
좋아요 |
한 명이 좋아합니다. 친구들이 무엇을 좋아하는지 알아보려면 가입하기 |
JSP, Servlet Spec 버전과 WAS (0) | 2009/12/04 |
---|---|
자바는 기본적으로 값에 의한 전달(Pass-by-value)을 한다. (0) | 2009/12/03 |
java.net.BindException: Address already in use: JVM_Bind (1) | 2009/11/25 |
Servlet Thread – Serlvet 은 Runnable을 구현하나? (0) | 2009/11/24 |
동기화를 지원하는 컬렉션 (0) | 2009/11/24 |
정규식 (Regular Expression) (0) | 2009/11/20 |