Spring Framework과정 Day2 - HiroSung/Study GitHub Wiki
- @Controller과 @RequestMapping을 Annotation 적용
- 에 의해 자동으로 컨트롤 빈으로 관리됨 (/WEB-INF/spring/appServlet/servlet-context.xml 정의)
- @RequestMapping의 method속성으로 GET 또는 POST지정
- @RequestMapping(value="/getMethod", method=RequestMethod.GET)
- @RequestMapping(value="/postMethod", method=RequestMethod.POST)
-
요청 파라미터값 얻기
- 요청 파라미터와 요청 매핑 매소드의 매개변수 명이 동일함이 원칙 public String method1( String param1, int param2, double param3, boolean param4, @DateTimeFormat(pattern="yyyy-MM-dd") Date param5) {
- 요청 파라미터와 매개변수가 다를 경우 : @RequestParam("파라미터명") String 변수명 { ... } public String method2(@RequestParam("param1") String arg1, @RequestParam("param2") String arg2, @RequestParam("param3") String arg3, @RequestParam("param4") String arg4) {
-
필수 요청 파라미터
- public String method3(@RequestParam(required=true) String 변수명) { ... }
-
디폴트 값
- null인 경우는 변환시 오류가 발생하므로 초기값 설정을 두어서 처리 하도록 함
-
객체(Command Object)로 받기
- 데이터를 하나의 객체로 정의하여 받음
- DTO 파일에 get / set 를 정의해야 함.
- HTTP 요청 구조
- 크롬 > 마우스오른쪽 - 검사 > Network Header 부분에 General : 시작형 / Request Headers : 요청 헤더형으로 헤더명:헤더값을 볼 수 있음 / Form Data 본문내용
@- 요청 HTTP 헤더값 얻기 (다시 실습!) @- 쿠키 얻기
- 쿠키값은 = 기준으로 쿠키이름=쿠키값 이 설정됨
- 설명
- Dispatcherservletdl 이 controller가 받아서 처리하고 DB의 값을 받아서 View의 이름을 Dispatcher에 전달하고, Dispatcher는 JSP에게 전달하여 View를 만듬.
- Controller RequestScope에 저장함 (키:값 . request.setAttribute("키", 객체)
- JSP에서는 RequestScope의 내용을 가져와서 값을 사용함. (request.getAttribute("키") , ${키})
- 뷰로 데이터 전달방법
- 모델 매개변수 이용하여 전달하는 것을 가장 많이 사용함.
- 커맨드 객체는 요청파라미터를 저장하게 됨.
- 공통데이터 부분 활용. 정의하고 , 컨트롤러에 요청이 들어올때 마다 수행됨. @ModelAttribute("키") public Ch05Board 값() { }
-
public [요청매핑 리턴타입] 메소드명(파라미터타임) { ... }
-
파라미터 타입으로 올 수 있는 것들은 정해져 있음.
- HttpServletRequest : 파일을 다운로드 할때
- HttpServletResponse : 쿠키값 등
- HttpSession
- @RequestParam : 요청파라미터이름과 변수가 다르게 정의하고자 할때
- @RequestHeader
- Errors, BindingResult : 유효성검사
-
요청 매핑 리턴타임
- void : JSP로 전달할 것이 없는 경우 주로 사용. Controller가 바로 Return할때. (예: 파일다운로드, JSON 처리 등)
-
HttpSession 매개변수
- 세션 저장범위를 이용하고자 할 경우
- Sec01. form:form : Spring form 태그 라이브러리
- 태그 라이브러리 추가
- HTML의 Form과 유사. Method는 POST가 기본임(html은 GET), Action을 지정하지 않음. 요청하는 방식만 바꾸어서 다시 해당 페이지를 요청함 그래서 Action이 필요없음.
- Sec03. form:select form:options
- <form:select path="mtype" items="${typeList}" style="width:100%"/> : value와 label이 동일함
- <form:select path="mjob" style="width:100%"> ---선택하세요--- <form:options items="${jobList}"/> </form:select> : '선택하세요' 라는 옵션값을 추가할때 사용
- <form:select path="mcity" items="${cityList}" itemLabel="label" itemValue="value" style="width:100%"/> : value와 label 이 상이할때 사용. label/value는 City라는 커맨드 객체의 속성값임
- Controller에서 주로 처리함.
- 유효성 검사 객체
- <xmp>$.ajax({url:"join",method:"POST",data:$("#ch08Member").serialize(),success:function(data) {...});</xmp>
- serialize() : 태그의 모든 정보를 TEXT형태로 일렬로 만들어 줌.
-
- public boolean supports()
- public void validate(커맨드객체, Err를 저장할 컨테이너객체) {
ValidationUtils.rejectIfEmptyOrWhitespace( Err객체, 커맨드객체.필드이름, 꼭필요, 에러메시지(사용자에게노출메시지)) // 값이 비었거나 없다면 reject해라.
값이 있을 경우.
커맨드객체를 멤버타입으로 맞춤.
- 이메일 형식 또는 유효한 메일인지 여부 errors.rjectValue(커맨드객체.필드이름, "오류코드", 노출메시지) }
- 에러 코드는 국제화를 위해서 설정함.
- ValidationUtils.rejectIfEmptyOrWhitespace(errors, "memail", "required", "필수");
- 메시지.properties에 코드로 정의되면, 뒤에오는 메시지는 제외됨.
- servlet-context.xml 파일에 properties 설정함.
- multipart/form-data 구조
- 요청 header 에 content-type : [구분자의 정보]
- 구분자가 본문에 들어가서 구분자가 하나의 파트가 됨.
- 문자파트, 바이너리파트, 문자파트 .. 그래서, multi-part임.
- ...
- 예제는 ajax로 문자파트와 바이너리파트를 보내는 것임.
- file upload 사용 하려면
- pom.xml 에 commons-fileupload 설정이 필요함.
- servlet-context.xml 파일에 bean 추가