+메이븐 설정1234567891011121314151617 org.springframework spring-websocket ${org.springframework-version} org.springframework spring-messaging ${org.springframework-version} com.fasterxml.jackson.core jackson-databind 2.2.3Colored by Color Scriptercs +웹소켓 요청에 대한 핸들러 작성12345678910111213141516171819202122232425262728293031323334353637383940414243@Componentpublic class ContentHandler extends TextWebSock..
@MVC는 애노테이션 기반의 컨트롤러 기술이다.@MVC 이전의 컨트롤러는 타입을 비교해서 컨트롤러를 선택하고, 그 타입의 구현된 메서드를 호출하는 방법을 사용했다면, @MVC는 @RequestMapping을 이용해서 컨트롤러 클래스나 메서드를 선택하여 호출하는 방법을 사용한다. 이것을 사용하기 위해서는 DefaultAnnotationHandlerMapping을 사용해야 했지만 스프링 3.2부터 deprecated되었고, RequestMappingHandlerMapping가 대신한다. RequestMappingHandlerMapping는 기본적으로 등록되는 빈이라 등록해줄 필요가 없지만 만약 다른 핸들러 매핑 빈을 사용하고 있다면 수동으로 서블릿 컨테이너에 이 빈을 등록해줘야 사용할 수 있다. @Reque..
컨트롤러 스프링에서는 컨트롤러의 유연한 개발을 위해 컨트롤러가 될 수 있는 대상에 대해 제한을 두고 있지 않는다. 스프링은 사용자의 모든 요청이 DispatcherServlet(web.xml에 서블릿으로 정의되어 있음)을 거친다. 직접 컨트롤러 클래스를 작성하기 위해서는 스프링 MVC가 지원하는 컨트롤러를 구현해야 하고 DispatcherServlet에 연결해주는 컨트롤러 어댑터가 필요하다. Servlet, SimpleServletHandlerAdapter이 컨트롤러와 컨트롤러 어댑터는 기존 표준 서블릿(HttpSErvlet을 상속받아 정의하는 서블릿) 클래스 코드를 그대로 유지하면서 사용할 수 있도록한다. HttpRequestHandler, HttpRequestHandlerAdapter이 컨트롤러와 어..
초기화 메서드는 빈 객체가 생성되고 의존관계 주입이 끝난 시점에 실행되는 메서드를 말한다. 생성자에서 초기화 작업을 해도 되지만 빈에서 주입받는 모든 의존관계 변수나 프로퍼티의 DI 작업이 끝난 시점 이후에 초기화를 해야 될 때 초기화 메서드를 사용한다. 초기화 메서드를 지정하는 방법 init-method속성을 xml에 빈 선언시에 지정@PostConstruct init-method속성을 xml 빈 선언시 지정1cs빈 정의시에 init-method 속성에 DI작업이 끝난 이후에 호출될 메서드를 선언해준다. 123456789101112131415161718@Controllerpublic class TestTwoController { CarInfoProvider car; @Resource(name="kiaC..
스프링은 싱글톤(singgleton), 프로토타입(prototype), 요청(request), 세션(session), 글로벌세션(globalSession), 애플리케이션(application) 스코프를 기본적으로 제공 스프링에서 별도의 설정 없이 등록한 빈은 모두 싱글톤 빈이다. 요청 스코프 빈이 빈은 하나의 사용자 웹 요청 안에서 만들어지고 요청이 끝나면 제거된다.각 요청별로 독립적인 빈이 만들어지기 때문에 빈 객체 내에 상태유지 값을 저장해 두어도 안전하다.동시에 많은 요청이 있더라도 각각 별도의 요청 스코프 빈이 만들어지기 때문에 안전하다. +리퀘스트 스코프 빈 모델 객체123456789101112131415@Component@Scope("request")public class RequestScop..
기본적으로 스프링에서 빈을 등록하면 싱글톤으로 만들어진다. 애플리케이션 컨텍스트 마다 빈은 한개씩만 만들어진다는 얘기다.사용자의 요청이 있을 때마다 매번 관련 있는 빈을 새로 생성하는 것은 비효율적이기 때문이다. 싱글톤 빈은 의존성 주입(DI)을 하든지 ApplicationContext를 이용해서 빈을 불어와도 매번 같은 객체를 반환한다. 그런데 때로는 빈을 싱글톤이 아닌 하나의 빈으로 여러개의 객체를 만들어 사용해야 할 때가 있다.그럴 때 프로토 타입 빈을 사용하는데 프로토타입 빈은 컨테이너에게 빈을 요청할 때마다 매번 새로운 객체를 생성하여 반환해준다. 싱글톤빈은 다음과 같이 애노테이션으로 설정할 수 있다.12345678910111213@Component@Scope("prototype")public ..
XML에서 빈을 등록했다면 생성자나 자바빈 규약에 따른 수정자(set으로 시작하는 메서드)에 의존관계 빈이나 값을 주입할 수 있다. 1234567891011public class InjectionTest { public InjectionTest(String name, int age, String s) { System.out.println(name + "======" + age + "=========" + s.toString()); } public void setParameterSetting(String a) { System.out.println(a); } }Colored by Color Scriptercs 123456789 Colored by Color Scriptercs스프링 컨텍스트 XML설정 파일에..
스프링에선 객체의 생성과 사용 및 제거 등의 작업을 애플리케이션 소스코드 대신 독립된 컨테이너가 담당한다. 이것을 IoC(제어역전)라고 부르며, 스프링 컨테이너를 IoC컨테이너라고 부른다. IoC컨테이너의 기본적인 역할코드를 대신해서 애플리케이션을 구현하는 오브젝트를 생성하고 관리하는 것 xml문서, 자바코드, 애노테이션 같은 리소스를 통해서 BeanDefinition 인터페이스 타입으로 변환되어져 이 타입을 IoC컨테이너가 활용한다.BeanDefinition에는 bean하나를 만드는데 필요한 여러 가지 정보가 들어있다. bean 등록 방법은 빈에 필요한 메타정보를 작성해서 컨테이너에 설정하면 된다.가장 직접적인 방법은 BeanDefinition타입의 인터페이스를 구현하는 클래스를 직접 생성하는 것이다...
스프링 시큐리티를 사용한다.ajax로 요청하는 어떤 url(별칭A)로의 접근을 시큐리티가 로그인 한 사용자만 접근하도록 제한하고 있다.한 페이지에서 장시간 사용하지 않아 세션이 만료되어 로그아웃 되었다.하지만 페이지는 로그인한 페이지 그대로 보여 A로 접근하는 ajax를 실행했지만 실패한다.. 이런 이유로다음과 같은 상황에서 ajax를 실행하면 로그인 화면으로 리다이렉트 하도록 한다. 필터클래스를 구현한 bean을 등록하고, security:http엘리먼트 하위에 custom-filter엘리먼트를 등록한다. ..... ..... Colored by Color Scriptercs 필터 클래스의 구현체인 AjaxSessionTimeoutFilter클래스를 만든다.public class AjaxSessionT..
@InitBinder 스프링프레임워크에서의 바인딩이란 모델 클래스(오브젝트)의 프로퍼티(메서드 set)에 값을 넣는 것을 말한다. 두가지 바인딩을 제공하는데.. 첫 번째는 xml설정 파일을 통해 의 에 값을 넣는 것이다. 하지만 xml자체가 문자열이기 때문에 해당 빈클래스의 property값이 기본형 타입이나 String이라면 괜찮지만 그 외의 타입이라면 바인딩 하기전에 적절한 변환이 필요하다. 두번째는 Http를 통해 전달되는 헤더, 쿠키, 파라미터 같은 정보인데 이런 것들도 전부 문자열로 전달되는 값이다. 해서 이 경우에도 특정 타입으로 매칭시키려면 바인딩 과정 중에 적절한 변환이 필요하다. 컨트롤러 메서드에서는 @RequestParam, @PathVariable, @ModelAttribute등이 메..
JUnit은 자바에서 제공하는 표준 테스트 도구이다. 스프링도 JUnit을 발판으로 테스트를 하면서 만들어졌다고 한다. JUnit을 실행하는 방법 대부분의 자바 개발자가 사용하는 이클립스는 JUnit테스트를 지원하는 기능을 제공하고 있다.@Test가 들어있는 클래스를 선택 - Run - Run as - JUnit Test를 선택하면 실행할 수 있다. JUnit은 한번에 여러 테스트 클래스를 동시에 실행 할 수도 있다. 이클립스 왼쪽 소스폴더 트리의 프로젝트나 패키지 디렉토리를 선택해서 위에서 설명한 실행방법 대로 하면 JUnit테스트를 한번에 실행해준다. 테스트 클래스 작성방법 JUnit이 하나의 테스트 클래스를 가져와 테스트 하는 방식(과정)1. 테스트 클래스 내부에서 메서드 레벨에 @Test가 붙고 ..
1. 구글 리캡차 api key 발급https://www.google.com/recaptcha/admin#list label : 이름domain : URL입력 (로컬이라면 localhost 입력) owner : 소유자 이메일 발급받은 후 sitekey, secretkey 복사 2. 메이븐 의존성 주입net.tanesha.recaptcha4jrecaptcha4j0.0.7 3. jsp 엘리먼트 작성 siteKey는 발급받은 것 적으면 됨 4. 자바스크립트 메서드 작성(본인은 ajax 처리) $.ajax({ url : '/member/captchaAjax', type : 'post', data : { recaptcha : document.getElementById("g-recaptcha-response").v..
Spring 3.2 부터 이 @ControllerAdvice가 생겼다고 한다.컨트롤러 서비스 퍼시스턴스 단에 발생할 수 있는 예외를 이 어노테이션을 지정한 클래스에서 공통적으로 관리 해 줄 수 있다. 사용 방법은 간단하다.(세부적으로 들어가면 간단하지 않음.) 보는 것처럼 스프링 빈을 정의해주는 config파일에 구문을 넣어준다.context:component-scan이라는 것은 bean엘리먼트를 정의하지 않아도 자동으로 해당 패키지에 있는 @compoenet, @service, @controller 등을 알아서 스캔해 인스턴스를 생성해준다. 안에 있는 context:include-filter는 스프링이 제공하는 기본필터를 사용하지 않고 @ControllerAdvice의 클래스를 사용하겠다는 뜻.. 다음..
소스코딩을 하면서 JDBC연결에 필요한 username, password, url 같은 접속 정보나 로컬호스트와 서버의 파일 저장 경로같은 설정을 기존에는 MessageSource기능을 이용해서 사용하였는데..이 방법의 단점은 자바의 controller단에서 request객체를 이용하여 서버의 url을 가져온 다음에 조건문으로 localhost나 127.0.0.1, 192.168.x.x 같은 호스트가 포함되어 있으면 로컬이라하고 아니면 서버로 구분한 문자열을 service단으로 넘겨서이문자열을 플래그 값으로 해서 실서버 환경인지 로컬작업 환경인지를 구분하는 조금 복잡한 구조를 가지고 있었는데.. 어떻게 다른 방법이 없나 하다가 profile이라는 기능을 발견하게 되었다. 사용방법은 의외로 간단하면서 유용..
메이븐 의존 라이브러리 주입 javax.validation validation-api 1.1.0.Final org.hibernate hibernate-validator 5.2.2.Final org.hibernate hibernate-validator-annotation-processor 5.2.2.Final @Valid를 사용하기 위하여 스프링 컨테이너에 빈 등록 모델클래스에 어노테이션 기반의 검증 코드 작성 컨트롤러단에 적용@ModelAttribute 로 받은 모델 객체가 @Valid 적용이 되어 있다면 수행BindingResult 타입으로 성공 실패 여부 판단