..
DEV/java (42)
System property file encoding
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

파일인코딩

1
2
String fileEncoding=System.getProperty("file.encoding");
out.println("file.encoding = "+fileEncoding);
cs


'DEV > java' 카테고리의 다른 글

로컬PC에 파일 일괄다운로드  (0) 2017.09.27
gmail smtp mail발송  (0) 2017.08.22
특수문자 변환  (0) 2017.07.13
  Comments,     Trackbacks
로컬PC에 파일 일괄다운로드
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
package common;
 
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
 
public class FileLocalDownload {
 
    /**
     * 버퍼 사이즈
     */
    final static int size = 1024;
 
 
    public static void fileUrlReadAndDownload(String fileAddress, String localFileName, String downloadDir) {
        OutputStream outStream = null;
        URLConnection uCon = null;
        InputStream is = null;
        try {
            System.out.println("-------Download Start------");
            URL Url;
            byte[] buf;
            int byteRead;
            int byteWritten = 0;
            Url = new URL(fileAddress);
            outStream = new BufferedOutputStream(new FileOutputStream(downloadDir + "\\" + localFileName));
            uCon = Url.openConnection();
            is = uCon.getInputStream();
            buf = new byte[size];
            while ((byteRead = is.read(buf)) != -1) {
                outStream.write(buf, 0, byteRead);
                byteWritten += byteRead;
            }
            System.out.println("Download Successfully.");
            System.out.println("File name : " + localFileName);
            System.out.println("of bytes  : " + byteWritten);
            System.out.println("-------Download End--------");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                is.close();
                outStream.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
 
    /**
     * 
     * @param fileAddress
     * @param downloadDir
     */
    public static void fileUrlDownload(String fileAddress, String downloadDir) {
        int slashIndex = fileAddress.lastIndexOf("filename=");
        int periodIndex = fileAddress.lastIndexOf(".");
        // 파일 어드레스에서 마지막에 있는 파일이름을 취득
        String fileName = fileAddress.substring(slashIndex + 9);
        if (periodIndex >= 1 && slashIndex >= 0 && slashIndex < fileAddress.length() - 1) {
            fileUrlReadAndDownload(fileAddress, fileName, downloadDir);
        } else {
            System.err.println("path or file name NG.");
        }
    }
    
    public static List getResult(ResultSet rs) throws Exception
    {
        ResultSetMetaData rsmd = rs.getMetaData(); //resultSet의 컬럼정보를 가져온다.
        int columnCount = rsmd.getColumnCount();   //컬럼 갯수
        ArrayList hashMapList = new ArrayList();
 
        HashMap columnMap= new HashMap(); //DB의 Field의 정보 모음
 
        //column 정보 담기
        for(int i = 1; i <= columnCount; i++) {
            String sTypeStr ="string";
            columnMap.put(rsmd.getColumnName(i).toLowerCase(), sTypeStr);
        }
 
        //row 담기
        while(rs.next()) {
            HashMap hashMap= new HashMap();
            Iterator iter = columnMap.keySet().iterator();
            while(iter.hasNext()) {
                String key = (String)iter.next();
                hashMap.put(key.toLowerCase(), rs.getString((key)));
            }
            hashMapList.add(hashMap);
        }
 
        return hashMapList;
    }
 
    public static void main(String[] args) throws Exception {
        
        Connection cn = null;
        String s_id            = "id"/* 수정 : DB정보수정 */
         String s_pwd        = "pwd"/* 수정 : DB정보수정 */
        String jdbc_driver = "oracle.jdbc.driver.OracleDriver";
        String jdbc_url = "jdbc:oracle:thin:@ip:port:sid"/* 수정 : DB정보수정 */
        try{
            Class.forName(jdbc_driver);
            cn = DriverManager.getConnection(jdbc_url, s_id, s_pwd);
        }
        catch(Exception e) {
            System.out.println(e);
        }
        
        ResultSet rs    = null;
        String sql;
        PreparedStatement pstmt = null;
        Statement  st = null;
        List dataList = null;
        List<HashMap> resultList = new ArrayList();
        
        sql = " select filename, realfilename from file_info_table "/* 수정 : SQL 작성하기 */
        
        pstmt = cn.prepareStatement(sql);
        rs = pstmt.executeQuery();
        
        if(rs != null ){
            dataList = getResult(rs);
        }
        
        String downDir = "C:/download"/* 수정 : 다운로드받을 경로 작성 */
        
        for(int i=0; i < dataList.size(); i++){
            HashMap temp = (HashMap)dataList.get(i);
            String url = "http://filedownloadsite.com/filedown.do?filename="+temp.get("realfilename"); /* 수정 : 다운로드받을 url넣기 */
            fileUrlReadAndDownload(url, String.valueOf(temp.get("filename")), downDir);
        }
    }
}
 
cs

'DEV > java' 카테고리의 다른 글

System property file encoding  (0) 2017.10.19
gmail smtp mail발송  (0) 2017.08.22
특수문자 변환  (0) 2017.07.13
  Comments,     Trackbacks
gmail smtp mail발송
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

http://www.mkyong.com/java/javamail-api-sending-email-via-gmail-smtp-example/

  Comments,     Trackbacks
특수문자 변환
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

org.apache.commons.lang.StringEscapeUtils

StringEscapeUtils.unescapeXml("&apos;&apos;&#40;&#41;")

  Comments,     Trackbacks
CORS (CROSS-ORIGIN RESOURCE SHARING) 서비스가 다른 크로스도메인 해결방법
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
Ajax에서 특정 서비스 호출 시 도메인이 서로 다를경우, 정상적인 서비스를 호출하기 위해서는 Spring MVC의 필터링을 이용하여 처리할 수 있다. 


 1. OncePerRequestFilter 를 상속 필터 클레스 구현

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package 패키지명;
 
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.filter.OncePerRequestFilter;
 
public class CorsFilter extends OncePerRequestFilter {
 
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
            throws ServletException, IOException {
        response.addHeader("Access-Control-Allow-Origin""*");
        if (request.getHeader("Access-Control-Request-Method"!= null && "OPTIONS".equals(request.getMethod())); {
            // CORS "pre-flight" request
            response.addHeader("Access-Control-Allow-Methods""GET, POST, PUT, DELETE");
            response.addHeader("Access-Control-Allow-Headers""Authorization");
            response.addHeader("Access-Control-Max-Age""1728000");
        }
        filterChain.doFilter(request, response);
    }
}
cs


2. web.xml에 필터로 설정

 
1
2
3
4
5
6
7
8
<filter>
    <filter-name>corsFilter</filter-name>
    <filter-class>패키지.CorsFilter</filter-class> <!-- 필터위치 -->
</filter>
<filter-mapping>
    <filter-name>corsFilter</filter-name>
    <url-pattern>/data/*</url-pattern> <!-- 서비스할 디렉토리 설정 -->
</filter-mapping>
cs

http://enjoydev.tistory.com/14



'DEV > java' 카테고리의 다른 글

특수문자 변환  (0) 2017.07.13
일정 시간 시행 대기  (0) 2014.03.11
jsp include 수정 후 반영이 안되는 경우  (0) 2013.11.06
  Comments,     Trackbacks
일정 시간 시행 대기
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
Thread.sleep(밀리세컨드)를 메소드를 이용해서 실행중 잠시 대기를 시킬 수 있습니다. 아래 코드는 1초(1000밀리세컨드)동안 멈추면서 5까지 카운트를 하는 코드 입니다.
1
2
3
4
5
6
7
8
9
10
11
public static void main(String[] args) {
    try {
            for (int i = 1; i <= 5; i++) {
            System.out.println(i);
            Thread.sleep(1000);
        }
        System.out.println("end thread");
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
}
cs
출력 결과 는 아래와 같습니다. 1 2 3 4 5 end thread
  Comments,     Trackbacks
jsp include 수정 후 반영이 안되는 경우
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

include 파일을 수정하면 include 한 파일 자체는 서비스에 반영되지만


include하고 있는 파일들은 반영이 안됨.


1) touch 하기

find ./ -name '*jsp' | xargs touch

touch *


단점 : 모든 파일의 수정일이 갱신..


2) jsp 컴파일된 클래스 파일 삭제


단점 : 모든 파일의 수정일이 갱신. 최초접속자 속도 느림.


3) was 컨테이너 재기동


단점 : 모든 파일의 수정일이 갱신. 최초접속자 속도 느림.



안녕하세요... 
저도 정확히 이 문제에 대해 아는거 아니지만 제가 보통 처리 하는 방식을 몇자 적어 보겠습니다. 

우선 이와 같은 현상이 일어나는건 jsp파일이 서비스 하기 위해 파일명.java파일로 변환되어 컴파일 되어 지는데 

이 컴파일 되는 시점이 jsp파일 내용이 변경이 안되었을시에 컴파일 안되고 기존의 파일내용을 참조 하는 경향이 있습니다. 

그래서 아무런 작업없이 새로 저장해서 파일저장시간을 최신으로 해주면 새로컴파일 되서 적용이 되기때문에 
따라서include파일 내용은 바뀌었지만 그것을 include하는 페이지에서 아무런 변경이 안되었기 때문에 새로 변경된 내용을 참조 하지 못하는 현상이 일어나는것 같습니다. 

이럴경우에 제가 쓰는 방법은 두가지 인데 첫번째는 

지 모냠님 질문처럼 기존에 컴파일된 파일을 삭제하는 것입니다 
전 제우스는 안써봐서 그 파일이 존재하는 위치가 정확히 어딘지는 잘모르겠는데 제우스 설치 루트에서 검색해 보시면 

weblogic의 경우에는 디렉토리나 파일명앞에 _ 가 붙어 시작되는 폴더가 있습니다 그곳에서 파일을 삭제해 주시면 되구여 tomcat은 works던가 기억이 잘안나네여... 

다 비슷비슷하니까 ?아 보시면 금방 ?으실수 있으실꺼에여 
그리고 제가 쓰는 다른 방법은 파일의 버젼시간을 최신 시간으로 변경해 줍니다.. 

unix나 linxu OS환경인 경우 touch *.* 명령어를 써주면 

파일들이 최신버젼처럼 변경되기때문에 다시 컴파일되서 제대로 서비스가 됩니다... 

nt환경이 아니시라면 후자쪽이 편하실꺼에여... 

굳이 was를 reboot하실 필요는 없으실꺼 같습니다... 

보통은 was를 reboot해도 이와같은 현상이 계속 일어나구여... 


정확한 답변은 아닙니다. 

참고하셔서 문제를 해결하시다 보면 더 멋진 방법을 발견 하실 수 있으실꺼에요... 

더 간단한 해결방법이 생기시면 모든 분께 공유 부탁드릴께여 그럼 좋은 하루 되세여...

  Comments,     Trackbacks
jsp에서 procedure 호출
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
<%@ page contentType="text/html;charset=euc-kr" import="java.sql.*" %><%
String mseq = request.getParameter("mseq");
String tbbs = request.getParameter("tbbs");
if (mseq==null||tbbs==null) {
%>mseq와 tbbs값이 필요합니다.<%
return; // stop
}

String DB_URL = "jdbc:oracle:thin:@localhost:1521:okjspdb";
String DB_USER = "scott";
String DB_PASSWORD= "tiger";

Connection conn=null;
CallableStatement cstmt=null;

String query = "{call PROC_KBOARD_MOVE(?,?)}";
try {
        Class.forName("oracle.jdbc.driver.OracleDriver");
        conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);

        cstmt = conn.prepareCall(query);
        cstmt.setString(1, mseq);
        cstmt.setString(2, tbbs);

        cstmt.executeUpdate();
%>실행되었습니다.<%
} catch(Exception e){
        out.println(e.getMessage());
} finally {
        cstmt.close();
        conn.close();
}
%>


  Comments,     Trackbacks
a 태그를 이용하여 pdf 파일 다운 시 "파일 다운로드창" 뜨도록 하려면
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

<a href="http://도메인/download/file.pdf">다운로드</a>


로 파일 다운시 "파일 다운로드"창이 뜨지 않음. 

바로 pdf reader가 실행되어 pdf가 보여짐.



a 태그를 이용하여 pdf 파일 다운 시 "파일 다운로드창" 뜨도록 하려면 아래와 같이 작성


<a href="download.jsp?filename=파일명&filename_h=한글명">다운로드</a>


download.jsp 파일


  1. <%@ page language="java" contentType="text/html; charset=EUC-KR" pageEncoding="EUC-KR"%>
  2. <%@ page import="java.io.*"%>
  3.  
  4. <%
  5.     String filename = request.getParameter("filename") + ".pdf";
  6.     String filename_h = request.getParameter("filename_h") + ".pdf";
  7.     String file_location = "/app/tmax/jeus/webhome/context_name/download";
  8.  
  9.     File file = null;
  10.     BufferedInputStream fin = null;
  11.     BufferedOutputStream outs = null;
  12.  
  13.     try{
  14.        
  15.         file = new File(file_location, filename);
  16.         response.reset();
  17.  
  18.         response.setHeader("Content-Type","application/pdf");
  19.         response.setHeader("Content-Disposition","attachment;filename="+filename_h+";");
  20.  
  21.         if(file != null){
  22.             fin = new BufferedInputStream(new FileInputStream(file));
  23.             outs = new BufferedOutputStream(response.getOutputStream());
  24.  
  25.             int read = 0;
  26.  
  27.             while((read = fin.read()) != -1 ){
  28.                 outs.write(read);
  29.             }
  30.         }
  31.  
  32.     }catch(Exception e){
  33.         response.setContentType("text/html;charset=euc-kr");
  34.         out.println("<script type='text/javascript'>");
  35.         out.println("alert('파일 오픈 중 오류가 발생하였습니다.');");
  36.         out.println("</script>");
  37.     }finally{
  38.  
  39.         if(outs != null) fin.close();
  40.         if(fin != null) outs.close();
  41.  
  42.     }
  43.    
  44. %>


  Comments,     Trackbacks
JSP에서 JSTL과 EL(Expression Language) 사용하기
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
ddd


  Comments,     Trackbacks