본문 바로가기

Spring

(16)
2-31 Validator public interface Validator { boolean supports(Class clazz); // 이 검증기로 검증가능한 객체인지 알려주는 메서드 void validate(@nullable Object target, Errors errors); // 객체열 검증하는 메서드 - target: 검증할 객체, errors:검증시 발생한 에러저장소 } 객체를 검증하기 위한 인터페이스. 객체검증기(validator)구현에 사용 BindingResult는 Errors의 자손이다. public class UserValidator implements Validator { @Override public boolean supports(Class clazz) { return User.clas..
2-29~30 DispatcherSerlvet 서블릿들의 공통부분을 하나로 만들어 공통부분제공. 전처리. 요청이 오면 DispatcherSerlvet이 요청을 받아 컨트롤러에 전하고 결과로 뷰 이름을 받아 응답 HandlerMapping URL과 메서드를 매칭시켜 저장 DispatcherSerlvet 이 요청을 받았을 때 HandlerMapping에 물어본다. 그때 HandlerMapping이 메서드 반환. 그러면 DispatcherSerlvet이 그 메서드 호출 컨트롤러 호출때에도 DispatcherSerlvet이 직접 호출하는 것이 아닌 HandlerAdapter를 거쳐서 호출한다. HandlerAdapter도 여러 종류가 있는데,ㅋ 어떤 HandlerAdapter가 그 메서드를 호출할수 있는지 확인하고 그 Han..
2-27~28 스프링 예외처리 Error.jsp ExceptionController ch2/ex로 요청하면 java.lang.Exception: 예외가 발생했습니다. at co m.fastcampus.ch2.ExceptionController.main(ExceptionController.java:10) 위와 같이 500번 에러발생 편하게 try-catch로 묶기 404에러 return "error";추가 이렇게 예외처리가 중복되면 별도의 메서드로 분리할 수 있다. @ExceptionHandler("처리할 예외 종류") 캐치블럭이라고 생각하면 된다. 한번에 두개 이상의 에러를 처리하고싶으면 배열을 사용한다. @ExceptionHandler({NullPointerException.class,FileNotFoundExcep..
2-25~26 세션 실습 boardList.jsp boardController 로그인하지 않았을 시 게시판 열람 불가능하게 만들기 로그인 상태가 아니면board를 클릭시 로그인화면으로 이동한댜. 하지만 로그인을 하더라도 아직세션에 저장을 하지 않아 게시판열람이 불가능하다. LoginController에서 로그인시 세션에 id를 저장하는 작업을 추가해야 한다. LoginController 로그인후 제대로 접속 가능 ' 로그아웃 기능 추가 index.jsp 수정 로그인 상태일시 로그아웃 버튼이 보이고, 아니라면 로그인 버튼이 보인다. board를 눌러 로그인을 하면 홈으로 가는게 아닌 board로 이동하게 변경하기 컨트롤러는 어디서 요청이 왔는지 어디로 가는지 알 수 있다. from 은request.getHeader("r..
2-23~24 쿠키 loginForm.jsp LoginController http://localhost/ch2/login/login 으로 요청 쿠키를 이용해서 아이디 기억을 구현 컨트롤러에서 GetMapping 변경, PostMapping 추가 경로가 '/'이라 스프링에서 기본으로 만들어주는 homecontroller 변경 홈 추가 index.jsp 쿠키 이름과 값의 쌍으로 구성된 작은 정보. 아스키 문자만 가능(한글은 URL인코딩 필요) 클라이언트 식별기술 Domain: fastcampus.co.kr path: /ch2/login id(name)=asdf(value) Max-Age:60*60*24 (유효기간) 서버에서 만들어서 브라우저에 저장한다. 유효기간이 지나면 자동 삭제 서버에 요청 시 domain, path가..
2-21~22 @GetMapping과 @PostMapping 긴 @RequestMapping 대신 사용가능 원래 url이 같으면 충돌이 나지만, 메서드가 다르면(@GetMapping ,@PostMapping/ method=RequestMethod.GET,method=RequestMethod.POST) url이 같아도 충돌나지 않는다. @GetMapping ,@PostMapping을 사용했을 때 동일한 URL 부분을 @RequestMapping으로 묶어줄 수 있다. @Controller @RequestMapping("/register") public class RegisterController //@RequestMapping(value= "/register/add", method=RequestMethod.GET) @Ge..
2-19~20 회원가입 화면 src-main-webapp 아래 registerForm.html 생성 http://localhost/ch2/resources/registerForm.html 이동 url 줄이기 servlet-context.xml: web관련 설정파일 root-context.xml: non-web관련 설정파일 servlet-context.xml 에서 mapping="/resources/**" 를 mapping="/**" 로 바꾼다. http://localhost/ch2/registerForm.html 으로 접속 가능 입력해도 form에 action이 없기 때문에 아무일도 안생긴다(자기자신에 전송). method도 없어서 디폴트인 get방식으로 정보가 이동됨 http://localhost/ch2/regist..
2-17~18 @RequestParam 요청의 파라미터를 연결할 매개변수에 붙이는 애너테이션(생략가능) 이전에 사용할 때는 생략되었다. public String main2(@RequestParam(name="year" required=false) String year) { // year: parameter이름. required: 필수 여부 public String main2(String year) { 위 두문장은 동일하다. 요청 http://Iocathost/ch2/requestParam2 -> year=null http://IocaIhost/ch2/requestParam2?year -> year="" public String main3(@RequestParam(name="year", required=true) Str..