Programing (403) 썸네일형 리스트형 [HTTP & Spring MVC] 파일 다운로드 구현시 파일명 지정 HTML에서 a 엘리먼트로 하이퍼링크를 지정을 했을 경우 다운로드되는 파일의 이름은 URL 주소의 이름이 파일이다. 예를 들어 /download?filename=a.txt 라는 HTTP GET을 했을 경우 다운로드 받는 파일명은 a.txt인데 실제 받는 파일명은 download라는 이름이 된다. 이럴 경우 HTTP 응답 헤더중 Content-Disposition 를 지정해주면 된다. 바이너리일 경우를 위해 Content-Transfer-Encoding도 같이 지정한다. HttpServletResponse response를 사용한다면,,, response.setHeader("Content-Disposition", "attachment;filename=\""+filename+"\";"); response.s.. [후펴파는 스프링] 스프링 컨테이너 계층 정리 스프링 프레임워크는 객체지향 원리를 지향하다 보니 계층적이고 인터페이스도 오발라게 많다.클래스다이어 그램으로 그려두면 한눈에 볼 수도 있고 정리를 한다는 생각으로 만들어보았다.스프링 버전은 4.1.4.RELEASE 기준이다. 크게 우선 두 가지 컨테이너(BeanFactory와 ApplicationContext라는 인터페이스)로 구분할 수 있을 것이다.간단하게 패키지적인 관점에서 보면 아래와 같다.하지만 객체지향개념중에 클래스나 인터페이스에서 가장 중요한 것은 어떤 역할을 수행하느냐이다. 이런 역할들은 메소드를 통해서 정해진다. 실제 계층구조를 인터페이스 메소드를 포함해서 그려보면 아래와 같이 복잡해진다. (이미지가 커서 글씨가 작으므로 클릭하여 확대해서 보거나 다운받아 보길 권장한다.)또한 인터페이스만으.. [C#] GitHub 클라이언트의 오픈소스 기술들 Akavache - https://github.com/akavache/Akavache An Asynchronous Key-Value Store for Native Applications의 약자로 SQLite3기반의 비동기적으로 키-값을 영속저장하기 위한 라이브러리이다.AvalonEdit - https://github.com/icsharpcode/AvalonEdit / http://avalonedit.net/ SharpDevelop 4.x "Mirador"에서 WPF 기반의 텍스트 에디터이다.Caliburn.Micro - https://github.com/Caliburn-Micro/Caliburn.Micro / http://caliburnmicro.com/ 모든 XAML 기반의 플랫폼을 위한 작지만 강력한.. GitHub 클라이언트로 본 ClickOnce 윈도우에서 GitHub을 사용하기 위한 클라이언트 도구가 존재한다. Licenses 탭에 보면 이 프로그램이 사용한 많은 오픈소스 프로젝트 이름들이 있는데, 관심을 끄는 것은 ClickOnce 배포였다. 프로그램을 설치하거나 업데이트시에 아래와 같은 창이 보인다. 찾아보니 ClickOnce라는 배포 플랫폼이 있었다. 자세한 내용은 이미 정리해놓은 곳이 있어 링크로 대신한다. Unavailable :: ClickOnce를 이용한 윈도우 폼의 배포 - http://diehard98.tistory.com/192 ClickOnce 배포 전략 선택 - https://msdn.microsoft.com/ko-kr/library/71baz9ah(v=vs.85).aspx [ WPF ] ClickOnce로 배포하기 - h.. 후벼파는 자바 - 어노테이션의 내부 원리 자바를 어느정도 해보신 분들은 알겠지만 @를 붙여서 사용하는 어노테이션을 써보았을 것이다.어노테이션이 어떤식으로 동작하는지 궁금해서 몇 가지 테스트를 해보았다. 실습을 했던 코드는 Ayoub El Abbassi 님의 블로그의 "How to add Annotations at Runtime to a java class method using Javassist?"글의 코드를 참고로 하였다. 우선 코드를 만들고package annotation; import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.T.. 후벼파는 스프링 - AbstractApplicationContext.refresh 과정 애플리케이션 컨텍스트의 초기화 과정중에 항상 거치는 메소드가 refresh이다.org.springframework.context.support.AbstractApplicationContext의 코드를 옮겨보면 다음과 같다. (4.1. public void refresh() throws BeansException, IllegalStateException { synchronized (this.startupShutdownMonitor) { // 멤버 필드인 active를 true로 설정한다. (active의 플래그로 refresh가 되었는지를 판단) prepareRefresh(); // 내부에서 쓰이는 BeanFactory를 refresh ConfigurableListableBeanFactory beanFac.. 후벼파는 스프링 - ApplicationContext의 디폴트 스프링 튜토리얼에 보면 ApplicationContext 인터페이스는 BeanFactory 인터페이스의 서브-인터페이스이며, 스프링의 AOP 기능 등과 통합을 더 쉽게 한다라고 적혀있다. 또한 웹 어플리케이션을 위하여 WebApplicationContext를 소개하고 있다. 그런데 HttpServletBean를 상속하고 있는 FrameworkServlet의 경우 WebApplicationContext 인터페이스의 구현체를 XmlWebApplicationContext를 사용하고 있었다.public abstract class FrameworkServlet extends HttpServletBean { /* ... */ public static final Class DEFAULT_CONTEXT_CLASS = .. 후벼파는 스프링 - @RequestMapping의 원리 예전에 "Spring 3.0 시작 - Hello World 동작원리"라는 글에서 Spring MVC 템플릿을 분석하여 정리한 적이 있다.그 당시에는 대강 org.springframework.web.servlet.DispatcherServlet에서 초기화를 해준다고 하는데, 어떤 원리로 동작하는지 내부 구현이 궁금해서 소스를 찾아보았다. 1) 시작은 web.xml 내용은 크게 리스너 클래스를 등록하는 부분과 애플리케이션 요청을 처리할 서블릿에 대한 것으로 구분할 수가 있는데, 내가 관심을 가지고 있는 @RequestMapping은 후자랑 관련이 있다. 결국 /라는 HTTP GET요청이 @RequestMapping(value = "/", method = RequestMethod.GET) 로 지정되어 있는 메.. 이전 1 ··· 31 32 33 34 35 36 37 ··· 51 다음