annotation(2)
- 전달값의 이름과 같은 이름의 매개변수를 작성하여 전달값 저장
- @RequestParam 어노테이션을 사용하여 매개변수의 이름과 같은 이름의 전달값이 없는 경우 400 에러 발생
- ⇒value 속성을 이용하여 매개변수의 이름과 다른 이름의 전달값을 제공받아 매개변수에 저장 가능
@RequestMapping(value = "/join", method = RequestMethod.POST)
public String join(@RequestParam String id, @RequestParam String passwd
, @RequestParam String name, @RequestParam String email, Model model) {
model.addAttribute("id", id);
model.addAttribute("passwd", passwd);
model.addAttribute("name", name);
model.addAttribute("email", email);
return "join_display";
}
- @ModelAttribute : 뷰페이지(JSP)에서 사용하기 위한 속성값(객체)을 제공하는 어노테이션
- ⇒ @ModelAttribute 어노테이션은 메소드와 매개변수에 선언 가능
- @ModelAttribute 어노테이션을 메소드에 선언하면 메소드 반환값을 Controller 클래스의 모든 요청 처리 메소드의 뷰페이지에게 속성값으로 제공
- @ModelAttribute 어노테이션을 매개변수에 선언하면 매개변수에 저장된 값을 요청 처리 메소드의 뷰페이지에게 속성값으로 제공 - 매개변수에 저장된 전달값을 뷰페이지에게 제공⇒ 매개변수의 자료형이 기본형(Wrapper 클래스)이나 String 클래스인 경우 반드시 value 속성을 설
- ⇒ 매개변수의 이름과 전달값의 이름이 같지 않아도 400 에러 미발생
- value 속성 : 뷰페이지에 제공하기 위한 속성명을 속성값으로 설정
- ⇒ 다른 속성이 없는 경우 속성값만 설정 가능
@RequestMapping(value = "/join", method = RequestMethod.POST)
public String join(@ModelAttribute(value="id") String id, @ModelAttribute("passwd") String passwd
, @ModelAttribute("name") String name, @ModelAttribute("email") String email) {
return "join_display";
}
JavaBean 클래스 : 웹프로그램 요청 시 전달된 값을 저장하기 위한 클래스
⇒DAO 클래스에서 사용할 경우 DTO 클래스의 기능 수행
전달값의 이름과 같은 이름의 필드를 선언하면 Setter 메소드를 호출하여 전달값이 필드에 자동으로 저장
매개변수가 3개 이상인 경우
- 요청 처리 메소드의 매개변수 자료형을 JavaBean 클래스(DTO 클래스)로 선언하면 Front Controller가 JavaBean 객체를 생성하여 전달값을 필드에 저장하여 제공 - Command 객체
- Command 객체 : 전달값이 필드에 저장된 객체로 요청 처리 메소드의 뷰페이지에서 사용되도록 제공되는 객체
- ⇒ 전달값은 같은 이름의 필드에 저장
- 뷰페이지에서 Command 객체가 사용되도록 @ModelAttribute 어노테이션을 사용하여 선언하는 것을 권장
- ⇒ @ModelAttribute 어노테이션 선언하지 않아도 자동 처리
- value 속성으로 뷰페이지에 제공되는 속성명을 설정할 수 있지만 value 속성이 생략된 경우 클래스명을 속성명으로 자동 설정 - 첫문자는 소문자로 변환되어 제공
@RequestMapping(value = "/join", method = RequestMethod.POST)
public String join(@ModelAttribute Member member) {
return "join_display";
}
- 어노테이션의 Value 속성을 사용하여 뷰페이지에 제공되는 속성명을 변경 가능
@RequestMapping(value = "/join", method = RequestMethod.POST)
public String join(@ModelAttribute("mem") Member member, Model model) {
if(member.getId().equals("abc123")) {//아이디가 중복된 경우
model.addAttribute("message", "이미 사용중인 아이디입니다.");
return "join_form";
}
return "join_display";
}
=================================================================
- Session Scope : 동일한 세션을 사용하는 모든 요청 처리 메소드와 뷰페이지에서 속상값 사용 가능
- Request Scope : 요청 처리 메소드의 뷰페이지에서만 속성값 사용 가능
- 요청 처리 메소드의 매개변수를 HttpSession 자료형으로 선언하면 Front Controller에 의해 바인딩 처리된 세션을 매개변수에 전달하여 제공
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String login(@RequestParam String id, @RequestParam String passwd
, Model model, HttpSession session) {
if(!id.equals("abc123") || !passwd.equals("123456")) {
model.addAttribute("message", "아이디 또는 비밀번호를 확인해 주세요.");
model.addAttribute("id", id);
return "session/login_form";
}
session.setAttribute("loginId", id);
return "session/login_result";
}
===================================================================
SessionAttributes
- @SessionAttributes : Model 객체를 이용하여 저장되는 속성값을 요청 처리 메소드의 뷰페이지에게만 제공하지 않고 Controller 클래스의 모든 요청 처리 메소드와 뷰페이지에게 제공하는 어노테이션
- ⇒ Model 객체를 이용하여 저장된 속성값을 Request Socpe가 아닌 제한적인 Session Scope로 사용
- value 속성 : 제한적인 Session Scope로 처리되기 위한 속성명을 속성값으로 설정⇒변경 처리시 다른 요청 처리 메소드R에서 필요한 정보를 전달하거나 검색하는 작업을 생략하기 위해 사용
- ⇒ 다른 속성이 없는 경우 속성값만 설정 가능
@Controller
@SessionAttributes("hewon") <--요거
public class SessionController {
}
#아이디 전달 받아 회원정보 검색하는 메소드
- Model.addAttribute(Object attributeValue) : 뷰페이지에게 속성값을 제공하는 메소드⇒ 속성값의 자료형이 기본형(Wrapper)이거나 String 클래스인 경우 호출 불가능
- ⇒ 속성명이 생략된 경우 속성값(객체)의 클래스명을 속성명으로 자동 설정 - 첫문자는 소문자로 변환하여 제공
- @SessionAtrributes 어노테이션에 의해 제한적인 Session Scope로 처리
- ⇒ Controller 클래스의 모든 요청 처리 메소드와 뷰페이지에서 속성값 사용 가능
@RequestMapping("/hewon_view")
public String hewonView(Model model) {
Hewon hewon=getHewon("abc123");
//model.addAttribute("hewon", hewon);
model.addAttribute(hewon); //@SessionAtrributes 속성값 저장
return "session/hewon_view";
}
#정보 변경시
- @SessionAttributes 어노테이션을 사용한 경우 Command 객체에 속성값이 자동 저장되어 제공되며 전달값이 있는 경우 Command 객체의 필드값 변경 처리
- SessionStatus : @SessionAttributes 어노테이션에 의해 제공된 속성값(객체)의 상태정보를 저장한 객체
- SessionStatus.setComplete() : @SessionAttributes 어노테이션에 의해 제한적인 Session Scope로 제공된 객체를 Request Scope로 제공된 객체로 처리되도록 변경하는 메소드
@RequestMapping(value="/hewon_update", method = RequestMethod.POST)
public String hewonUpdate(@ModelAttribute Hewon hewon, SessionStatus status) {
System.out.println("변경 아이디 = "+hewon.getId());
status.setComplete();
return "session/hewon_result";
}
===================================================================
WEB-INF : private 폴더, 이 폴더 안에 있는 파일들은 클라이언트가 접근 불가능
리소스 파일
- 리소스 파일 : JSP 문서에서 HTML 태그로 사용하는 멀티미디어 파일, CSS 파일 , JavaScript Source 파일
- SpringMVC에서는 클라이언트의 모든 요청을 Front Controller에 의해 처리
- 문제점)HTML 태그로 리소스 파일을 요청할 경우 리소스 파일도 Front Controller에 의해 요청되므로 매핑된 요청 처리 메소드가 없어 404 에러코드 발생
- 해결법)HTML 태그로 리소스 파일을 요청할 경우 Front Controller를 이용하지 않고 직접 응답되도록 처리
⇒ Front Controller의 Bean Configuration File(Servelet-context.xml)에서 resource 엘리먼트를 사용하여 직접 응답되도록 설정
- resources : Front Controller를 사용하지 않고 직접 응답되도록 설정하는 엘리먼트
- ⇒ 리소스 파일을 클라이언트에게 직접 제공하기 위해 사용
- mapping 속성 : 리소스 파일을 요청할 수 있는 URL 주소의 패턴을 속성값으로 설정
- ⇒ [**] 기호를 속성값으로 사용한 경우 하위 폴더를 포함한 모든 리소스파일에 대한 URL주소 표현
- location 속성 : 리소스 파일이 저장된 폴더 경로를 속성값으로 설정
- servlet-context에 있는 resource 파일 경로
<resources mapping="/resources/**" location="/resources/" />
- 리소스 파일 밑에 필요한 파일의 폴더 설정
- resource 파일 경로 수정 가능
<resources mapping="/image/**" location="/image/" />
'일상 > 일기장' 카테고리의 다른 글
TIL22.03.19 - Final 프로젝트 : 부트스트랩 , 파일정리 (0) | 2022.03.19 |
---|---|
TIL22.03.17 - Spring : Spring MVC - Template 페이지, 환경설정 (4) | 2022.03.17 |
TIL22.03.15 - Spring : Spring MVC -annotation (0) | 2022.03.15 |
TIL22.03.14 - Spring : Spring DAO, Spring MVC (0) | 2022.03.14 |
TIL22.03.13 - Spring : AOP (0) | 2022.03.13 |
댓글