1025 spring

yunha·2023년 10월 25일
0

JSP/Spring

목록 보기
20/36

컨트롤러

: 웹 브라우저에서 들어온 사용자 요청을 구현된 메서드에서 처리하고 그 결과를 뷰에 전달하는 스프링의 빈 객체 => 웹 요청을 전달받아 내용 해석 후 요청 처리 가능한 메서드 호출 => 요청 처리 후 사용자에게 결과 반환
스프링 MVC => 사용자 요청(<-웹) => 디스패처 서블릿 => Controller(실제 처리)

(사-URL 요청)http://localhost:8080/BookMarket/books => DispatherServlet =@RequestMapping(value="/books", ...)=> BookController

구현과정

요청 URL => /books
@Controller --> 컨트롤러 정의
@RequestMapping("/books") --> 요청 매핑 경로 설정
public class BookController { --> 요청 처리 메서드 구현

	@Autowired
	private BookService bookService;
	
	@GetMapping
	public String requestBookList(Model model) {
		List<Book> list = bookService.getAllBookList();
		model.addAttribute("bookList", list);
		return "books"; --> 뷰[&모델] 반환
	}
=> 웹 브라우저

정의하기

@Controller

컨트롤러 - 일반 자바 X, 웹 브라우저 요청 처리 메서드 포함한 특정 자바 클래스 => @Controller

import org.springframework.stereotype.Controller;
.
.
@Controller

<context:component-scan> 요소 -> 컨트롤러 등록

스프링MVC는 컨트롤러 역할 자바 클래스 여러 개 => 디스패처 서블릿이 @Controller 선언된 컨트롤러 전부 스캔
=> 디스패처 서블릿이 인식 가능하도록 컨트롤러, 컨트롤러와 의존 관계인 자바 클래스들 => 스프링 MVC 설정 파일(servlet-context.xml)에 빈 객체로 하나씩 직접 등록해야 함 - 다 하려면 번거로움(Controller--RepositoryImpl--ServiceImpl--...)
==> 컴포넌트 스캔 (<context:component-scan) 사용해서 자동 등록 되도록!

<context:component-scan base-package="패키지 이름" />

<context:component-scan base-package="com.springmvc.*" /> --> 패키지 하위에 있는 컨트롤러 및 의존 관계에 있는 자바 클래스 검색 => 빈 객체로 자동 등록

=> 컨트롤러와 의존 관계에 있는 클래스의 프로퍼티에 선언된 @Autowired(의존 관게에 있는 클래스의 멤버 변수에 대해 Setter() 메서드 대신 선언하는 애너테이션) 인식 X => 프로퍼티의 Setter()메서드도 모두 작성해야 함

웹 애플리케이션의 계층적 구조

forward -> jsp
redirect -> 경로

public class EmployeeController {
		// 제어의 역전 IoC(Inversion of Control)
		// 의존성 주입 DI(Dependency Injection) 
		@Autowired
		EmployeeService employeeService;
	
	/*
		요청URI : /employee/create
		요청파라미터 : 
		요청방식 : get
		create.jsp를 forwarding해줘야 함
	 */
	@RequestMapping(value="/employee/create", method= RequestMethod.GET)
	public ModelAndView create() {
		// prefix : /WEB-INF/views/employee/create
		// suffix : ~~~.jsp
		ModelAndView mav = new ModelAndView();
		mav.setViewName("employee/create");
		return mav;
	}
	/*
		요청URI : /employee/create
		요청파라미터 : {eName=개똥이,eAddress=대전,eTelno=010-123-1234,
		         ePosition=과장,eDept=개발부}
		요청방식 : post
		EmployeeVO 타입의 employeeVO 매개변수로 파람미터를 받아서 log 출력
	 */
	@RequestMapping(value="/employee/create",method=RequestMethod.POST)
	public ModelAndView createPost(EmployeeVO employeeVO, ModelAndView mav) {
		//EmployeeVO(eEmpno=null, eName=1, eAddress=2, eTelno=3
		//, ePosition=사원, eDept=개발부)
		log.info("createPost->employeeVO : " + employeeVO);
		
		int result = this.employeeService.createPost(employeeVO);
		//EmployeeVO(eEmpno=E001..
		log.info("createPost->result : " + result);
		
		mav.setViewName("redirect:/employee/detail?eEmpno="+employeeVO.geteEmpno());
		
		return mav;
	}
}

타일즈(Tiles)
: 반복되는 부분들을 한 곳에서 관리할 수 있게 도와주는 템플릿 프레임워크

profile
기록

0개의 댓글