특정 xml파일이나 txt파일 등과 같은 리소스 파일들을 class부분에서 읽어와야 하는 일이 존재
하였다.
기존에는 D:\abc\ddd.txt 형식처럼 외부에 파일을 위치시키고 properties 파일에 경로를 지정한후 파일을 읽어왔는데 너무 번거롭다.
그래서 해결책을 찾아본 결과 spring에서는
import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.Resource;
위 클래스를 이용하여 classpath안에 존재하는 파일의 정보를 가지고 올 수 있었다.
실행방법은 이렇다. 다음과 같은 임의의 파일을 calsspath 영역내에 위치 시키자.
본인은 test.txt라는 파일을 classpath에 위치시킴
그리고 다음과 같이 샘플구현을 하여 파일정보일부를 확인해 보았음
Resource resource = new ClassPathResource("test.txt"); System.out.println("파일사이즈::"+resource.getFile().length()); System.out.println("파일절대경로+파일명:"+resource.getURI().getPath().substring(1));
실행결과 콘솔내용
다음과같은 내용이 콘솔에 찍혔다.
그외의 작업들도 많은대 나머지는 여러분들의 몫~
도움이 되셨다면 공감클릭! 궁금하신점은 댓글!!
스프링3(spring3) 을 이용하여 간단 스케쥴러 세팅을 하도록 하자 (8) | 2014.09.20 |
---|---|
zxing 라이브러리를 이용하여 QR코드/큐알코드/바코드 이미지를 색상별로 생성해보도록 하자 (0) | 2014.08.29 |
스프링3(Spring3) - 메이븐(maven) pom.xml에서 오라클 JDBC(ojdbc14.jar) 라이브러리 추가하기 (0) | 2014.07.30 |
스프링3(Spring3) - RedirectAttributes를 이용하여 리다이렉트 POST 방식으로 데이터 전송하기 (0) | 2014.07.30 |
스프링3(Spring3) - @ResponseBody + jackson을 이용하여 심플하게 JSON 구현하기 (0) | 2014.07.30 |
maven repository에서 ojdbc 검색을 해서 dependency를 추가해주었는데
Missing artifact ojdbc:ojdbc:jar:14 라는 오류발생
삽입했던 dependency
<dependency> <groupId>ojdbc</groupId> <artifactId>ojdbc</artifactId> <version>14</version> </dependency>
뭘까 하다 확인해보니 다음과같이 해주어야 하더라
<dependency> <groupId>com.oracle</groupId> <artifactId>ojdbc14</artifactId> <version>10.2.0.4.0</version> </dependency>
기존 dependency를 위와같이 변경해주고 repositories태그를 추가해주어야 함
pom.xml에 repositories 태그가 존재하지 않는다면 그냥 properties 태그위에 다음과 같이 작성
해주도록 하자
<repositories> <repository> <id>mesir-repo</id> <url>http://mesir.googlecode.com/svn/trunk/mavenrepo</url> </repository> </repositories>
위와 같이 변경하였다면 정상적으로 ojdbc14.jar 라이브러리가 정상적으로 추가된것을
확인할 수 있을 것이다.
다음에는 mssql 라이브러리를 추가하는법을 포스팅 하도록 하겠음!!
도움이 되셨다면 공감클릭! 궁금하신점은 댓글!!
zxing 라이브러리를 이용하여 QR코드/큐알코드/바코드 이미지를 색상별로 생성해보도록 하자 (0) | 2014.08.29 |
---|---|
class파일내에서 classpath에 존재하는 리소스 파일읽어오기 (0) | 2014.07.30 |
스프링3(Spring3) - RedirectAttributes를 이용하여 리다이렉트 POST 방식으로 데이터 전송하기 (0) | 2014.07.30 |
스프링3(Spring3) - @ResponseBody + jackson을 이용하여 심플하게 JSON 구현하기 (0) | 2014.07.30 |
스프링3(Spring3) - 인터셉터(interceptor) 설정 (4) | 2014.07.28 |
우리는 페이지 구현하면서 종종 redirect를 해줄 경우가 있다.
하지만, 대부분 parameter들을 url뒤에 붙여서 get방식으로 값을 넘겨준다.
이번에 다룰 내용에서는 redirect post를 다룰 예정이다.
바로 RedirectAttributes의 addFlashAttribute 를 이용하여 post방식처럼 url뒤에 parameter를
추가하지 않아도 화면에 값을 받을수 있다.
그.러.나 jsp 페이지의 requestmapping 컨트롤러에서도 값을 받을수 있나 확인해봤는데 -_- view 페이지에서만 출력이 되더라...
이건 조금더 확인해봐야할듯..
그렇다면 임의로 컨트롤러 2개를 만들어서 테스트를 해보도록 합시다요
1. 우선은 redirect페이지를 호출해줄 컨트롤러가 필요하겠죠
@RequestMapping(value="/redirectPostTest") public String redirectPostTest(RedirectAttributes redirectAttr) { redirectAttr.addFlashAttribute("param1", "나의파람"); return "redirect:/listTest"; }
2. 마지막으로 redirect페이지인 컨트롤러 와 뷰를 생성해주어야 하겠고요
위 redirect 컨트롤러에서 redirect 해주는 mapping url이 listTest이니까 컨트롤러에
하나 추가를 해주고
@RequestMapping(value="/listTest") public String listTest() { return "listTest"; }
return view page인 listTest.jsp 페이지에 다음과 같이 태그추가를 해보도록 하시고
실행을 해보도록 하시죠.
redirect 데이터 :: ${param1 }
http://localhost:8080/redirectPostTest 라고 준결과 페이지다.
redirect url로 정상적으로 가면서도 url 뒤에는 어떠한 parameter도 붙지 않고 redirectPostTest
URL에서 SET해준 값을 정상적으로 받을수 있었다.
여기서 주의할 사항은 addFlashAttribute에 대한 set은 한개만 되는거 같다.
addFlashAttribute 를 2개의 데이터를 set하였을때 넘겼을 경우 두가지 데이터 모두 null이 떨어지는것이
확인 되었다.
그렇다면 여러개의 데이터를 받고싶을 경우는 어떻게 해야 할까?
정답은 아니더라도 본인이 생각한 임시방편은 -_- map객체에 여러개의 값을 담아서 전송했다.
대부분 넘기고자 하는 parameter들의 타입들이 int,string과같은 단일 변수이라 가정하고 구현한것임.
addFlashAttribute를 두번 이용하여 데이터를 전달하였을때의 결과
//redirectPostTest 컨트롤러에 다음과 같이 코드 추가 @RequestMapping(value="/redirectPostTest") public String redirectPostTest(RedirectAttributes redirectAttr) { redirectAttr.addFlashAttribute("param1", "나의파람"); redirectAttr.addFlashAttribute("param2", "나의파람2"); return "redirect:/listTest"; }
jsp페이지(body태그에 넣음)
redirect 데이터(1) -> ${param1 } redirect 데이터(2)-> ${param2 }
실행결과화면
하나라도 나올줄 알았는데 값이 모두 안찍힘;;
addFlashAttribute를 한번 이용하되 arraylist에 데이터를 담아 전달하였을때의 결과
@RequestMapping(value="/redirectPostTest") public String redirectPostTest(RedirectAttributes redirectAttr) { Map<String, Object> map = new HashMap<String,Object>(); map.put("param1", "나의파람1"); map.put("param2", "나의파람2"); redirectAttr.addFlashAttribute("param1", map); return "redirect:/listTest"; } @RequestMapping(value="/listTest") public String listTest() { return "listTest"; }
jsp페이지(body태그에 넣음)
redirect 데이터(1) -> ${param1.param1 }
redirect 데이터(2)-> ${param1.param2 }
실행결과화면
잘나온다..
이번포스팅에서는 redirect post방식을 알아보았다.
도움이 되셨다면 공감클릭! 궁금하신점은 댓글!!
class파일내에서 classpath에 존재하는 리소스 파일읽어오기 (0) | 2014.07.30 |
---|---|
스프링3(Spring3) - 메이븐(maven) pom.xml에서 오라클 JDBC(ojdbc14.jar) 라이브러리 추가하기 (0) | 2014.07.30 |
스프링3(Spring3) - @ResponseBody + jackson을 이용하여 심플하게 JSON 구현하기 (0) | 2014.07.30 |
스프링3(Spring3) - 인터셉터(interceptor) 설정 (4) | 2014.07.28 |
스프링3(Spring3) - SQL 쿼리 출력을 위한 로그레벨 설정 (0) | 2014.07.27 |
기존에 Spring프로젝트를 하면서 jackson json이 있는거는 알고 설정법까지 알고 있었지만
기존 json 파싱 라이브러리와 별차이없을거라 생각하고 대수롭지 않게 생각했었다.
json-simple이나 json json-lib + ezmorph 를 사용하여 json object를 생성햇었다..
하지만 포스팅을 위하여 jackson을 사용해보았는데.. 맙소사!!
그동안 삽질을 해왔던거였음...
기존 json 파싱보다 jackson 라이브러리를 사용하는것이 최적인듯...
앞으로 jackson으로 파싱하리~~
자 우선 기존 세팅에서 pom.xml에 dependency를 추가해주도록 하자
<dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency>
라이브러리추가를 해주었다면 다음은 mvc-config.xml에 jackson을 위한 bean 설정을 해주도록 하자
<bean id="jacksonMessageConverter" class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
다음은 흔히들 말하는 vo 클래스 하나를 생성하여 다음과 같이 선언을 해주도록 해보자
public class JSONTest { private int id; private String txt; private ArrayList<String> list; private String[] arr; public String[] getArr() { return arr; } public void setArr(String[] arr) { this.arr = arr; } public ArrayList<String> getList() { return list; } public void setList(ArrayList<String> list) { this.list = list; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getTxt() { return txt; } public void setTxt(String txt) { this.txt = txt; } }
VO에 배열과 리스트를 선언해본이유가 json array객체를 어떻게 출력시키는지 궁금해서
둘다 생성해보았음.
마지막으로 @responsebody를 이용한 컨트롤러를 생성하여 vo객체에 데이터들을 담은 후, 브라우저에 컨트롤러 URL을 호출해보도록 하자
. @RequestMapping(value="/jsonTest") public @ResponseBody JSONTest jsonTest() { //가상의 배열및 리스트에 데이터 add ArrayList<String> arraylist = new ArrayList<String>(); arraylist.add("a"); arraylist.add("b"); String[] array = {"a","b","c"}; //VO객체에 SET한후 vo객체자체를 return JSONTest test = new JSONTest(); test.setId(1); test.setTxt("textTxt"); test.setList(arraylist); test.setArr(array); return test; }
실행을 해보도록 하자
※ IE에서는 URL 호출시 JSON 데이터일경우 파일다운로드를 받게끔 되있으므로
크롬에서 컨트롤러 호출을 해보았음
흑흑 ㅠㅠ 잘나온다,.. array / arraylist 상관없이 json array에 알아서 담아서 출력해준다....
코드를 보니 json array가 잘못 출력되는것 확인하였다.
아무래도 그냥 list/array타입의 key/value로 지정이 되야하는데 그냥 문자열만 넣어서 그런가보다.
그래서 다시 list형식의 key/value를 적용하여 간단하게 게시물상세내용 + 다중파일첨부를 가상의 예를 들어서 다시 작성해보았음.
DB통신을 통하여 쿼리 작성을 하려하였으나 그냥 VO에 가상의 데이터를 넣어보기로 하였음
1. VO 클래스를 두개를 작성한다.
- Board.java
public class Board { private int seq; private String title; private String content; private Date regdate; private ArrayList<BoardFile> filelist; public ArrayList<BoardFile> getFilelist() { return filelist; } public void setFilelist(ArrayList<BoardFile> filelist) { this.filelist = filelist; } public int getSeq() { return seq; } public void setSeq(int seq) { this.seq = seq; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public Date getRegdate() { return regdate; } public void setRegdate(Date regdate) { this.regdate = regdate; } }
- BoardFile.java
public class BoardFile { private int fileSeq; private String fileName; private int fileSize; public int getFileSeq() { return fileSeq; } public void setFileSeq(int fileSeq) { this.fileSeq = fileSeq; } public String getFileName() { return fileName; } public void setFileName(String fileName) { this.fileName = fileName; } public int getFileSize() { return fileSize; } public void setFileSize(int fileSize) { this.fileSize = fileSize; } }
다음은 기존 /jsonTest 컨트롤러내에 set 데이터를 한번 다음과 같이 처리해주도록 하자
@RequestMapping(value="/jsonTest") public @ResponseBody Object jsonTest() { Board board = new Board(); board.setSeq(1); board.setTitle("제목"); board.setContent("내요내용내용"); board.setRegdate(new Date()); ArrayList<BoardFile> filelist = new ArrayList<BoardFile>(); BoardFile boardFile = null; boardFile = new BoardFile(); boardFile.setFileSeq(1); boardFile.setFileName("파일명1"); boardFile.setFileSize(1000); filelist.add(boardFile); boardFile = new BoardFile(); boardFile.setFileSeq(2); boardFile.setFileName("파일명2"); boardFile.setFileSize(25645); filelist.add(boardFile); board.setFilelist(filelist); return board; }
컨트롤러에 대해서 설명을 하자면 게시판의 뷰페이지를 예로 든것이다.
상세보기 클릭시 제목과 내용이나오고, 여러개의 파일목록들에 대한 json 객체를 return!!!
위와같이 작성하고 /jsonTest 를 브라우저에서 호출하게 되면 ...
이번엔 정상적으로 json object 부터 json array까지 정상적으로 잘나오는것을 확인할 수 있었다...
그동안 난 뭘한건지... ㅋ
앞으로 jackson을 사용해주리라~~
도움이 되셨다면 공감클릭! 궁금하신점은 댓글!!
스프링3(Spring3) - 메이븐(maven) pom.xml에서 오라클 JDBC(ojdbc14.jar) 라이브러리 추가하기 (0) | 2014.07.30 |
---|---|
스프링3(Spring3) - RedirectAttributes를 이용하여 리다이렉트 POST 방식으로 데이터 전송하기 (0) | 2014.07.30 |
스프링3(Spring3) - 인터셉터(interceptor) 설정 (4) | 2014.07.28 |
스프링3(Spring3) - SQL 쿼리 출력을 위한 로그레벨 설정 (0) | 2014.07.27 |
스프링3(Spring3) - @PathVariable를 이용하여 parameter를 url형식으로 받기 (0) | 2014.07.26 |
이번 포스팅은 웹화면에 플래시파일(.swf)을 띄우기 위한 샘플링을 구현하고자 한다.
우선 사용할 파일은 swfobject.js 라는 것이다.
사이트URL : https://code.google.com/p/swfobject/
위화면으로 가서 swfobject 관련 zip파일을 다운로드 받도록 하자
받았다면 압축해제후, swfobject.js파일과 expressInstall.swf 파일을 본인의 프로젝트내에 복사 붙여넣기를 해보도록 하자
그리고 샘플링으로 필요한 swf파일이 있어야하니 우선 다운로드 받은 파일내에 존재하는 swf파일[test.swf]을 프로젝트내에 넣도록 하자
그리고 경로에 맞추어서 일부를 수정하였음.
물론, 다운로드 파일내에 존재하는 샘플을 코드만 그대로 가져다 놓은후, 경로를 본인의 환경에 맞추고 호출을 해본것임.
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <!-- 스크립트 include --> <script type="text/javascript" src="/resources/swfobject.js"></script> <script type="text/javascript"> //<object> 태그 id를 첫번째 param으로 설정 swfobject.registerObject("swfId", "9.0.0", "/resources/expressInstall.swf"); </script> </head> <body> <div> <object id="swfId" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="300" height="120"> <!-- SWF 파일 경로를 value속성에 일치 --> <param name="movie" value="/resources/test.swf" /> <!--[if !IE]>--> <!-- SWF 파일 경로를 data속성에 일치 --> <object type="application/x-shockwave-flash" data="/resources/test.swf" width="300" height="120"> <!--<![endif]--> <div> <h1>Alternative content</h1> <p><a href="http://www.adobe.com/go/getflashplayer"><img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" /></a></p> </div> <!--[if !IE]>--> </object> <!--<![endif]--> </object> </div> </body> </html>
본인이 변경한 부분은 /resources가 존재하는 값들만 변경을 해준것이다.
그럼 이제 실행을 해보도록 하자.
윈도우 버전을 호출하는 플래시파일인가 보다.
이걸로 swf파일 호출하는 샘플은 끝~
※ swfobject.registerObject("swfId", "9.0.0", "/resources/expressInstall.swf");
왜필요한지 모르겠다 없어도 플래시는 잘 호출 되는거 같은대... 뭐하는 함수인지..
API 찾아보고 추가 포스팅을 해야겠다..
도움이 되셨다면 공감클릭! 궁금하신점은 댓글!!
jquery 체크박스 전체 선택/해제 샘플소스 (1) | 2014.06.10 |
---|---|
자바스크립트 replaceall 함수만들기 (0) | 2014.06.08 |