★이전 포스팅★ 에서는 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를 어떤식으로 바꾸었는지 하기 사진을 통해서 알 수 있다.
'Spring' 카테고리의 다른 글
[Spring] 2-Layered Architecture (Presentation Layer, Business Layer) (0) | 2022.09.27 |
---|---|
[Spring] 어노테이션@ - RequestParam, ModelAttribute, SessionAttributes (0) | 2022.09.23 |
[Spring] MVC2 패턴 동작과정2 - Spring framework 클래스 적용 (1) | 2022.09.20 |
[Spring] MVC2 패턴 동작과정1 (0) | 2022.09.20 |
[Spring] JDBC Template 사용 (0) | 2022.09.18 |