본문 바로가기

Spring

[Spring] XML파일 대신 Java 클래스 파일 @로 변경

728x90
반응형

★이전 포스팅  에서는 DispatcherServlet-servlet.xml 파일에 스프링 관련 설정을 하였는데 

이번 시간에는 Java 클래스 파일에 @사용하여 스프링 관련 설정을 해보려고 한다. 


1. @ 어노테이션 설정을 위해서는 스프링 컨테이너가 내가 설정한 패키지 범위를 scan 할 수 있도록 

context 네임 스페이스를 추가한다. 

context 네임스페이스를 추가하게되면 상단에 하기 코드가 추가 되고 

xmlns:context="http://www.springframework.org/schema/context"

DS는 web.xml 파일에서 <bean>을 통해 초기화, HM, VR 는 스프링 컨테이너에서 자체적으로 초기화 되어지기 때문에 

남은 Controller 클래스를 초기화 하는 작업을 해주어야 한다. 

 

<context:component-scan base-package="어노테이션을 사용할 패키지"/>

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd">

	<context:component-scan base-package="com.kim.biz.controller" />
	
	<!-- DataSource 설정하기 -->
	<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="kim" />
		<property name="password" value="1234" />
	</bean>
	<!-- Spring JDBC 설정하기 -->
	<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
		<property name="dataSource" ref="dataSource" />
	</bean>
	
</beans>

2. Controller에 @달아주기 

 

초기화를 해주기 위해서 이전에 배웠던 내용인 @Component를 달아주면 되지만, 

@Controller를 사용하여 DS가 인식하는 C 객체로 인지할 수 있도록 설정해준다.

 

import를 보면 implements Controller 하였을때 사용하였던 것과 달라진 것을 알 수 있다. 

 implements Controller 삭제되면서 오버라이딩 강제가 필요없게 되므로 완전한 POJO가 된다.  

메서드 시그니쳐도 변경이 가능 -> ex) ex) public void selectOneMember(HttpServletRequest request)


3. @RequestMapping 으로 메서드 연결 

  • 어떤 사용자의 [요청]에 대해서 무슨 [메서드]를 수행하는지 "연결" 해주는 작업
  • HM 역할을 수행 
  • 하나의 C 클래스 내부에 여러개의 메서드를 작성 가능 

메서드 상단에 @RequestMapping("/수행 동작.do") 

package com.kim.biz.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import com.kim.biz.member.MemberVO;
import com.kim.biz.member.impl.MemberDAO;

@Controller
public class LoginController{
	
	@RequestMapping("/login.do") 
	public void selectOneMember(HttpServletRequest request){ 
		String mid=request.getParameter("mid");
		String mpw=request.getParameter("mpw");
		MemberVO mVO=new MemberVO();
		mVO.setMid(mid);
		mVO.setMpw(mpw);

		MemberDAO mDAO=new MemberDAO();
		mVO=mDAO.selectOneMember(mVO);

		if(mVO==null) {
		}
		else {
			HttpSession session=request.getSession();
			session.setAttribute("member", mVO);
		}
	}
}

4. Command 객체 

 

Controller 객체에서 사용자의 요청(*.do)를 받을 때 사용자가 입력하는 정보( 이름, 나이 등)가 많거나 

변경되는 정보가 많으면 그만큼 자바 코드가 필요해지며 변경될 때마다 Controller 클래스는 수정이 되어야한다. 

하지만 Command 객체를 사용하면 이 문제가 해결이 가능하다!! 

 

Command 객체는 Controller 메서드 매개변수로 받은 VO 객체라고 보면 된다. 

	@RequestMapping(value="/login.do",method=RequestMethod.POST)
	public String login(MemberVO mVO,MemberDAO mDAO,HttpSession session,ModelAndView mav) {
		mVO=mDAO.selectOneMember(mVO);
		if(mVO==null) {
			return "login.jsp";
		}
		else {
			session.setAttribute("member", mVO);
			return "redirect:main.do";
		}
	}

위 코드에서 selectOneMember 메서드 인자로 MemberVO mVO를 선언하면 

Spring 컨테이너가 selectOneMember() 메서드를 실행할때 Command 객체를 생성주는데 

결국, 사용자의 입력 정보 추출, VO객체 생성, 값 설정 모두 Spring 컨테이너가 자동으로 처리해준다. 

 

★ Command 객체 처리 과정 ★

1. 매개변수에 해당하는 MemberVO 객체 생성 

2. 사용자가 입력한 parameter 값들을 추출하여 MemberVO 객체에 저장, MemberVO 클래스의 setter 메서드 호출 

3. 사용자의 입력값들이 설정된 MemberVO 객체가 인자로 전달됨 


5. Method 

@RequestMapping(value="/수행 동작",method=RequestMethod.요청 방식)

해당 코드를 사용하여 method 전송 방식이 get, post 각각 다르게 메서드를 수행하게 할 수 있다. 

@Controller
public class MemberController {
	@RequestMapping(value="/login.do",method=RequestMethod.GET)
	public String index() {
		return "login.jsp";
	}
	@RequestMapping(value="/login.do",method=RequestMethod.POST)
	public String login(MemberVO mVO,MemberDAO mDAO,HttpSession session,ModelAndView mav) {
		mVO=mDAO.selectOneMember(mVO);
		if(mVO==null) {
			return "login.jsp";
		}
		else {
			session.setAttribute("member", mVO);
			return "redirect:main.do";
		}
	}

기존 DispatcherServlet-servlet.xml 파일에서 HM, C를 어떤식으로 바꾸었는지 하기 사진을 통해서 알 수 있다. 

728x90
반응형