@RequestMapping("/requestParam2")
//public String main2(RequestParam(name="year" require=false) String year )
public String main2(String year) {
// http://localhost/ch2/requestParam2 --> year=null
// http://localhost/ch2/requestParam2?year --> year="" (빈문자열)
return "yoil";
}
현재 주석 처리되어 있는 부분과 // 주석처리되어 있는 부분 아래는 같은 표현으로
(RequestParam(name="year" require=false) 이부분은 생략이 가능한 부분이다.
name의 경우는 JSP에서 지정하였던 name과 동일한 이름을 사용해주면되고, require는 해당 값이 필수인지 아닌지 여부이다.
require=true 인 경우, 해당 데이터를 넘겨주지 않으면 404 에러가 발생한다.
@RequestMapping("/requestParam3")
//public String main2(RequestParam(name="year" require=true) String year )
public String main3(@RequestParam String year) {
// http://localhost/ch2/requestParam2 --> year=null
// http://localhost/ch2/requestParam2?year --> year="" (빈문자열)
return "yoil";
}
>> 윗부분과 다른점은 require=true 인 부분과 (필수입력)
@RequestParam 부분이 생략되지 않은 부분인데
require=true 인경우에는 @RequestParam 어노테이션을 생략하지 않는다.
또한 require=true 인 상태로 해당 값이 넘어오지 않는다면 404 에러를 발생시킨다.
(400번대 클라이언트에러, 500대 서버에러)
============================================================================================
필수 입력이 아닌경우에 JSP로 부터 넘어오는 값이 String type인데 매개변수로 int로 받고 있을경우 에러가 발생하는데
// http://localhost/ch2/requestParam2 --> year=null
// http://localhost/ch2/requestParam2?year --> year="" (빈문자열)
이경우는 JSP 로부터 String type의 값이 넘오는데
year를 int로 받기 떄문에 에러가발생한다
@RequestMapping("/requestParam2")
//public String main2(RequestParam(name="year" require=false) int year )
public String main2(String year) {
// http://localhost/ch2/requestParam2 --> year=null
// http://localhost/ch2/requestParam2?year --> year="" (빈문자열)
return "yoil";
}
보통 이럴경우 defaultValue를 넣어준다
public String main11(@RequestParam(require=false, defaultValue="1") int year){
// 이렇게 defaultValue="1" 기본값을 주어진다.
// 요청이 빈문자열 ("") 이나 null 이 들어오면 1로 처리하게 된다.
}
음.. defaultValue 의 값은
.java에서는 매개변수로 year에 1이란 값이 들어가지만 JSP에서 사용하려면
addAttribute() 를 통해서 해당 값을 JSP로 넘겨줘야 ${} 형태로 사용이 가능하며, 넘겨주지 않을 경우 값이 넘어가지 않음
<JSP 에서>
defaultValue로 정해주었더래도 request.getParameter("year") 의 값에서는 null로 뜬다.
>>> http://localhost:8080/ch2/requestParam5
>> 요청시 아래 내용 .java에서는 year 값이 뜨고, addAttribute로 넘겨줘야 ${} 년 에서 -->1년으로 뜸.
>> requset.getParameter("year") 의경우는 null이 떳다. getParameter 이자체는 웹브라우저에서 넘어오는 값만 해당되나보다.
예외처리 메서드 생성
>> 어노테이션 @ExceptionHandler(처리할 예외클래스)
>> 무슨 뜻이냐 하면,, ()안에 있는 에러가 발생할 경우 @ExceptionHandler가 맵핑하고 있는
함수가 실행된다 즉 yoilError.jsp 페이지로 이동하게 된다.
>> 아래와같이 required=true 인경우는 해당 데이터가 넘어오지 않을경우 에러가 발생하므로
예외 처리해주는것이 좋으며.
>> required=false인경우는 해당 값에 대한 defaulValue 처리를 해주는게 정직하다.
>>> 매개변수로 year, month, day 이렇게 하나씩 다 넣어주면 번거롭기 때문에 이것을 하나로 묶어서 표현 할 수 있다
>> 바로 클래스를 만들어서 해당 하는 변수를 인스턴스변수로 생성하여 get/set를생성해주면
사용자가 브러우저에서 요청하는 값을 맵팽해준다. 이때 사용자가 요청하는 값과, 인스턴스 변수와 이름이 동일해야 맵핑된다.
이러게 >> Mydate라는 클래스를 만들어서 자동으로 맵핑하는 것은
Mydate 클래스를 통해서 Class 객체를 생성한 후에,
생성된 객체를 통해서 Mydate의 name과 Map의 key 값이 같은게 있을 경우 setter 메서드를 통해서 맵핑을 실시해준다.
'dev > Spring' 카테고리의 다른 글
[Spring] Tomcat port 변경 (0) | 2022.06.04 |
---|---|
[Spring] ModelAttribute, BindingResult (0) | 2022.06.04 |
[Spring] Servlet의 발전과정을 탐구해보자 - 탐구단계 (0) | 2022.05.22 |
[Spring] Private한 메서드 호출 (0) | 2022.05.22 |
[Spring] MVC 패턴 - 관심사의 분리 (0) | 2022.05.22 |