객체 자동 생성 어노테이션 -> bean
<context:component-scan base-package="org.zerock" />
-> 패키지 아래 쪽의 선언한 클래스
@Controller - URI 가지고 분기 = 실행 할 내용을 결정(메서드로 정의)
@Service - 데이터 처리
@Repository - DB 처리 -> mapper 형식 : xml, 인터페이스
@Component - 프로젝트의 구성
@Advice - 예외처리를 하기 위한 클래스 객체 생성
@RestController - URI 가지고 분기 (Ajax, 비동기통신 사용시) - REST 통신
REST : Representational State Transfer, 웹에서 데이터를 전송하고 처리하는 방법을 정의한 인터페이스. 네트워크 상에서 Client와 Server사이의 통신 방식 중 하나이다.
@Contoller 안에서 사용하는 어노테이션
@RequestMapping(value="uri", method=method방식(GET,POST)) : 클래스 또는 메서드 위에 붙일 수 있다.
@GetMapping("uri") - GET방식, RequestMapping 대신 쓸 수 있다.
@PostMapping("uri") - POST방식, RequestMapping 대신 쓸 수 있다.
:: mapping을 중복 적용하면 안된다. 컴퓨터가 어디로 갈 지 방향을 잡지 못함.
DI (Dependency Injection) 의존관계 주입
흐름 : Controller -> Service -> mapper
DI : mapper 생성 - > Service 생성 -> Contorller
@Inject , @Autowired, @Setter : DI를 적용할 때 사용하는 어노테이션
2개 이상의 타입의 객체가 존재하는 경우 - @Qualifier(구분자)
@Log4j : 로그 출력을 위한 어노테이션, 클래스 위에 붙여서 사용.
public String delete(@RequestParam("no")ArrayList<Long> no)
Date객체에 객체가 1개만 넘어갈 때
writeDate, updateDate, StartDate, EndDate등 여러개 넘어갈 때
6.5.5 파일업로드 처리 p.149
<form action="write.do" method="post" enctype="multipart/form-data">
제목 : <input name="title"><br/>
첨부이미지 : <input name="files" type="file"><br/>
첨부이미지 : <input name="files" type="file"><br/>
첨부이미지 : <input name="files" type="file"><br/>
첨부이미지 : <input name="files" type="file"><br/>
첨부이미지 : <input name="files" type="file"><br/>
<button>등록</button>
</form>
public String write(String title, MultipartFile[] files) {
log.info("title: "+title);
for(MultipartFile mfile : files) {
// 데이터가 있는것만 log에 찍기
if(!mfile.getOriginalFilename().equals("")) {
log.info("-------------------------------");
log.info("name:" + mfile.getOriginalFilename());
log.info("size:" + mfile.getSize());
}
}
return "redirect:list.do";
}
files
: byte 단위 파일을 가지고 있는 정보 : Controller에서 사용
fileNames
: 넘어온 파일의 저장된 이름 : DB에서 사용
@ControllerAdvice