spring 리마인드

web.xml / servlet-context / root-context 셋팅

LRWoo 2023. 9. 7. 17:47
728x90
반응형

 

deploy.. 를 더블클릭해서 web.xml을 열어서 web-app버전을 바꿔준다. 

 

필터를 추가시켜준다.

	<!-- encodingFilter -->
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>UTF-8</param-value>
		</init-param>
	</filter>
	
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

 

만약 spring Elements 꺽새가 열리지 않는다면 

remove Spring Project Nature로  Spring Elements를 불러오는 설정을 초기화시켜주고 

 

 

그후 프로젝트 우클릭 해서 Add Spring Projects nature를 클릭하면 

 

🍃Spring Elements의 Beans에 각각의 xml 파일이 노출된 것을 확인할 수 있다. 

 

🍃Spring Elements 디렉토리가 안보인다고 해도  프로그램을 실행하는데 있어서 전혀 문제는 없지만
각각의 xml 파일을 확인하려면 해당 경로로 일일이 찾아가서 확인해야하기때문에 
가능하면 상단에 노출돼있는것이 좋다. 

 

 

 

📌

servlet-context.xml
spring MVC 활성화 , 정적자원에 대한 경로 맵핑, 컨트롤러가 반환하는 문자열 형태의 viewName을
가져와서 forward 하는 규칙설정,  어노테이션에 명시된 클래스를 일괄적으로 spring bean으 등록시킴

 

 

servlet-context.xml에 이속성이 없다면 spring MVC에서 사용하는 어노테이션을 쓸 수 없고

프로젝트는 단순한 maven project가 된다. 

	<!-- Spring MVC 에서 사용하는  어노테이션을 활성화한다. -->
	<annotation-driven />

 

	<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
	<!-- 정적 자원에 대한 요청을 처리하기 위한 경로 맵핑  -->
	<resources mapping="/resources/**" location="/resources/" />
여기서 정적자원으로는 대표적으로 CSS/ JavaScript/ Image 등이 있다.

 

HomeController에서  requestMapping에 대한 주소를 문자열로 반환할 경로를 지정해준다. 

<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<!-- 컨트롤러가 반환하는 값에서 문자열 형태의 viewName을 가져와서 , 접두사/접미사 처리 이후 forward하는 규칙 설정  -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <beans:property name="prefix" value="/WEB-INF/views/" />
    <beans:property name="suffix" value=".jsp" />
</beans:bean>

 

<!-- 개별 클래스를 bean 태그로 등록하는 대신, 특정 패키지 내부의 특정 어노테이션이 명시된 클래스를
	일괄적으로 스캔하여 한번에 스프링 빈으로 등록한다
    @Controller, @Service, @Repository, @Component, @ControllerAdvice, @RestController
    자동으로 생성되는 spring bean의 id는 클래스 이름의 첫글자만 소문자로 변환하여 사용한다. 
    public class HomeController -> <bean id="homeController" class="..." />
 -->
<context:component-scan base-package="com.itbank.controller" />

 

프로젝트를 생성하면 componect-scan의 base-package가 com.itbank.day01로 초기설정이 되어있다.

 

 

 

top level package이름을 controller로 변경해준다.

컴포넌트 스캔의 base-package 이름이 변경됐음을 확인할 수 있다. 

 

 

📌 root-context  : 웹 컴포넌트를 등록하는데 쓴다. 

Namespaces탭을 열어서 context와 mybatis-spring을 체크해준다. 

저장후 source탭을 눌러서 돌아오면  context, mybatis-spring 코드가 추가된것을 확인할 수 있다. 

 

 

root-context에 bean을 추가해준다. 

 

1️⃣ 접속정보를 담아준후

	<bean id="hikariConfig" class="com.zaxxer.hikari.HikariConfig">
		<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
		<property name="jdbcUrl" value="jdbc:oracle:thin:@192.168.1.100:1521:xe" />
		<property name="username" value="c##itbank" />
		<property name="password" value="123456" />
	</bean>

 

2️⃣ datasource를 생성하고 

	<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource">
		<constructor-arg ref="hikariConfig" />
	</bean>

3️⃣ sqlSessionFactory에 넣어주면 spring이 연결해준다.

	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
			<property name="dataSource" ref="dataSource" />
	</bean>

 

4️⃣ 그 후 sqlSessionFactory에 코드를 넣어야하기때문에 sqlSessionTemplate까지 만들어준다. 

	<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
		<constructor-arg ref="sqlSessionFactory" />
	</bean>

 

5️⃣ 지정한 패키지 내부의 interface를 찾아서 실제 sql을 수행할 수 있는 프록시(proxy, 대리자)
객체를 생성한 후 , 스프링 빈으로 등록하는 과정을 수행하게 한다.

	<mybatis-spring:scan base-package="com.itbank.repository"/>

 

저장하고 업데이트 해준후 HomeController.java로 가자

 

@Controller
-요청을 전달받아서 응답을 만들어낼 수 있는 컨트롤러 클래스 
- componet - scan에 의해서 스프링 빈으로 등록되는 클래스 

 

@Controller		//요청을 전달받아서 응답을 만들어 낼 수 있는 컨트롤러 클래스
				//component - scan에 의해서 스프링 빈으로 등록되는 클래스
public class HomeController {
	
	// jsp model-2와 달리, 상속을 사용하지 않기 때문에 함수 작성 자유도가 높다.
	// 주소와 함수를 한번에 등록하기 때문에 하나의 컨트롤러에서 여러 함수를 작성할 수 있다. 
	
	@RequestMapping("/")	//주소 등록, 메서드 구분 없음 
	public String home() {	//request를 꼭 받아야할 필요가 없다 
		return "home";		//반환하는 문자열은 prefix + viewName + suffix 형식으로 포워딩된다.
	}
	
}

 

기존에 있던 home.jsp를 지우고 새로만들어준다.

 

프로젝트를 클릭하고 서버를 실행하면 home.jsp가 정상적으로 뜬다. 

이때 oracle dataBase가 무조권 켜져 있어야한다.  

728x90
반응형