-
Spring, Tomcat Servers의xml파일정리JAVA 2021. 7. 26. 15:20
Spring
Spring MVC ribrary = Spring 5 = > Maven + Spring ribrary
위가 Spring Library for Eclipse 다운받는 주소.
https://mvnrepository.com/artifact/org.springframework/spring-webmvc/5.1.3.RELEASE
Spring Library 를 maven project 의 pom.xml 에 기입해 다운받을 수 있는 주소.
웹일 경우는 MVC 모델인 Spring MVC 를 사용한다. 그래서 maven 에 넣을 시 spring-webmvc 을 다운받도록 해야한다
( 복사시 유의,MVC 가 아닌 다른 모델일 수 있다. )
>> pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.stone</groupId> <artifactId>spring-mvc</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>3.0.1</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.0.2.RELEASE</version> </dependency> <!-- db driver --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.24</version> </dependency> <!-- db connectionpool --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-dbcp2</artifactId> <version>2.7.0</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> <version>2.8.0</version> </dependency> <dependency> <groupId>commons-logging</groupId> <artifactId>commons-logging</artifactId> <version>1.2</version> </dependency> <!-- form에서 submit된 file읽기(비디오,사진등) --> <dependency> <groupId>servlets.com</groupId> <artifactId>cos</artifactId> <version>05Nov2002</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <version>3.7.0</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>utf-8</encoding> </configuration> </plugin> </plugins> </build> </project>
스프링부트? - 스프링을 쉽게 사용할 수 있도록 필요한 설정을 대부분 미리 세팅 해놓았다는 뜻.
당연히 스프링보다 사용하기 쉽다.스프링의 필요한 설정? - 뷰의 위치를 설정하기
1) 어떤 폴더에 있는지 메서드로 설정.- 객체 준비하기 ( 2번 방법을 사용할 거다. )
1) 필요할 때마다 객체를 생성해 쓰기
2) 컨테이너에 객체를 생성해 필요할 때마다 꺼내쓰기 ( 컨테이너 = 톰캣서버 )
즉, 서버실행시 그냥 만들어져 있어 다시 만들 필요가 없음 = 빈 등록하기- FrontControl 설정
요청시 서블릿을 매핑할 컨트롤컨테이너의 객체 ( = bean ) 집어넣기 컨테이너는 객체 냉장고다. 집어넣고 필요할 때마다 꺼내쓰는 것이다. 집어넣는 것 = 빈을 등록한다. 집어넣을 수 있는 대상 : DAO, control (상태가 없는( = 멤버변수가) 없는 대상)
집어넣을 수 없는 대상 : VO, DTO
MAVEN - Spring 설정하기
1. MAVEN 프로젝트의 JRE 버전 확인
MAVEN 프로젝트 생성 -> 오른쪽마우스 -> Properties -> Project Facets -> JAVA 1.8( 현재 쓰는 JRE 버전으로 ) 되있나 확인
안되있으면 옆에 드롭다운 눌러서 수정2. MAVEN 프로젝트의 웹모듈( = EJB) 버전 확인
MAVEN 프로젝트 생성 -> 오른쪽마우스 -> Properties -> Project Facets -> EJB Module 3버전 이상인지 확인
웹 모듈 3.0 이상부터 어노테이션 설정이 가능해 매핑이 가능하기 때문이다.
안그러면 web.xml 에 가서 serlvet, servlet-mapping 으로 코드를 일일이 짜야한다.
웹 모듈 => 톰캣이 이해할 수 있는 버전. 즉 톰캣올릴시 웹 모듈도 올릴 수 있다.web.xml 설정하기 - 디폴트설정
>> web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"> <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextClass</param-name> <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value> </init-param> <init-param> <param-name>contextConfigLocation</param-name> <param-value> config.MvcConfig config.BeanConfig </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
1. MAVEN 에 WEB-INF 폴더와 그 안에 담겨 있을 web.xml 이 부재중이다.
webapp 안에 폴더를 생성하고 web.xml 도 만들자.
이 때 맨윗 설정을 복사해오고 web-ap_ 3_1.xsd 와 version="3.1" 로 되있는지 스크롤 옆으로 돌려가며 확인하자.
(웹모듈 버전과 일치해야한다.)2. Tomcat 의 Servlet 이 아닌 Spring 의 Servlet 으로 바꿔야 한다.
<Servlet> 과 <Servlet-mapping> 으로 톰캣실행시 springframework 라이브러리의 DispatcherServlet 이 작동하도록 매핑한다.
Spring library 사용시. library 들은 '.class' 로 즉 '.java' 가 컴파일되어 텍스트 파일이 아니다. 그래서 web.xml 에서 작업해야 한다.
앞으로 주소창에 '프로젝트/요청명' 을 쓰면 매핑되어 Spring 의 DispatcherServlet 이 돌아간다.
(요청명이 "/" 로 시작할 때 spring servlet이 작동하니 모든 요청명들은 spring으로 돌아가게 되있다.)3. DispatcherSerlvet 이 돌아갈 때 초기설정값 <init-param> 으로 설정된
contextClass 이름의 그 밑의 value 와 contextConfigLocation 이름의 그 밑의 value 의 클래스들이 메모리에 올라간다.
contextConfigLocation 이름의 value 클래스는 직접 src/main/java 패키지 안에 config 패키지를 만들고 MvcConfig, BeanConfig
클래스를 만든다.
xml 파일로 만들어서 value 에 넣을 수도 있는데(xml작성방법은 인터넷에서 참고) 그러면 실제폴더들 이름을 나열하고
클래스는 패키지/클래스명 식으로 쓰면 된다.3-1. MvcConfig 클래스에 MVC 사용, 뷰의 위치, 빈 설정을 한다.
위에 적어놓은 Spring에 필요한 설정 이다!3-2. BeanConfig 클래스 , 사실 위에서 view, bean 까지 모두 설정했으니 얘 없어도 된다.
MvcConfig 설정
>> MvcConfig.java
package config; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.ViewResolverRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration @EnableWebMvc @ComponentScan(basePackages = "com.stone") public class MvcConfig implements WebMvcConfigurer{ @Override public void configureViewResolvers(ViewResolverRegistry registry) { registry.jsp("/WEB-INF/views/",".jsp"); } // 이미지나 다른 파일들 @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { // addResourceHandler = 모든 요청명 풀네임, addResourceLocations = 요청명 중 폴더명 registry.addResourceHandler("/img/*.png").addResourceLocations("/img/"); registry.addResourceHandler("/img/*.jpg").addResourceLocations("/img/"); registry.addResourceHandler("/js/*.js").addResourceLocations("/js/"); } }
@EnableWebMvc = 모델,뷰,컨트롤 구조 사용가능하게함 @Configuration = 1개 이상 Bean을 등록하고 있음을 명시하는 어노테이션
web.xml 에 등록한 <init-param> 의 <param-value> 클래스이므로 이 앱의 servlet에 초깃값으로 Bean 들이 다 올라간다.WebMvcConfigurer 구현하여 configureViewResolvers 메서드를 사용한다.
매개변수인 ViewResolverRegistry 의 jsp() 메서드안에 ( "view의 폴더명",".jsp" ) 를 기입하여 뷰위치 설정끝@ComponentScan(basePackages = "com.stone") = stone 패키지안의(그안의패키지들도) 모든 클래스들을 대상으로 Bean 설정을 해준다 ( 가장 간단한 방법 )
그러면 등록할 클래스에 @Controller 선언시 알아서 Bean 으로 처리해준다.이미지 같은 경우는
<img src="img/contents1.png"/> //view-source:http://localhost:8090/spring-mvc/img/contents1.png
저런식으로 요청하기 때문에 Bean 도 아닌 image나 js 같은 java 파일외에 것들(=resource) 은 오류가 난다.
이를 MvcConfig 에 addResourceHandlers 메서드로 추가하면 된다.
BeanConfig 설정 ( 추후에 필요하면 이곳에서 @Bean 설정할 예정)
package config; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import com.stone.springmvc2.ui.AnyControl; @Configuration public class BeanConfig { }
Servers 의 xml 에서 설정한 것들
1. context.xml = connection pool 설정하기 2. server.xml = 각각의 app(프로젝트들) 의 매핑이름 변경 가능 3. web.xml = 프로젝트에 별도로 있는 web.xml 에 따로 설정하지 않으면 기본적으로 이 톰캣의 Server 안에 있는 web.xml 을 읽고 작동한다. 'JAVA' 카테고리의 다른 글
board,member(spring.ver1) (0) 2021.07.26 Spring:Mapping,Repository,Autowired(DI),multipartFile (0) 2021.07.26 UML: ClassDiagram,SequenceDiagram, Servlet:Filter (0) 2021.07.26 로그인아웃, session (0) 2021.07.26 redirect, forward,spring 서두 (0) 2021.07.26