Spring Framework 24

[Spring] @param 사용이유

public void countQuery(@Param("name")String parameter); 이렇게 @Param 어노테이션을 붙이면 본인이 원하는 명으로 mapper에서 사용할 수 있다. 위와 같은 경우는 #{name}이 되겠다. 사실 위의 코드같은경운 파라미터가 하나라서 @Param 을 안써도되지만, 파라미터가 두개일경우 마이바티스에서 인식을 못하기때문에 @param을 사용해야한다. 물론, 어노테이션을 쓰지 않아도 mapper에서 #{param1} 이라던지, #{parameter} 로 파라미터 명을 적으면 사용이 가능하다.

[Spring] @RequestParam 파라미터 매핑

컨트롤러를 구현할 때 가장 많이 사용되는 어노테이션은 바로 @RequestParam 일 것이다. @RequestParam은 HTTP 요청 파라미터를 컨트롤러 메소드의 파라미터로 전달받을 때 사용된다. 즉, JSP에서 request.getParameter(); 와 비슷하다고 볼 수 있다. @RequestParam 어노테이션이 적용된 파라미터는 기본적으로 필수 파라미터이다. 따라서 @RequestParam 어노테이션에 명시한 HTTP 요청 파라미터가 존재하지 않을 경우 스프링 MVC는 잘못된 요청을 의미하는 400 응답 코드를 웹 브라우저에 전송한다. 필수가 아닌 파라미터인 경우 required 속성 값을 주어 false로 지정해주면 된다. required 속성 값을 따로 작성안할 경우 기본 값은 true로..

[Spring] servlet-contex.xml, root-context.xml, web.xml 간략한 정리

우선, xml 파일은 모두 객체(Bean)를 정의합니다. 1. servlet-contex.xml servlet에서 보듯이 요청과 관련된 객체를 정의합니다. url과 관련된 controller나, @(어노테이션), ViewResolver, Interceptor, MultipartResolver 등의 설정을 해줍니다. 초기 파일을 보시면 위와 같은 주석이 있는데 DispatcherServlet과 관련된 설정을 해야함을 알 수 있습니다. 2. root-contex.xml servlet-context.xml 과는 반대로 view와 관련되지 않은 객체를 정의합니다. 따라서 Service, Repository(DAO), DB등 비즈니스 로직과 관련된 설정을 해줍니다. 3. web.xml 설정을 위한 설정파일입니다...

[Spring] 스프링 MVC 이란?

스프링 MVC는 Model- View - Controller의 약자이다. 흠.... 그래서 이게 무슨말이냐.... 위의 이미지 예시로 설명하겠다. 위의 소스코드는 members.jsp라는 파일이다. 위의 코드를 보면 안에 적혀있는 코드는 java코드고, 밑에는 html과 java코드가 섞여있다. 물론 jsp가 나오기전에는 servlet으로 html 응답을 만들어서 내려주고 했는데... 요즘 신규프로젝트에서는 그렇게 하지않으니 그부분은 너무 비효율적이기도하고 해서, 설명은 스킵하겠다.. (위의 파일을 본다면, jsp의 역할이 너무 많다. 비즈니스 로직도 수행하고, html 화면 그려주는 부분도해야하고...) (만약 html만 변경되야할 상황이 온다면 java코드가 들어있는 jsp도 같이 파일의 변경이 일어..

[Spring] 스프링 MVC의 흐름

1)클라이언트가 url을 통해 요청을한다 2) 디스패쳐 서블릿이 일단받는다 3) 디스패쳐 서블릿이 요청 url과 맞는 controller를 검색한다(핸들러매핑) 4)(핸들러매핑)은 요청 url과 매핑된 컨트롤러를 디스패쳐 서블릿에 리턴한다 5) 디스패쳐서블릿은 url과 매핑된 컨트롤러를 핸들러 (핸들러어댑터에게) 알맞은 처리를 요청한다 6)(핸들러 어댑터는) 해당요청에 맞는 메소드를 (컨트롤러에게)요청하고 비즈니스로직결과를 리턴한다 7)핸들러 어댑터는 리턴결과를 디스패쳐 서블릿에 객체로 리턴한다 8)디스패쳐 서블릿은 핸들러어댑터에게 받은 (데이터와 jsp의값을) 뷰리졸버에게 보내 view 를 찾아달라고 요청을 한다 9)뷰리졸버가 찾아서 리턴하면 view객체에 응답해서 view객체는 클라이언트에게 값을 전..

[Spring] ServletContext, HttpSession, HttpServletRequest 차이점

- 이전페이지에서 수집했던 데이터를 다음 페이지에서 사용할수 없다, 다음페이지에서도 이전 페이지에서의 데이터를 유지해서 사용하기 위해선 어딘가에 저장해두고 유지시켜 놓아야함. * 저장소는 크게 3가지가 있음.(차이나는건, 메모리에서 유지되는 기간이 다르다.) 1) ServletContext 2) HttpSession 3) HttpServletRequest ServletContext HttpSession HttpServletRequest 생성: 서버시작시 제거: 서버 중지시 web application이 서비스중인 동안에는 계속 존재 생성: Client가 최초 접속시 제거: Client 접속 종료시 Client가 접속중인 동안에만 존재 생성: Client가 요청시 삭제: Server가 응답시 Request..

[Spring] 스프링 어노테이션 정리

Annotation 이란? Annotation(@)은 사전적 의미로는 주석이라는 뜻이다. 자바에서 Annotation은 코드 사이에 주석처럼 쓰이며 특별한 의미, 기능을 수행하도록 하는 기술이다. 즉, 프로그램에게 추가적인 정보를 제공해주는 메타데이터라고 볼 수 있다. meta data : 데이터를 위한 데이터) 다음은 어노테이션의 용도를 나타낸 것이다. 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공한다. 소프트웨어 개발 툴이 빌드나 배치시 코드를 자동으로 생성할 수 있도록 정보를 제공한다. 실행시(런타임시)특정 기능을 실행하도록 정보를 제공한다. 기본적으로 어노테이션을 사용하는 순서는 다음과 같다. 어노테이션을 정의한다. 클래스에 어노테이션을 배치한다. 코드가 실행되는 중에 Reflecti..

[Spring] 스프링 @RequestParam과 @PathVariable

@PathVariable 이란? @RequestMapping의 URL 에서 ({})의 명시된 변수를 받아온다. @PathVariable을 이용하여 URI 템플릿중 어떤 파라미터를 가져올지 결정할수 있다 라는 형식으로 view 단에서 파라미터를 보내면 컨트롤러에서 파라미터를 받기 위해서는 위 사진처럼 받아올수 있다 . @PathVariable("boardId") 에서 괄호'( )' 는 생략 가능하지만, 대신에 파라미터 이름은 같아야한다. @RequestParam 이란? @RequestParam을 사용할시 파라미터를 넘기지 않으면 400에러를 뱉기때문에, 선택적으로 사용할때는 꼭 required = false를 적어야함. 위 사진과 같은 제이쿼리의 ${boardId} 처럼 동적 데이터를 보내야할땐, 스프링단..

[Spring] 스프링 @Controller 와 @RestController 차이

주요한 차이점 : HTTP Response Body가 생성되는 방식 @Controller 전통적인 Spring MVC의 컨트롤러 View 기술사용 @ResponseBody를 사용하면 View를 리턴하지 않고 Controller에서 직접 데이터 리턴 가능 Spring4.0부터 @RestController를 통해 더 단순화 되었다. @RestController Restful 웹서비스의 컨트롤러 반환 되는 객체 데이터 타입 : JSON/XML 타입의 HTTP 응답을 직접 리턴 @Controller의 실행 흐름 Client -> Request -> Dispatcher Servlet -> Handler Mapping -> Controller -> View -> Dispatcher Servlet -> Respons..

[Spring] @RequestMapping 속성

value (URL 값으로 매핑 되는 조건을 처리) method ( HTTP Request 메소드 값을 매핑조건으로 부여 ) - GET ,POST, PUT ,DELETE 등.. params (같은 URL 이여도 , 요청 파라미터를 구분할수 있다.) 프론트단에서 JSON 로 데이터를 주고 받을땐 보통 두개를 썼다. produces (보통 이렇게 쓰인다, produces = MediaType.APPLICATION_JSON_UTF8_VALUE ) - 반환 HTTP 응답 헤더로 "Content-Type: application/json;charset=UTF-8"을 반환한다. 생략할 경우 메써드 리턴 타입에 따라 Content-Type을 자동으로 판단하여 반환한다. consumes (보통 이렇게 쓰인다, consu..