root-context
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- Root Context: defines shared resources visible to all other web components -->
<!--
* root-context.xml 문서는 서버 구동시 web.xml을 거쳐서 바로 로딩 되는 문서 (pre-loading 되는 설정 파일)
따라서 서버 스타트와 동시에 바로 셋팅(빈으로 등록) 해야되는 내용들을 작성하는 설정파일
주로 DB연결 설정, 트랜잭션 처리, AOP관련, 내 외부 모듈연동 등등
-->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:xe"/>
<property name="username" value="spring"/>
<property name="password" value="spring"/>
</bean>
<!--
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName("oracle.jdbc.driver.OracleDriver");
dataSource.setUrl("jdbc:oracle:thin:@localhost:1521:xe");
dataSource.setUsername("spring");
dataSource.setPassword("spring");
-->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:mybatis-config.xml"/>
<property name="dataSource" ref="dataSource"/>
</bean>
<!--
SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
sqlSessionFactory.setConfigLocation("classpath:mybatis-config.xml");
sqlSessionFactory.setDataSource(dataSource);
-->
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg ref="sqlSessionFactory" />
</bean>
<!--
SqlSessionTemplate sqlSession = new SqlSessionTemplate(sqlSessionFactory);
-->
</beans>
XML
복사
root-context.xml
bean
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<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>
<context:component-scan base-package="com.kh.spring" />
<!--
* 사용자가 어떤 url로 서비스 요청시 이 문서가 읽혀진다고 보면됨!
HandlerMapping을 통해서 어떤 url로 요청시 어떤 Controller를 실행시킬건지 알아내야됨 => 해당 Controller가 실행되도록
1. 그때마다 실행할 Controller 클래스들이 빈으로 등록되어있어야됨
2. 어떤 url로 요청시 어떤 Controller를 구동시킬건지 매핑시키는 HandlerMapping 관련한 클래스도 빈으로 등록되어있어야됨
-->
<!-- xml방식
<beans:bean id="loginController" class="com.kh.spring.member.controller.loginController"/>
<beans:bean id="logoutController" class="com.kh.spring.member.controller.logoutController"/>
<beans:bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<beans:property name="mapping">
<beans:props>
<beans:prop key="login.me">loginController</beans:prop>
<beans:prop key="logout.me">logoutController</beans:prop>
</beans:props>
</beans:property>
</beans:bean>
-->
<!--
위의 방식이 xml방식
=> 각 url 요청때마다 실행시킬 controller클래스들을 따로따로 만들어야됨
> 장점 : 등록된 bean들을 한 xml문서내에서 한 눈에 볼 수 있어서 관리의 편의성은 높을 수 있음
> 단점 : 하지만 bean 개수가 많아지면 오히려 관리하기 어려움 / 여러 개발자가 같은 xml설정 파일을 수정하면서 충돌이 발생되기 쉽다.
-->
XML
복사
servlet-context.xml
Controller단(서비스단,vo객체클래스 등 Mapping하는거 잊지말기!!!)
// * 파라미터(요청시 전달값)을 받는 방법 (요청시 전달되는 값들 처리방법)
/*
* 1. HttpServletRequest를 통해 전달받기 (기존의 jsp/servlet 때의 방식)
* 해당 메소드의 매개변수로 HttpServletRequest를 추가해두면
* 스프링컨테이너가 해당 메소드 호출시(실행시) 자동으로 해당 객체를 인자로 주입해 줌
*/
@RequestMapping("login.me")
public String loginMember(HttpServletRequest request) {
String userId = request.getParameter("id")
String userPwd = request.getParameter("pwd");
System.out.println("ID : " + userId);
System.out.println("PWD : " + userPwd);
return "main"; // main.jsp 응답
}
Java
복사
/*
* 2. @RequestParam 어노테이션 방식
* 스프링에서 조금 더 간단하게 파라미터를 받아올 수 있는 방법 제공
* request.getParameter("키"):"밸류"의 역할을 대신해주는 어노테이션
*
* - 기본적으로 자주 안쓰이지만 default값을 세팅해 놓을 때 쓰임
*/
@RequestMapping("login.me")
public String loginMember(@RequestParam(value="id", defaultValue="aaa") String userId,
@RequestParam(value="pwd") String userPwd) {
System.out.println("ID : " + userId);
System.out.println("PWD : " + userPwd);
return "main";
}
Java
복사
/*
* 3. @RequestParam 어노테이션을 생략하는 방법
* 위의 어노테이션을 생략해도 파라미터 값을 가져와서 기록할 수 있음
* ** 단, 매개변수명을 name값(키값)과 동일하게 세팅해둬야 자동으로 값이 주입된다.
*/
@RequestMapping("login.me")
public String loginMember(String userId, String userPwd) {
System.out.println("ID : " + userId);
System.out.println("PWD : " + userPwd);
Member m = new Member();
m.setUserId(userId);
m.setUserPwd(userPwd);
return "main";
}
Java
복사
/*
* 4. 커맨드 객체 방식
* 매개변수로 요청시 전달값들을 담고자 하는 vo클래스 타입을 셋팅한 후
* 요청시 전달값의 키값(name값)을 vo클래스에 담고자하는 필드명으로 작성
*
* 스프링컨테이너가 해당 객체를 기본생성자로 생성 후 setter메소드 찾아서
* 요청시 전달값을 해당 필드에 담아줌
*
* *** 반드시 name 속성값과 담고자하는 필드명이 동일해야함!!
*/
@RequestMapping("login.me")
public String loginMember(Member m) {
Member loginUser = mService.loginMember(m);
if(loginUser == null) { // 로그인 실패 => 에러페이지
System.out.println("로그인 실패");
}else { // 로그인 성공 => 메인페이지
System.out.println("로그인 성공");
}
return "main"; // main.jsp 응답
}
Java
복사
// * 요청 처리 후 응답페이지로 포워딩 또는 url재요청, 응답데이터 담는 방법
/*
* 1. Model객체를 사용하는 방법
* 응답 뷰로 전달하고자 하는 데이터를 맵 형식(key-value)로 담을 수 있음
* scope는 request이다.
* 단, setAttribute가 아닌 addAttribute메소드 이용
*/
@RequestMapping("login.me")
public String loginMember(Member m, Model model, HttpSession session) {
Member loginUser = mService.loginMember(m);
if(loginUser == null) { // 로그인 실패 => 에러페이지
model.addAttribute("errorMsg", "로그인 실패!");
// return "/WEB-INF/views/common/errorPage.jsp";
// servlet-context.xml에 빈 등록되어있음 prefix, suffix
return "common/errorPage";
}else { // 로그인 성공 => 메인페이지
session.setAttribute("loginUser", loginUser);
return "redirect:/"; // redirect : url재요청
}
}
Java
복사
/*
* 2. ModelAndView 객체를 사용하는 방법
* Model은 데이터를 맵형식으로 담을 수 있는 공간이라고 한다면
* View는 응답뷰에 대한 정보를 담을 수 있는 공간
*
* ModelAndView는 두개를 합쳐놓은 객체
*/
@RequestMapping("login.me")
public ModelAndView loginMember(Member m, Model model, HttpSession session, ModelAndView mv) {
Member loginUser = mService.loginMember(m);
if(loginUser == null) { // 로그인 실패 => 에러페이지
mv.addObject("errorMsg", "로그인 실패!");
mv.setViewName("common/errorPage");
}else { // 로그인 성공 => 메인페이지
session.setAttribute("loginUser", loginUser);
mv.setViewName("redirect:/");
}
return mv;
}
Java
복사


