티스토리 뷰
Spring
context 설정
<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
- web.xml 의 <error-page> 와 비슷하게 예외를 처리할 뷰를 지정할 수 있게 해준다.
<context:component-scan base-package="test.mate.*, kr.co.care.*">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
</context:component-scan>
<aop:aspectj-autoproxy proxy-target-class="true"/>
- aop 이용하여 @AspectJ 어노테이션를 사용 ex) 로깅처리에 사용
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
- @RequestMapping 어노테이션을 이용해 url과 controller를 매핑
<mvc:annotation-driven />
- 기본적으로 MVC에서 설정해야하는 값들을 자동적으로 추가 해줌
- MVC에서 사용되는 Annotation 사용을 설정 방식을 사용하겠다는 의미
- MVC 컴포넌트들을 디폴트 설정을 통해 활성화한다.
- 만약 위를 사용하지 않으면 HandlerMapping, HandlerAdapter를 Bean에 추가적으로 세팅이 필요하다
- 자동으로 org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping
org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter이 구성됨
<context:component-scan>
- 특정 패키지 내의 클래스를 스캔하고 Annotation(@Component @Controller @Service @Repository)을 확인한 후 Bean 인스턴스로 생성
- 이를 이용하면 @Autowired와 @Qualifier Annotation을 인식
- Service 혹은 DAO에서 사용
<mvc:default-servlet-handler />
- DispatcherSerlvet이 처리하지 못한 요청을 DefaultSerlvet에게 넘겨주는 역할을 하는 핸들러
- *.css와 같은 컨트롤러에 매핑되어 있지 않은 URL 요청은 최종적으로 Default Servlet에 전달되어 처리하는 역할
- DispatcherServlet의 매핑이 "/"로 지정하면 JSP를 제외한 모든 요청이 DispatcherServlet으로 가기 때문에,
WAS가 제공하는 Default Servlet이 *.html, *.css같은 요청을 처리할 수 없게 됨.
Default ServletHandler는 이런 요청들을 Default Servlet에게 전달해주는 Handler이다.
<mvc:resources mapping= "/resources/**" location= "/resources/" />
- 정적 자원 매핑
- servlet-context.xml 에 위와 같은 설정을 해줌으로써 /resources/** 로 들어오는 모든 요청은
- location에 대한 요청이 들어오면 WAS의 DefaultServlet에 위임하는 설정
- 정적파일은 패스 자체로 MVC영향에 따라 접근이 불가능하지만 해당 세팅으로 WAS에 위임 DefaultServlet에 위임하여 접근가능하도록 함
${webapp}/resources/ 로 모두 매핑시켜버리겠다는 설정이다.
이로써 정적리소스는 문제 없이 사용이 가능하게 된다.
이 방법 말고도 아예 defaultServlet 자체를 선언하여 /resources/* 라는 url을 defaultServlet 이 처리하도록 명시할 수도 있다.
<bean id="objectMapper" class="com.fasterxml.jackson.databind.ObjectMapper"/>
- Java Object를 JSON으로 변환하거나 JSON을 Java Object로 변환하는데 사용할 수 있는 Java 라이브러리
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping" p:order="0"/>
- Controller와 url을 매핑시켜주는 HandlerMapping의 구현클래스
- @RequestMapping 어노테이션 매핑 하도록 함
- @Controller 애노테이션이 적용된 객체의 @RequestMapping값을 이용해서 웹 브라우저의 요청을 처리할 컨트롤러 빈을 찾음
- <mvc:annotation-driven /> 사용안하면 위를 세팅해야함
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
- 컨트롤러의 메소드를 알맞게 실행하고, 그 결과를 ModelAndView 객체로 변환해서 DispatcherServlet에 리턴
- <mvc:annotation-driven /> 사용안하면 위를 세팅해야함
<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter" />
- Controller에서 함수가 @ResponseBody를 사용하여 byte[]를 리턴하면 Content-Type을 application/octet-stream으로 설정하여 Response에 byte[]를 보냄
- 파일 다운로드 File 객체 사용할때 사용
- 지원하는 오브젝트 타입은 byte[]이고, 미디어타입은 모든 것을 다 지원한다.
즉 파라미터에 @RequestBody byte[] param과 같이 작성하면 모든 요청을 다 byte배열로 받을 수 있다는 말이다.
그리고 리턴타입을 byte[]로 했을 경우 Content-Type이 applcation/octet-stream으로 설정되어 전달된다.
<bean class="org.springframework.http.converter.StringHttpMessageConverter" >
- 지원하는 오브젝트 타입은 String이고, 미디어타입은 모든 것을 다 지원한다.
파라미터에 사용할 경우 HTTP 본문을 그대로 String으로 가져올 수 있게되고,
리턴에 사용할 경우 단순 문자열을 그대로 전달해줄 수 있다.
Content-Type은 text/plain으로 전달된다.
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
- ObjectMapper 에 의해서 Javs 객체를 JSON 객체로 바꾸어 줍니다. 이 때 ObjectMapper 에는 SimpleModule을 등록해주어
어떤 식으로 JAVA객체를 JSON객체로 serialize 할지 또는 JSON객체를 JAVA 객체로 deserialize 할지를 등록 해 줄 수 있습니다.
<property name="cacheSeconds" value="0" />
- 캐쉬 방지 세팅
- AbstractController 상속 해당
<property name="synchronizeOnSession" value="true" />
- Http Session 을 동기화할 필요가 있을때 사용한다.
- 사용자가 같은 버튼을 여러번 클릭하는 경우와 같이, 여러 thread가 동시에 Session에 접근할 수도 있기 때문에
반드시 AnnotationMethodHandlerAdapter의 synchronizeOnSession 속성을 true로 설정
- AbstractController 상속 해당
<property name="customArgumentResolvers">
- 커스텀 ArgumentResolver 등록방법
- Method의 Argument를 자동으로 정의할 수 있도록 만들어 줄수있도록 하는 세팅
- 스프링 사용시 컨트롤러에 들어오는 파라미터나 리턴타입을 나한테 맞게 가공해서 사용하고 싶을 때 사용
<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
- View 를 찾기위해 요청 URL의 확장자와 AcceptHeader를 사용하는 ViewResolver
- 자체적으로 View 를 찾지는 않으며 viewResolvers 에 설정된 ViewResolver <property name="viewResolvers">를 사용하여 View 를 찾음
- 하나의 URI를 통해 다양한 contentType 으로 응답을 할 수 있도록 도와줌
- 하나의 RequestMapping 으로 JSP, JSON, JSONP 처리하기
- http://127.0.0.1:8080/test/test jsp 로 랜더링
http://127.0.0.1:8080/test/test.json json 형식으로 랜더링
<property name="contentNegotiationManager">
-
<bean class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
-
<property name="mediaTypes">
mediaType 은 URL 의 확장자와 contentType 을 연결해주는 일종의 맵입니다.
http://localhost/user.html 이 들어왔을 경우에는 URL 의 확장자인 html 에 연결된 text/html (ContentType) 을 처리하는 View 를 찾게되고
http://localhost/user.json 이 요청되었을 경우에는 위와 마찬가지로 URL의 확장자인 json 과 연결된 application/json (ContentType) 을 처리하는 View 를 찾습니다.
<property name="viewResolvers">
- ContentNegotiatingViewResolver 가 View 를 찾기위해 사용하는 ViewResolver 들
<property name="defaultViews">
- viewResolvers 에 의해 view 를 찾지 못했을 경우에 사용되는 view 입니다.
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />
- 뷰 이름과 동일한 이름을 갖는 빈 책체를 View 객체로 사용
- 주로 커스텀 View 클래스를 뷰로 사용해야 하는 경우에 사용
- 파일다운로드 할때 사용?
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- Jsp나 Html 파일과 같이 웹 어플리케이션의 내부 자원을 이용하여 뷰를 생성하는 AbstractUrlBasedView 타입의 뷰 객체를 리턴
- 기본적으로 사용하는 View 클래스임
- prefix, suffix 프로퍼티를 사용
<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver">
- ViewResolver의 구현체로 특별한 맵핑 정보 없이 view 이름을 URL로 사용
- View 이름과 실제 view 자원과의 이름이 같을 때 사용할 수 있다.
<property name="viewClass" value="org.springframework.web.servlet.view.tiles3.TilesView" />
<bean id="tilesConfigurer" class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
- Tiles 템플릿으로 정의된 뷰를 찾음
- <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 정의후 사용해야 함
<bean class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
- View Resolver 에서 View 이름을 전달하면서 데이터도 같이 전달하게 된다.
이때 ajax를 사용 중이라면 값을 전달할 때 마다 일일이 json으로 바꿔야 하는데 이를 자동적으로 바꿔줌
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
- 공통 메세지 처리 프로퍼티
<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
- request가 가지고 있는 session으로 부터 locale정보를 가져온다. session에 있는 값을 가져오되,
만약 값이 없다면 defaultLocale로 설정을 지정할 수 있다. 아마 맨처음 접근시에는 session값이 없으므로 defaultLocale를 읽게 된다.
위에서는 SessionLocaleResolver를 정의하고 defaultLocale를 ko로 했으므로 브라우저에 세팅된 언어보다 위에 설정된 언어로 표시하게 된다.
- SessionLocaleResolver나 CookieLocaleResolver에 defaultLocale이 없다면 브라우저의 언어설정을 따르게 된다.
<mvc:interceptors>
- Controller 실행 전이나 후에 공통적인 작업을 특정 Controller에만 처리를 적용할 수 있기는 하지만 설정이 조건식에 의한
코딩방식으로 해결해야 하는 단점이 있다. 이런 문제를 해결할 수 있는 방법이 MVC Interceptor 설정이다.
<!-- mvc 인터셉터 정의 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 모든 URL 요청 mvc 인터셉터를 거치게 하도록 정의 -->
<mvc:mapping path="/**/*"/>
<!--mvc 인터셉터를 거치지 않고 예외 시킬 URL 요청들 정의 -->
<mvc:exclude-mapping path="/list.do"/>
<mvc:exclude-mapping path="/loginForm.do"/>
<mvc:exclude-mapping path="/login.do"/>
<mvc:exclude-mapping path="/joinForm.do"/>
<mvc:exclude-mapping path="/join.do"/>
<!--mvc 인터셉터 컨트롤러 빈객체 정의 -->
<bean class="controller.LoginCheckInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
- Connection의 트랜잭션 API를 이용해서 트랜잭션을 관리해주는 트랜잭션 매니저다.
- 스프링 방식으로 트랜젝션 제어할수 있게 해줌
이 트랜잭션 매니저를 사용하려면 트랜잭션을 적용할 DataSource 가 스프링의 빈으로 등록돼야 한다.
JDBC API를 이용해서 트랜잭션을 관리하는 데이터 액세스 기술인 JDBC와 iBatis SqlMap 으로 만든 DAO에 적용할 수 있다.
- 빈으로 등록할 때는 다음과 같이 트랜잭션을 적용할 DAO가 사용하는 것과 동일한 DataSource를 빈으로 제공해줘야 한다.
<tx:annotation-driven transaction-manager="txManager"/>
- 명시적 어노테이션 지정 방법 선언적 트랜젝션
- 클래스와 메소드에 @Transactional 애노테이션을 사용할 수 있다.
<property name="dataSource" ref="dataSource"/>
- DataSource Bean을 참조한다.
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
- JNDI 어플리케이션이 다른 어플리케이션을 탐색할때 유용하게 사용된다. 즉 분산된 자원이라고 불린다.
Tomcat와 같은 WAS를 보면 특정 폴더에 필요한 데이터 소스가 있는데 그것을 우리가 유용하게 사용하기 위해 JNDI를 이용해서 가져오는 것이다.
<property name="jndiName" value="java:comp/env/jdbc/test"/>
- Tomcat의 server.xml의 Context 태그안에 추가해준다.
- value="java:/comp/env/jdbc/test" 위의 예제 dataSource.xml에 설정한 이부분과
Tomcat 의 server.xml에 설정한 name="jdbc/test" 이 부분의 끝부분 리소스 이름이며, 사용자 마음대로 지정할 수 있다.
<property name="resourceRef" value="true" />
- true로 설정하면 문자열 Java:comp/env/ 존재하지 않는 경우.
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
- 데이터소스를 매핑하고 mapper 파일을 연결설 수 있도록 설정
- 스프링과 연동 될 수 있도록 함
- 데이터베이스와의 연결과 SQL의 실행에 대한 모든 것을 가진 가장 중요한 객체
- myBatis 는 JdbcTemplate 대신 Connection 객체를 통한 질의를 위해서 SqlSession을 사용한다.
내부적으로 SqlSessionTemplate가 SqlSession을 구현하게 되는데, Thread에서 안전하고 여러개의 Mapper에서 공유할수 있다.
- SQLSession을 통해서 Connection을 생성하거나 원하는 SQL을 전달하고, 결과를 리턴 받는 구조
<property name="configLocation" value="classpath:SqlMapConfig.xml" />
- myBatis의 설정파일의 경로를 지정한다.
<property name="configLocation" value="classpath:SqlMapConfig.xml" />
- Mapper를 스캔하기위한 XML파일경로를 지정한다.
<mybatis:scan base-package="test.mate.**.dao, kr.co.care.**.dao" />
- 대신 클래스패스를 지정해서 마이바티스 스프링 연동모듈의 자동스캔기능을 사용할 수 있다.
- dao에서 매퍼를 스캔할수 있는 기능
- 출처 -
http://clearpal7.blogspot.com/2016/07/mvc.html
https://joont92.github.io/spring/MessageConverter/
https://ismydream.tistory.com/30
https://ismydream.tistory.com/139
https://snoopy81.tistory.com/325
https://isstory83.tistory.com/117
https://www.holaxprogramming.com/2015/10/18/spring-boot-with-mybatis/
'Java & Spring & SpringBoot' 카테고리의 다른 글
스프링부트 개발환경 세팅 및 게시판 예제 (0) | 2020.09.01 |
---|---|
이클립스 사용법 및 tip (0) | 2020.08.31 |
JAVA 배열 split 공백 데이터 유지하기! (0) | 2020.08.11 |
Back Forward Cache(bfcache) 문제 해결 방법 (0) | 2020.07.16 |
jar파일 디컴파일 방법 (0) | 2020.04.14 |
- Total
- Today
- Yesterday
- vscode
- 스쿠터 전국 일주
- 담양 여행
- kendo grid
- 군산 여행
- 전국 일주 여행
- 리니지m
- 군산 가볼만한곳
- 송내역 룸카페
- 오라클 DB 링크
- 고흥 여행
- 송내역 카페
- 윈드스크린
- 스쿠터 여행
- 남자 혼자 국내 여행
- 은파호수공원
- Docker
- 초원사진관
- 보성 여행
- 남자 혼자 여행
- 영광 여행
- 인터바이크
- 제주도 스쿠터 여행
- 베스파LX
- 돌장갑
- 송내 룸카페
- 군산 게스트하우스
- 나래바이크
- 국제반점
- 송내 카페
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |