web.xml / servlet-context / root-context 셋팅
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가 무조권 켜져 있어야한다.