ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Spring, Tomcat Servers의xml파일정리
    JAVA 2021. 7. 26. 15:20

    Spring

    Spring MVC ribrary = Spring 5 = > Maven + Spring ribrary

    https://spring.io/tools

    위가 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

    댓글

Designed by Tistory.