기본 콘텐츠로 건너뛰기

[java] 파일업로드 구현시 참고사항

 1. 입력화면 1-1. <form enctype="multipart/form-data" > 기본 form에 enctype="multipart/form-data" 부분을 추가. 1-2. <input type="file">  파일업로드 기본 input 이다. 브라우저마자 약간 다를수는 있다. 이대로 쓰는게 가장 좋긴하지만 보통 파일선택 버튼을 이미지로 바꾸고, 파일명을 버튼 앞쪽으로 옮기는걸 많이하는데, 이렇게 되면 신경써야 하는 부분이 많아진다. 요새는 이부분에 대한 javascript 라이브러리들이 좀 많은것 같다. 대충 bootstrap 위주로 검색하자마자 나온거 2가지 첨부. http://gregpike.net/demos/bootstrap-file-input/demo.html http://markusslima.github.io/bootstrap-filestyle/ 2. 업로드처리 2-1 mulipartrequest multipart/form-data 로 인코딩된 form데이터를 받으려면 httpservletrequest가 아닌 multipartrequest로 받아준다. MultipartRequest multi = new MultipartRequest (request, savePath, sizeLimit, "euc-kr" , new DefaultFileRenamePolicy ()); 2-2 파일저장 방식 저장방법은 크게 두가지다. blob 처럼 db에 바로 저장을 하거나, 어딘가에 파일서버를 두고 db에는 파일 위치를 저장하는 저장하는 방식. blob이 경우 쿼리로 바로 뽑으면되서, 구현이 조금 더 쉬울거 같긴하다. 후자의 경우는 nas나 파일서버가 별도로 필요해서 조금 더 복잡도가 올라가지만 DB비용이나 부하를 생각하면 후자가 좋을것 같기도 하다. 2-3 파일폴더 & 파일명 정...

arraylist, linkedlist 차이 - java

linkedlist와 arraylist의 가장큰 차이는 linkedlist 는 각 원소마다 앞,뒤 원소의 위치값 을 가지고 있고, arraylist 는 index 가 있다. 이러한 각각의 특징은 조회,삽입,삭제시에 성능상의 차이를 발생시킨다. 조회(get)   조회시에 arraylist는 index가 있기 때문에, 조회가 한번에 가능하다, elementData[index] = element; 그러나 linkedlist의 경우 처음부터 하나씩 다 타고들어가야 되기때문에 뒤에있는 놈을 찾을 수록 오래걸린다. 삽입(add)  arraylist는 마지막에 추가할경우 자체적으로 확장을 하면되고 elementData[size++] = e; 중간에 삽입이 되는 경우는 해당 위치를 기준으로 arraycopy를 진행한다. System .arraycopy(elementData, index, elementData, index + 1, size - index); elementData[index] = element; 삭제(remove)  arraylist 같은경우에는 내부적으로 remove 해야되는 item을 제외하고 삽입처럼 arraycopy를 시도한다. 반면 linkedlist는 삽입과 마찬가지로 해당 item을 찾아 제거하고, 앞뒤 원소의 위치값만 조정해주면 된다. 해당 함수들의 실제 수행시간은 대충 아래처럼 나온다고한다.   조회시에는 arraylist가 우위 지만,   삽입/삭제 시에는 linkedlist가 뛰어난 성능 을 보여준다.  즉 대량의 삽입삭제가 빈번하게 발생하는 곳에서는 linkedlist를  db에서 단순히 조회만 할 경우에는 arraylist를 사용하면 된다. 참조 : http://www.programcreek.com/2013/03/arraylist-vs-linkedlist-vs-vector/ http://grepc...

css 셀렉터 (jquery)

css selector 기본 문법. # : id 기준 #para1 {.....} (none) : 모든 element p {.....} . : class 이름 .center {.....} 약간 응용해서  만약 <p> elements 들 중에 class name이 center인것만 취하고 싶을 경우 p.center {.....} <span> elements 중 부모가 <p> elements 인경우 p > span {.....} 대강 이정도만 알고 있어도 기본적으로 css와 jquery에서 select하는게 답답함은 줄어들것이다. jquery의 경우는 일반적으로 css와 동일하다.  $('#paran1') - id $('p') - elements $(.center) - class 예제 :  http://jsfiddle.net/VCAHh/2/

mybatis 기본문법

select 기본 <select id="selectPerson" parameterType="int" resultType="hashmap"> SELECT * FROM PERSON WHERE ID = #{id} </select> 변수 설정은 #{} and #{id} and id like '%'||#{id}||'%' -- concat if문  <if test=""> -  예제도 그렇지만 보통 null 체크할때 많이 쓴다. <select id="findActiveBlogWithTitleLike" resultType="Blog"> SELECT * FROM BLOG WHERE state = ‘ACTIVE’ <if test="title != null"> AND title like #{title} </if> </select> choose,when,otherwise   - 게시판에서 전체/제목/내용에 따라 검색방법을 달리할때 처럼     해당 변수가 조회타입 (?)의 성격을 가질때 사용하면 좋을듯. <select id="findActiveBlogLike" resultType="Blog"> SELECT * FROM BLOG WHERE state = ‘ACTIVE’ <choose> <when test="title != null"> AND title like #{title} </when> <when test="author != null and author.name != null"> AND author_name like ...

javascript 배열 파라미터는 call by reference

javascript 함수 맹글다가 오랜만에 재밌는거 발견. (이제는 진짜 자바스크립트 책 정독한번 해야겠다.. ㅎ) 요새 코딩하면서 콜바이 밸류냐 레퍼런스냐에 대한 생각을 뜸하고 있었는데, 오늘 발견!! (그나마 이럴때 등록금이 조금 덜어까운듯 ㅋ) c에서는 변수이름을 던지냐, 주소값을 던져서 call by value 인지 reference 인지 구분을 했다. 그런데 javascript 에서는 변수타입에 따라 정해진다. 태어날때부터 정해진거라는 생각이 드니 뭔가 씁쓸하긴 하다.   - number, string, boolean 타입들은 call by value   - array, object, date 타입들은 call by reference var param = 1 ; test (param); function test (param){ var tmp = param; console .log ( "before int tmp : " + tmp); tmp = tmp + 1 ; console .log ( "after int tmp : " + tmp); console .log ( "after int param : " + param); } console .log ( "quit int param : " + param); 보통 이렇게하면 결과값은 1,2,1,1 의 순서가 나온다. 그런데 array 연산의 경우 조금 다르다 var params = [ 1 , 2 , 3 ] testarr(params); function testarr (params){ var tmparr = params; console .log ( "before int tmparr : " + tmparr); tmparr[ 2 ] = 1 ; ...

jsp에서 xls 다운로드

보통 jsp 페이지를 만들때는 페이지 맨 윗줄에 아래처럼 적어준다. < % @ page language = "java" contentType = "text/html; charset=UTF-8" pageEncoding = "UTF-8" % > 그런데 보통의 jsp가 아닌 excel로 다운 받을 수 있는 jsp 페이지를 작성할때는 contentType을 아래처럼 변경을 해주어야 한다. < % @ page language = "java" contentType = "application/vnd.ms-excel;charset=UTF-8" % > 그리고 나머지는 이렇게. <% String file_name = "download" ; String ExcelName = new String(file_name.getBytes(), "UTF-8" )+ ".xls" ; response.setContentType( "application/vnd.ms-excel" ); response.setHeader( "Content-Disposition" , "attachment; filename=" +ExcelName); response.setHeader( "Content-Description" , "JSP Generated Data" ); response.setHeader( "Pragma" , "no-cache" ); String table = request.getParameter( "table" ); %> <html> <head> </head> <body> <%=t...

chart.js

Chart.js 특징  . 깔끔하고 보기좋음.  . html5 기반. (canvas 사용, IE9 이상)  . 6가지 타입 제공 (Line, Bar, Radar, Pola area, Pie, Doughnut)  . 애니메이션 제공  . http://www.chartjs.org/ Downloadlink :  https://github.com/nnnick/Chart.js Line 타입사용법.  Data structure var data = { labels : [ "January" , "February" , "March" , "April" , "May" , "June" , "July" ], datasets : [ { fillColor : "rgba(220,220,220,0.5)" , strokeColor : "rgba(220,220,220,1)" , pointColor : "rgba(220,220,220,1)" , pointStrokeColor : "#fff" , data : [ 65 , 59 , 90 , 81 , 56 , 55 , 40 ] }, { fillColor : "rgba(151,187,205,0.5)" , strokeColor : "rgba(151,187,205,1)" , pointColor : "rgba(151,187,205,1)" , pointStrokeColor : "#fff" , data : [ 28 , 48 , 40 , 19 , 96 , 27 , 100 ] } ] } .label : x축 라벨 ....