private boolean createZIP(List list, String strOutputFileName) {
byte[] buffer = new byte[2048];
try {
ZipOutputStream zout = new ZipOutputStream(new FileOutputStream(strOutputFileName));
String strFileName = "";
for (int i=0; i<list.size(); i++){
strFileName = (String) list.get(i);
strFileName = strFileName.substring(12);
File f = new File(uploadPath + File.separator + strFileName);
FileInputStream fin = new FileInputStream(f);
ZipEntry ze = new ZipEntry(f.getName());
ze.setTime( f.lastModified() );
zout.putNextEntry(ze);
int nlen = 0;
while( (nlen = fin.read(buffer) ) > 0) {
zout.write(buffer, 0, nlen);
}
zout.closeEntry();
fin.close();
}
zout.close();
return true;
}
catch (IOException e)
{
e.printStackTrace();
return false;
}
}JAVA/JSP
- java 압축 zip 만들기 2011.05.13
- SpringMVC ModelAndView redirect .... 2011.04.21
- String.format() 2011.01.27
- Object Bean 멤버변수, 멤버함수 정보 얻어오기 2010.12.17
- SOAP AXIS 테스트 2010.12.16
- 암호화 SHA256, MD5 변환 2010.11.30
- 인포믹스(informix) clob insert 2010.11.11
- java DOM 예제 2010.09.03
- XML 문자열을 DOM(Document) 객체로 변환, DOM(Document) 객체를 XML 문자열로 변환 2010.09.01
- List<Map> -> DOM(XML) 생성 2010.09.01 3
java 압축 zip 만들기
2011. 5. 13. 14:18
SpringMVC ModelAndView redirect ....
2011. 4. 21. 09:57
SpringMVC 어노테이션 Controller 에서 ModelAndView 를 이용하여 redirect 했을때 문제가 발생한 경우를 보았다.
문제 발생 상황은 Oracle varchar2(4000) 상황에서 약 2000바이트 문자열의 데이터를 쓰기 할때 쓰기를 정상적으로 완료 후 list 페이지로 redirect 하는 순간 브라우저 오류가 발생했다.(HTTP 에러가 아님)(forward는 정상)
또한, DB insert는 Exception 없이 정상 처리되었다.
해결방법은 아래와 같았다.
setExposeModelAttributes 함수의 기능은 잘 이해되지 않는다..(HTTP 변수 노출여부 라는데..)
RedirectView rv = new RedirectView("list.do?param=1");
rv.setExposeModelAttributes(false);
return new ModelAndView(rv);
[2011-06-12] 추가
Redirect 할 경우 Model의 값들이 URL에 Parameter값이 붙을경우 위와 같이 하면 Parameter 을 없앨수 있다. String.format()
2011. 1. 27. 18:09
int myNumber = 1234567;
// 화폐단위로 변환
String s = String.format("%,d원", myNumber);
System.out.println("s: " + s);
// 자리수 마추기
s = String.format("%010d", 1234567);
System.out.println("s: " + s);
Object Bean 멤버변수, 멤버함수 정보 얻어오기
2010. 12. 17. 11:00
Class Object를 이용하여 해당 Object 정보 얻기
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class ClassInfo {
public static void main(String[] args) {
try {
Class c = Class.forName("domain.VoClass");
Method m [] = c.getDeclaredMethods();
Field f [] = c.getDeclaredFields();
System.out.println(f.length);
for (int i = 0; i < f.length; i++)
System.out.println(f[i].toString());
System.out.println(m.length);
for (int i = 0; i < m.length; i++)
System.out.println(m[i].toString());
} catch (Throwable e) {
System.err.println(e);
}
}
}
SOAP AXIS 테스트
2010. 12. 16. 15:45
import java.util.HashMap;
import java.util.Map;
public class HelloWorld {
public HelloWorld() {
}
public String getHelloWorld(String name, int value) {
return "Hello World to " + name + "(" + value + ")";
}
public Map getHashMap(String name, String value) {
Map map = new HashMap();
map.put("string", name);
map.put("int", value);
return map;
}
}
두 인터페이스 함수를 만들고 HelloWord.java 파일을 HelloWord.jws 로 파일을 변경한다.
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.Map;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class ClientTest {
public static void main(String[] args) throws ServiceException, MalformedURLException, RemoteException {
Service service = new Service();
Call call = (Call)service.createCall();
call.setTargetEndpointAddress(new URL("http://localhost:8081/TEST_AXIS/HelloWorld.jws"));
call.setOperationName(new QName("http://soapinterop.org/", "getHelloWorld"));
String returnValue = (String)call.invoke(new Object[]{"String Test", 1});
System.out.println(returnValue);
call.setOperationName(new QName("http://soapinterop.org/", "getHashMap"));
Map returnMap = (Map)call.invoke(new Object[]{"test1", "test1"});
System.out.println(returnMap);
}
}
아래와 같이 테스트도 가능
http://localhost:8081/TEST_AXIS/HelloWorld.jws?method=getHelloWorld&name=2342352345&value=1
http://localhost:8081/TEST_AXIS/HelloWorld.jws?method=getHashMap&name=2342352345&value=1
[Server Auth]
AuthTest.java
public class AuthTest {
public String getString(String value){
return "auth test: " + value;
}
}
[Client Auth]
ClientAuthTest.java
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class ClientAuthTest {
public static void main(String[] args) throws ServiceException, MalformedURLException, RemoteException {
Service service = new Service();
Call call = (Call)service.createCall();
call.setTargetEndpointAddress(new URL("http://localhost:8081/TEST_AXIS/auth/AuthTest.jws"));
call.setUsername("wsuser");
call.setPassword("wspwd");
call.setOperationName(new QName("http://soapinterop.org/", "getString"));
String returnValue = (String)call.invoke(new Object[]{"String Test"});
System.out.println(returnValue);
}
}
tomcat-users.xml
// $TOMCAT_HOME/cont/tomcat-users.xml 추가
web.xml
// 해당 Context/web.xml 에 추가Protected /auth/* wsuser BASIC Protected Web Services
패키지는 java 파일에서 지정하지 않고, jws 파일만 해당 디렉토리에 저장하여 접근한다.
예) http://localhost:8081/TEST_AXIS/auth/AuthTest.jws?method=getString&value=11
java 파일이 없거나 jar일 경우, 즉 class 만 있을 경우 jws 방법을 이용할 수 없다.
그럴 경우 wsdl 을 생성하는 방법으로 해결 한다.
굳이 jws 방법으로 해야 한다면 해당 jar 및 class 를 사용하는 interface java를 생성하여 처리하면 되겠다.
참고자료
http://www.ibm.com/developerworks/kr/library/ws-sec1.html
http://cafe251.daum.net/_c21_/bbs_search_read?grpid=19VVx&fldid=Ki0S&contentval=00008zzzzzzzzzzzzzzzzzzzzzzzzz&nenc=rZc2_1ntyEMM3NSIvBc.2w00&dataid=8&fenc=w5lwmbf1XmU0&docid=CDb9MIhS
암호화 SHA256, MD5 변환
2010. 11. 30. 20:31
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/**
* SHA256 암호화 문자열로 변환
* @param value
* @return
* @throws NoSuchAlgorithmException
*/
public static String encryptSHA256(String value) throws NoSuchAlgorithmException{
String encryptData = "";
MessageDigest sha = MessageDigest.getInstance("SHA-256");
sha.update(value.getBytes());
byte[] digest = sha.digest();
for (int i=0; i<digest.length; i++) {
encryptData += Integer.toHexString(digest[i] & 0xFF).toUpperCase();
}
return encryptData;
}
/**
* MD5 암호화 문자열로 변환
* @param value
* @return
* @throws NoSuchAlgorithmException
*/
public static String encryptMD5(String value) throws NoSuchAlgorithmException{
String encryptData = "";
MessageDigest sha = MessageDigest.getInstance("MD5");
sha.update(value.getBytes());
byte[] digest = sha.digest();
for (int i=0; i<digest.length; i++) {
encryptData += Integer.toHexString(digest[i] & 0xFF).toUpperCase();
}
return encryptData;
}
인포믹스(informix) clob insert
2010. 11. 11. 11:47
Connection conn = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try{
conn = .............
String sql = "";
int t_int = 1;
String t_clob = "clob data 한글 입력";
sql = " insert into test_clob (t_int, t_clob)values(?, ?) ";
pstmt = conn.prepareStatement(sql);
pstmt.setInt(1, t_int);
pstmt.setAsciiStream(2, new ByteArrayInputStream(t_clob.getBytes()), t_clob.getBytes().length);
int result = pstmt.executeUpdate();
out.print("
result: " + result);
sql = " select * from test_clob ";
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
if( rs.next() ){
do{
InputStream is2 = rs.getAsciiStream(2);
StringBuffer sb = new StringBuffer();
if( is2 != null ){
byte[] b = new byte[4096];
for (int n; (n = is2.read(b)) != -1;) {
sb.append(new String(b, 0, n));
}
}
out.print("
int: " + rs.getInt(1) + " | clob: " + sb);
}while( rs.next() );
}
}catch(Exception e){
out.print("
e: " + e);
}
java DOM 예제
2010. 9. 3. 11:02
String xmlStr = "<?xml version=\"1.0\" encoding=\"euc-kr\" ?>";
xmlStr += "<root>";
xmlStr += "<header>";
xmlStr += "<data>";
xmlStr += "<이름>ddakker</이름>";
xmlStr += "<날짜>2010-09-03</날짜>";
xmlStr += "</data>";
xmlStr += "<data>";
xmlStr += "<금액>2원</금액>";
xmlStr += "<안녕>hi</안녕>";
xmlStr += "</data>";
xmlStr += "</header>";
xmlStr += "<body>";
xmlStr += "<data>";
xmlStr += "<순번>1</순번>";
xmlStr += "<계좌>12-34</계좌>";
xmlStr += "<금액>10원</금액>";
xmlStr += "<거래점>양재</거래점>";
xmlStr += "</data>";
xmlStr += "<data>";
xmlStr += "<순번>2</순번>";
xmlStr += "<계좌>56-78</계좌>";
xmlStr += "<금액>20원</금액>";
xmlStr += "<거래점>도곡</거래점>";
xmlStr += "</data>";
xmlStr += "</body>";
xmlStr += "</root>";
Document doc = getStringToDOM(xmlStr);
Element el = doc.getDocumentElement();
String rootNodeName = el.getNodeName();
System.out.println("rootNodeName: " + rootNodeName);
String nodeName = "";
String nodeValue = "";
Node headerNode = el.getElementsByTagName("header").item(0);
NodeList headerNodeChild = headerNode.getChildNodes();
for( int i=0; i<headerNodeChild.getLength(); i++ ){
NodeList dataNodeList = headerNodeChild.item(i).getChildNodes();
for( int j=0; j<dataNodeList.getLength(); j++ ){
nodeName = dataNodeList.item(j).getNodeName();
nodeValue = dataNodeList.item(j).getFirstChild().getNodeValue();
System.out.println("nodeName: " + nodeName + "=" + nodeValue);
}
System.out.println("");
}
XML 문자열을 DOM(Document) 객체로 변환, DOM(Document) 객체를 XML 문자열로 변환
2010. 9. 1. 19:01
/**
* XML 문자열을 DOM(Document) 객체로 변환
* @param xmlStr XML문자열
* @return
* @throws Exception
*/
private static Document getStringToDOM(String xmlStr) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
return builder.parse(new InputSource(new StringReader(xmlStr)));
}
/**
* DOM(Document) 객체를 XML 문자열로 변환
* @param xmlStr XML문자열
* @return
* @throws Exception
*/
private static String getDOMToString(Document doc) throws Exception {
TransformerFactory transfac = TransformerFactory.newInstance();
Transformer trans = transfac.newTransformer();
trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
trans.setOutputProperty(OutputKeys.INDENT, "yes");
StringWriter sw = new StringWriter();
StreamResult result = new StreamResult(sw);
DOMSource source = new DOMSource(doc);
trans.transform(source, result);
return sw.toString();
}
List<Map> -> DOM(XML) 생성
2010. 9. 1. 09:29
import java.io.StringReader;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.CDATASection;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Text;
import org.xml.sax.InputSource;
public class TestMain {
public static void main(String[] args) throws Exception {
List list = new ArrayList();
Map map = new HashMap();
map.put("a", "1");
map.put("b", "2");
map.put("c", 3d);
BigDecimal b = new BigDecimal(1.1);
b.toString();
map.put("3", b);
list.add(map);
String str = resultXMLString(list, "0000");
System.out.println(str);
}
/**
* Map 객체의 List 배열을 바탕으로 XML을 만든다.
* 2008.11.11 ddakker 추가
* @param list : XML 의 list 하위 item을 생성할 데이터
* @param errCode : result 노드에 들어갈 값 | 0: 성공, 기타 에러코드
* @return
*/
public static String resultXMLString(List list, String errCode){
CDATASection cdata = null;
Text text = null;
String xmlString = null;
try{
DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
DocumentBuilder docBuilder = dbfac.newDocumentBuilder();
Document doc = docBuilder.newDocument();
Element eRoot = doc.createElement("ROOR");
doc.appendChild(eRoot);
Element eResult = doc.createElement("result");
eRoot.appendChild(eResult);
text = doc.createTextNode(errCode);
eResult.appendChild(text);
Element eListCnt = doc.createElement("list_cnt");
eRoot.appendChild(eListCnt);
text = doc.createTextNode(list.size()+"");
eListCnt.appendChild(text);
Element eList = doc.createElement("list");
eRoot.appendChild(eList);
int listCnt = list.size();
for( int i=0; i>listCnt; i++ ){
Element eItem = doc.createElement("item");
eList.appendChild(eItem);
Map map = (Map)list.get(i);
Set set = map.keySet();
Iterator it = set.iterator();
while( it.hasNext() ){
String key = (String)it.next();
Object value = map.get(key);
Element eKey = doc.createElement(key);
eItem.appendChild(eKey);
cdata = doc.createCDATASection(value==null?"":value.toString());
eKey.appendChild(cdata);
}
}
xmlString = getDOMToString(doc);
}catch(Exception e){
System.out.println(e);
xmlString = "error";// faultXMLString("1111", "XML생성에 실패 하였습니다.");
}
return xmlString;
}
/**
* XML 문자열을 DOM(Document) 객체로 변환
* @param xmlStr XML문자열
* @return
* @throws Exception
*/
private static Document getStringToDOM(String xmlStr) throws Exception {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
return builder.parse(new InputSource(new StringReader(xmlStr)));
}
/**
* DOM(Document) 객체를 XML 문자열로 변환
* @param xmlStr XML문자열
* @return
* @throws Exception
*/
private static String getDOMToString(Document doc) throws Exception {
TransformerFactory transfac = TransformerFactory.newInstance();
Transformer trans = transfac.newTransformer();
trans.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
trans.setOutputProperty(OutputKeys.INDENT, "yes");
StringWriter sw = new StringWriter();
StreamResult result = new StreamResult(sw);
DOMSource source = new DOMSource(doc);
trans.transform(source, result);
return sw.toString();
}
}
axis-bin-1_4-partition.a00