웹 어플리테이션을 서비스하는 서버서버에 어플리케이션(프로그램)을 설치해 놓고 클라이언트가 이용할 수 있게 해준다.⇒ 업데이트가 용이하다.웹 브라우저의 요청 → 요청이 Server(Tomcat)으로 전달→ Server 내부인 스레드 풀 내부의 여러 스레드들 중 하나가 요
프로그램 등록→ @Controller 를 프로그램 클래스 앞에 붙여주면 된다.⇒ 원격 호출이 가능한 프로그램으로 등록된다.URL과 프로그램(호출하려는 메소드)을 연결→ @RequestMapping("url")이때, 메서드는 인스턴스 타입이어도 괜찮다.톰캣 서버 내부에서
원격 프로그램 실행시 해야할 것,원격 프로그램 등록: 서블릿 등록 → @ControllerUrl과 호출할 메소드 연결 → @RequestMapping()하지만 이렇게 애노테이션을 사용하기 전에는 Web.xml에서 위의 설정을 했었다.
서로 간의 통신을 위한 약속, 규칙주고 받을 데이터에 대한 형식을 정의한 것단순하고 읽기 쉽다. - 텍스트 기반의 프로토콜상태를 유지하지 않는다.(stateless) - 클라이언트 정보를 저장X⇒ 따라서, 클라이언트 구별을 할 수 없다. → 쿠기와 세션을 이용한다.확
입력처리출력SRP - 단일책임의 원칙: 하나의 메서드는 하나의 책임⇒ 분리하기관심사변하는 것, 변하지 않는 것공통코드입력(공통 코드): request.getParameter()처리, 출력: Controller가 처리request.getParameter() 대신 파라미터
JSP ≒ Servlet ⇒ Springinit()서블릿의 초기화 작업 담당service()입력처리출력destroy()뒷정리 - 서블릿이 메모리에서 제거될 때 서블릿 컨테이너에 의해서 제거요청이 들어왔을 때, 서블릿 인스턴스 존재여부 확인없는 경우 → 서블릿 클래스 로
@RequestParam >요청의 파라미터를 연결할 매개변수에 붙이는 애너테이션 required=false : 필수입력X → 기본값을 설정해주어야한다. defaultValue="1" : 기본값 HTTP 500 오류: 서버 잘못 HTTP 400 오류: 클라이언트 잘못 attribute에 저장할 때 저장된 키 값으로 뷰에서 받는다! @ModelAtt...
form 태그
src > main > webapp > WEB-INF > spring > appServlet > servlet-context.xmlRegisterController.java맵핑될 URL의 공통 부분을 @RequestMapping으로 클래스에 적용한다.Mapping UR
두 번의 요청클라이언트의 요청서버의 응답, 상태코드: 300 ⇒ redirectredirect에 의한 자동적인 새로운 요청(GET으로 요청된다.)응답한 번의 요청 (MVC 패턴과 유사)클라이언트의 requestforward응답spring에서의 처리클라이언트의 요청: /
이름과 값의 쌍으로 구성된 정보. 아스키 문자만 저장 가능하다.브라우저에 저장한다. → 서버에서 생성 후 전송, 브라우저에 저장유효기간이 존재한다. → 유요기간 이후 자동 삭제서버에 요청시 domain , path 가 일치하는 경우에만 자동 전송클라이언트의 요청(로그인
서로 관련된 요청들(HTTP transactions)을 하나로 묶은 것 - 쿠키를 이용browser마다 개별 저장소(session 객체)를 서버에서 제공browser:session = 1:1cookie는 browser에 저장한다.session은 server에 저장한다.
예외 처리를 위한 메서드를 작성하고 @ExceptionHandler를 붙인다.@ControlleAdvice로 전역 예외 처리 클래스 작성 가능(패키지 지정 가능)예외 처리 메서드가 중복된 경우, 컨트롤러 내의 예외 처리 메서드가 우선된다.응답 메시지의 상태 코드를 변경
입력처리출력여러 서블릿에 있는 공통된 코드인 입력 부분을 DispatcherServlet이 담당한다.즉, 전처리를 담당한다.Client의 요청 → DispatcherServlet → HandlerMapping → DispatcherServlet → Controller
타입 변환데이터 검증→ BindingResult에 결과값 저장한다.양방향 타입 변환(String → 타입, 타입 → String)특정 타입이나 이름의 필드에 적용이 가능하다.단방향 타입 변환(타입A → 타입B)PropertyEditoer(양방향)의 단점을 개선(stat
↓(Key, Value) : (String, String)(Key, Value) : (Object, Object)객체 컨테이너? = 저장소자바빈 = 자바 객체, 몇가지의 조건을 만족시켜야 함클래스 앞에 @Component 애노테이션을 붙인다.이름으로 찾기타입으로 찾기m
psvm : main() 생성 sout : System.out.println() 생성 변수이름.sout : System.out.println(객체이름) 생성 변수이름.soutv : System.out.println("객체이름 =" + 객체이름) 생성
resources > config.xml 파일 생성→ 사용할 빈을 이곳에 설정해준다.config.xml→ ApplicationContext라는 저장소에서 getBean(key)를 통해 value를 가져올 수 있다.byName : getBean("car")byName :
데이터(data)에 접근(access)하기 위한 객체(object)Database에 저장된 데이터를 읽기, 쓰기, 삭제, 변경을 수행 (CRUD)DB테이블 당 하나의 DAO를 작성한다. (1:1)Controller ↔ Dao ↔ DBController ↔ DB ⇒ 코드
더 이상 나눌 수 없는 작업의 단위.all or nothing나눌 수 없는 하나의 작업으로 다뤄져야 한다.Tx 수행 전과 후가 일관된 상태를 유지해야한다.각 Tx는 독립적으로 수행되어야 한다.성공한 Tx의 결과는 유지되어야 한다.작업 내용을 DB에 영구적으로 저장최근
여러 메서드에 공통 코드를 추가해야 한다면?처음이나 끝관점 지향 프로그래밍? 횡단 관심사? cross-cutting concerns?부가 기능(advice)을 동적(실행중에)으로 추가해주는 기술(부가 기능의 반대말: 핵심 기능)메서드의 시작 또는 끝에 자동으로 코드(a