2020-12-21 TIL
Spring 설정
- pms 아래에 .config를 만든다.
- web.xml의 디스패처 서블릿 부분을 변경한다.
- App2WebApplicationInitializer와 앱2컨피그를 복사해와서 cofig에 붙여넣는다.
- 리네임
- 소스13 rootConfig를 config에 붙여넣기 <컨텍스트로더리스너가 사용할 설정파일
- 패키지명, 밸류, 패턴 변경
- appwebapplication으로 이동해서
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class AppWebApplicationInitializer
extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[] {RootConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class<?>[] {AppWebConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[] {"/app/*"};
}
@Override
protected String getServletName() {
return "app";
}
}
- appwebconfig로 이동
package com.eomcs.pms.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import org.springframework.web.util.UrlPathHelper;
@ComponentScan("com.eomcs.pms.web")
// => 지정된 패키지를 뒤져서 @Component, @Controller 등 붙은 클래스에 대해 인스턴스를 생성한다.
//
@EnableWebMvc
// => Web MVC 관련 객체를 등록하고 설정한다.
// => WebMvcConfigurer 구현체를 찾아 메서드를 호출한다.
//
public class AppWebConfig implements WebMvcConfigurer {
// DispatcherServlet의 기본 ViewResolver를 교체하기
// 1) XML 설정
// <bean id="viewResolver"
// class="org.springframework.web.servlet.view.InternalResourceViewResolver">
// <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
// <property name="prefix" value="/WEB-INF/jsp/"/>
// <property name="suffix" value=".jsp"/>
// </bean>
//
// 2) Java Config 설정
@Bean
public ViewResolver viewResolver() {
return new InternalResourceViewResolver("/WEB-INF/jsp/", ".jsp");
// => prefix + 페이지컨트롤러 리턴 값 + suffix
// 예) "/WEB-INF/jsp2/" + "board/list" + ".jsp" = /WEB-INF/jsp2/board/list.jsp
}
// @MatrixVariable 애노테이션 처리를 활성화시킨다.
// => 이 작업을 수행하려면 MVC 관련 설정 작업을 수행할 수 있도록
// WebMvcConfigurer 인터페이스를 구현해야 한다.
// => 그리고 다음 메서드를 오버라이딩 하여 기존 설정을 변경한다.
//
// DispatcherServlet 이 MVC 관련 설정을 처리하는 과정
// => WebMVC 설정을 활성화시켰는지 검사한다.
// => 활성화시켰으면, IoC 컨테이너가 관리하는 객체 중에서
// WebMvcConfigurer 구현체를 찾는다.
// 관리하는 객체?
// - IoC 컨테이너에 들어 있는 객체
// - @Component, @Service, @Controller, @RestController, @Repository
// 애노테이션이 붙은 클래스들은 IoC 컨테이너가 자동으로 객체를 생성하여 보관한다.
// - 하지만 WebMvcConfigurer 구현체는 Java Config 클래스이기 때문에
// 일반 객체로 표시하지 말고, @Configuration 을 붙여
// Java Config 클래스임을 명확히 하는 것이 유지보수에 좋다.
// 물론, @Configuration 가 붙은 클래스도 객체가 생성되어 IoC 컨테이너에 보관되는 것은 같다.
//
// => 객체를 찾았으면, WebMvcConfigurer 규칙에 따라 메서드를 호출하여
// 설정을 추가하거나 기존 설정을 변경한다.
// => WebMVC 설정을 활성화시키지 않으면,
// WebMvcConfigurer 구현체가 있다 하더라도 무시한다.
// => WebMVC 설정을 활성화시키는 방법
// 1) XML 설정
// <mvc:annotation-driven/>
// 2) Java Config 설정
// @EnableWebMvc 애노테이션 표시
@Override
public void configurePathMatch(PathMatchConfigurer configurer) {
UrlPathHelper helper = new UrlPathHelper();
helper.setRemoveSemicolonContent(false);
// DispatcherServlet의 MVC Path 관련 설정을 변경한다.
configurer.setUrlPathHelper(helper);
}
// 이 설정을 사용하는 프론트 컨트롤러에 적용할 인터셉터 설정하기
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 인터셉터를 레지스트리에 등록한다.
}
}
- 마이바티스 설정
- 리소스.pms 밑의 conf를 config로 바꿔준다.
package com.eomcs.pms.config;
import javax.sql.DataSource;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.PropertySource;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.transaction.PlatformTransactionManager;
@PropertySource("classpath:com/eomcs/pms/config/jdbc.properties")
// Mybatis DAO 프록시를 자동생성할 인터페이스를 지정하기
@MapperScan("com.eomcs.pms.dao")
public class MybatisConfig {
@Bean
public DataSource dataSource(
@Value("${jdbc.driver}") String jdbcDriver,
@Value("${jdbc.url}") String jdbcUrl,
@Value("${jdbc.username}") String jdbcUsername,
@Value("${jdbc.password}") String jdbcPassword) {
DriverManagerDataSource ds = new DriverManagerDataSource();
ds.setDriverClassName(jdbcDriver);
ds.setUrl(jdbcUrl);
ds.setUsername(jdbcUsername);
ds.setPassword(jdbcPassword);
return ds;
}
@Bean
public PlatformTransactionManager transactionManager(
DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
@Bean
public SqlSessionFactory sqlSessionFactory(
DataSource dataSource, // DB 커넥션풀
ApplicationContext appCtx // Spring IoC 컨테이너
) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSource);
sqlSessionFactoryBean.setTypeAliasesPackage("com.eomcs.pms.domain");
sqlSessionFactoryBean.setMapperLocations(
appCtx.getResources("classpath:com/eomcs/pms/mapper/*Mapper.xml"));
return sqlSessionFactoryBean.getObject();
}
}
- appwebapplication
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[] {RootConfig.class,MybatisConfig.class};
}
- 앱웹컨피그 멀티파트 처리 - appwebconfig에 붙여넣는다.
- 스프링에 있는 방법
@Bean
public MultipartResolver multipartResolver() {
// 스프링 WebMVC에서 파일 업로드를 처리하고 싶다면,
// 이 메서드를 통해 MultipartResolver 구현체를 등록해야 한다.
// 그래야 request handler는 MultipartFile 객체를 받을 수 있다.
//
CommonsMultipartResolver mr = new CommonsMultipartResolver();
mr.setMaxUploadSize(10000000);
mr.setMaxInMemorySize(2000000);
mr.setMaxUploadSizePerFile(5000000);
return mr;
}
-
웹.xml
- 서블릿의 매핑정보를 날린다.
<servlet>
<servlet-name>app</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/app-servlet.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<multipart-config>
<max-file-size>10000000</max-file-size>
</multipart-config>
</servlet>
<servlet-mapping>
<servlet-name>app</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
위의 코드 삭제
- 필터 정보도 날린다.
- 앱웹어플리케이션
@Override
protected Filter[] getServletFilters() {
return new Filter[] {
new CharacterEncodingFilter(“UTF-8”)
};
추가
- 서비스
- 서브패키지 만듬
- .impl
- 디폴트 서비스 옮김
- 글로벌 컨트롤 가져옴
- commensfileupload, 로그파일 빌드.gradle에 의존성 추가