newlecture: spring MVC (4) : xml to Annotaion

조성우·2021년 7월 20일
0

Spring

목록 보기
4/4
<beans ...
	xmlns:context="http://www.springframework.org/schema/context"
    ...
    xsi:schemaLocation="...
        http://www.springframework.org/schema/context
        https://www.springframework.org/schema/context/spring-context.xsd
">

	<context:annotation-config />
    
    ...

위 문구를 추가하고 property 태그를 지운다

그러면 바인딩이 된다

서비스 객체 자체를 IoC 컨테이너에 관리를 하게끔 등록을 하려면

아래의 xml을 등록한다

<context:component-scan base-package="com.newlecture.web.service" />

위 태그는 <context:annotation-config />의 기능을 포함하므로 이전 태그는 지우도록 하자

다만 스캔 범위가 너무 많아지면 많은 탐색시간을 갖게 된다..
controller 와 service만 필요하다면 필요한 범위만 스캔하게끔 하자

Controller도 똑같이 하자
다만 컨트롤러는 urlMapping을 하기 위해서 아래와 같은 태그를 넣어야 한다

<mvc:annotation-driven />

이제 코드를 바꿔보자

public class ListController implements Controller {
	...
	@Override
	public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
		...	
        	return mv;
    }
}

위 코드는

@Controller
public class ListController {
    
    ...
    
    @RequestMapping("/notice/list") 
    public void 메서드명() {
		...
    }

}

이렇게 바꿀 수 있다.

이전에는 오버라이드된 handleRequest 메서드 하나에 하나의 URL만 매핑할 수 있기 때문에 Controller 당 하나의 URL만 매핑할 수 있었는데

이제는 여러개의 메서드를 가질 수 있으므로 여러 URL 매핑이 가능하다

다시 기존 컨트롤러들을 바꾸도록 하자

IndexController -> HomeController

@Controller
@RequestMapping("/")
public class HomeController {
    
    @RequestMapping("index")
    public String index() {
	return "root.index";
    }
    
    @RequestMapping("help") 
    public String help() {
	return "";
    }
    
}

ListController, DetailController -> NoticeController

@Controller
@RequestMapping("/customer/notice/")
public class NoticeController {
    
    @Autowired
    private NoticeService noticeService;
    
    @RequestMapping("list")
    public String list() {
	
	List<Notice> list = noticeService.getList(1, "TITLE", "");
	
	return "notice.list";
    }
    
    @RequestMapping("detail")
    public String detail() {
	return "notice.detail";
    }
}

다시 정리 (by 뉴렉쳐 센세)


  • 기존 방식

  • 현재 방식

Controller의 메서드를 대신 호출해준다

문서 출력 방법 4가지


  • 서블릿 객체를 얻어서 문자열 출력
  • @ResponseBody 설정을 통한 문자열 출력
  • ResourceViewResolver를 이용한 문서 출력
  • TilesViewResolver를 이용한 문서 출력

서블릿 객체를 얻어서 문자열 출력

    @RequestMapping("index")
    public void index(HttpServletResponse response) {
    PrintWriter out = null;
    try {
        out = response.getWriter();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    
    out.println("Welcome");
//  return "root.index";
    }

@ResponseBody 설정을 통한 문자열 출력

    @RequestMapping("index")
    @ResponseBody
    public String index(HttpServletResponse response) {
	return "hello";
    }
profile
가장 아름다운 하나의 해답이 존재한다

0개의 댓글