2012년 6월 21일 목요일

[jsp] img태그 src에 한글명 넣기(톰캣)



1. html
   <img src = "filedownload.jsp?filename=사진.jpg">




2. filedownload.jsp
-----------------------------------------------------------

<%@page contentType="text/html; charset=euc-kr" import ="java.io.*,java.text.*,java.util.*"%>


<%


String filename = new String(request.getParameter("filename").getBytes("ISO-8859-1"),"euc-kr");
String filename1 = java.net.URLEncoder.encode(filename, "UTF8");


System.out.println(filename);
System.out.println(filename1);


System.out.println("Request File Name:"+filename);
String appRoot = request.getRealPath("/");
System.out.println(appRoot);


File file = new File (appRoot+"/upload/"+filename);


System.out.println("DownLoad File:"+ file.getPath());


if(!file.exists()) {


%>


<script type="text/javascript">
alert("요청한 파일을 찾을 수 없습니다..");
history.back();
</script>
<%


  return;


}


BufferedInputStream input = null; 
BufferedOutputStream output = null;


response.reset();


String strClient = request.getHeader("User-Agent");
if (strClient.indexOf("MSIE 5.5") > -1) {  //익스  5.5
response.setContentType("application/x-msdownload"); 
response.setHeader("Accept-Ranges", "bytes");
response.setHeader("Content-Disposition", "filename=" + filename1 + ";"); 
response.setHeader("Content-Length", ""+ file.length());
   }else{           //익스 5.5이상
response.setContentType("application/x-msdownload"); 
response.setHeader("Content-Disposition", "attachment; filename=\""+filename1+"\";");
response.setHeader("Content-Transfer-Encoding", "binary;");
response.setHeader("Content-Length", ""+ file.length());
}


try {
input = new BufferedInputStream( new FileInputStream(file) ); 
byte buffer[] = new byte[1024];
int len = 0;
out.clear();
out.flush();
output = new BufferedOutputStream(response.getOutputStream());
while((len = input.read(buffer)) > 0 ){
output.write(buffer,0,len);
}
} catch(Exception e) {
e.printStackTrace();
System.out.println("File DownLoad Exception:" + e.getMessage());
} finally{
response.flushBuffer();
if(input !=null)try{input.close();}catch(Exception e){}
if(output !=null)try{output.close();}catch(Exception e){}
}
%>
-----------------------------------------------------------

2012년 6월 19일 화요일

[oracle] BLOB, CLOB 데이터 오라클에서 직접 INSERT


1. DIRECTORY로서 경로를 지정 (직접 디스크상에 존재하는 파일을 LOB에 넣어줘야 하니까.)
    단, 디렉토리를 만들기 위해서는 권한 필요
         GRANT CREATE ANY DIRECTORY TO user

-------------------------------------------------------------
CREATE OR REPLACE DIRECTORY CLOB_DIR
AS 'c:\';
-------------------------------------------------------------





2. PROCEDURE 생성(CLOB)

-------------------------------------------------------------
CREATE OR REPLACE PROCEDURE PCD_TBL_LOB_INSERT
(V_FILENAME IN VARCHAR2)
IS
    V_LOCATOR_CLOB  CLOB;
    
    V_SOURCE_DATA_FILE BFILE := BFILENAME('CLOB_DIR', V_FILENAME);    
    V_DEST_OFFSET    NUMBER := 1;
    V_SRC_OFFSET      NUMBER := 1;
    V_LANG_CONTEXT  NUMBER := DBMS_LOB.DEFAULT_LANG_CTX;
    V_WARNING           NUMBER;
    
BEGIN
         INSERT INTO TBL_LOB(NO, TXT_FILE)
         VALUES(SEQ_LOB.NEXTVAL, EMPTY_CLOB() )
         RETURNING TXT_FILE INTO V_LOCATOR_CLOB;
         
         DBMS_LOB.OPEN(V_SOURCE_DATA_FILE, 
                                  DBMS_LOB.LOB_READONLY);
                                  
         DBMS_LOB.LOADCLOBFROMFILE(V_LOCATOR_CLOB,
                                                      V_SOURCE_DATA_FILE,
                                                      DBMS_LOB.GETLENGTH(V_SOURCE_DATA_FILE),
                                                      V_DEST_OFFSET,
                                                      V_SRC_OFFSET,
                                                      DBMS_LOB.DEFAULT_CSID,
                                                      V_LANG_CONTEXT,
                                                      V_WARNING);
                                                      
         DBMS_LOB.CLOSE(V_SOURCE_DATA_FILE);
         
         COMMIT;
END;
 -------------------------------------------------------------
복잡해보이지만, 굵은 글씨로 된부분을 자신에게 맞게 고처주면된다.
EXEC PCD_TBL_LOB_INSERT('test.sql')

참고로 물리적 DIRECTORY 에서 지정된 공간에서 파일이 삭제되더라도 DB에는 파일이 남아있다.





3. PROCEDURE 생성(BLOB)

 -------------------------------------------------------------
CREATE OR REPLACE PROCEDURE PCD_TBL_BLOB_INSERT
(V_FILENAME IN VARCHAR2)
IS
    V_LOCATOR_BLOB  BLOB;
    
    V_SOURCE_DATA_FILE BFILE := BFILENAME('BLOB_DIR', V_FILENAME);
    
    V_DEST_OFFSET    NUMBER := 1;
    V_SRC_OFFSET      NUMBER := 1;
    
BEGIN
         INSERT INTO TBL_LOB2(NO, IMG_FILE)
         VALUES(SEQ_LOB.NEXTVAL, EMPTY_BLOB() )
         RETURNING IMG_FILE INTO V_LOCATOR_CLOB;
         
         DBMS_LOB.OPEN(V_SOURCE_DATA_FILE, 
                                  DBMS_LOB.LOB_READONLY);
                                  
         DBMS_LOB.LOADBLOBFROMFILE(V_LOCATOR_BLOB,
                                                      V_SOURCE_DATA_FILE,
                                                      DBMS_LOB.GETLENGTH(V_SOURCE_DATA_FILE),
                                                      V_DEST_OFFSET,
                                                      V_SRC_OFFSET,
                                                      );
                                                      
         DBMS_LOB.CLOSE(V_SOURCE_DATA_FILE);
         
         COMMIT;
         
         DBMS_OUTPUT.PUT_LINE('CLOB 타입 데이터 입력 성공!!!');
         
         EXCEPTION
            WHEN OTHERS THEN 
                DBMS_OUTPUT.PUT_LINE('CLOB 타입 데이터 입력 실패!!!');
END;
 -------------------------------------------------------------
EXEC PCD_TBL_BLOB_INSERT('저장할파일이름', 'dog.jpg');

SELECT *
FROM TBL_LOB2

2012년 6월 4일 월요일

[oracle] sysdba로 접속하기

CMD창 발췌!
----------------------------------------------------------------------
Microsoft Windows XP [Version 5.1.2600]
(C) Copyright 1985-2001 Microsoft Corp.

C:\Documents and Settings\yj>sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on 화 6월 5 15:55:23 2012

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL> connect /as sysdba
연결되었습니다.
SQL>
----------------------------------------------------------------------

[oracle] Trigger 중지

* alter table 테이블명 disable all triggers;


* alter trigger 트리거명 disable

2012년 5월 22일 화요일

[WebSphere] Gmail SMTP 이용해서 JavaMail 사용하기

JavaMail로 메일을 보낼 때, 
Tomcat에서는 나지 않았던 Error가 Websphere에서는 난다.

---------------------------------------------------------------
javax.mail.SendFailedException: Sending failed;
  nested exception is:
class javax.mail.MessagingException: Exception reading response;
  nested exception is:
javax.net.ssl.SSLHandshakeException: com.ibm.jsse2.util.h: No trusted certificate found
---------------------------------------------------------------

검색해보니 Websphere에서는 인증서를 추가해 줘야 하더군!

Security > SSL certificate and key management > Key stores and certificates > NodeDefaultTrustStore > Signer certificates > Retrieve from Port

Host: smtp.gmail.com
Port: 465

하고 적용시키면 알아서 자기가 지메일에서 인증서를 땡겨옵니다.

적용 후, was 재시작! (절대 응용프로그램 재시작이 아니다)

2012년 3월 14일 수요일

[tomcat] 한글 깨짐 현상

1. Get방식 해결 방안 - URIEncoding="euc-kr"추가


server.xml
---------------------------------------------------------------------------
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="euc-kr" />


<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="euc-kr"/>
--------------------------------------------------------------------------- 





2. Post방식 해결 방안 - servlet filter 사용하기


파일명 : SetCharacterEncodingFilter.java
--------------------------------------------------------------------------- 

package filter;


import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;


public class SetCharacterEncodingFilter implements Filter {
protected String encoding = null;
protected FilterConfig filterConfig = null;
protected boolean ignore = true;


public void destroy() {
this.encoding = null;
this.filterConfig = null;
}


public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if (ignore || (request.getCharacterEncoding() == null)) {
String encoding = selectEncoding(request);
if (encoding != null)
request.setCharacterEncoding(encoding);
}
chain.doFilter(request, response);
}


public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
String value = filterConfig.getInitParameter("ignore");
if (value == null)
this.ignore = true;
else if (value.equalsIgnoreCase("true"))
this.ignore = true;
else if (value.equalsIgnoreCase("yes"))
this.ignore = true;
else
this.ignore = false;
}


protected String selectEncoding(ServletRequest request) {
return (this.encoding);
}
}
--------------------------------------------------------------------------- 


파일명 : web.xml(war로 묶일 web.xml, 톰캣 web.xml이 아니다)

--------------------------------------------------------------------------- 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>recruit</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>filter.SetCharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>euc-kr</param-value>
</init-param>
 </filter>


 <filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/*</url-pattern>
 </filter-mapping>


</web-app>
--------------------------------------------------------------------------- 


2012년 3월 13일 화요일

[Toad] 단축키


테이블 정보 상세보기
F4 : Table, View, Proc, Funct, Package DESC(테이블명 위에 커서를 두고 F4)


자동완성
Ctrl+. : Table Completion (매칭되는 테이블목록 출력)
Ctrl+T : Columns Dropdown (해당테이블의 컬럼목록 표시)


SQL문 실행
F5 : SQL Editor내의 모든 SQL문 실행
Ctrl+Enter : 현재 커서의 SQL문 실행
F9 : SQL문 실행 후 Grid에 출력


히스토리(과거 수행SQL문 조회)
F8 : 과거에 실행한SQL HISTORY 목록
Alt+Up : History UP
Alt+Down : History DOWN


텍스트 대/소문자 변환
CTRL+L : 텍스트를 소문자로
CTRL+U : 텍스트를 대문자로


주석처리
Ctrl+B : 주석처리
Ctrl+Shift+B : 주석해제


편집 창 전환(이동)
F6 : SQL Editor와 결과창간의 이동
F2 : SQL Editor창 전체화면 전환
Shift+F2 : Grid Output창 전체화면 전환


기타 단축키
F7 : 화면을 모두 CLEAR
Ctrl+Shift+F : 쿼리문을 보기좋게 정렬
Ctrl+F9 : SQL Validate (SQL문을 수행하지 않음)