웹과 상관이 있냐 없냐에 따라서 설정파일을 잡는게 다르다
지금만든 프로젝트 기준으로는 웹과 상관이 있으면 dispatcher 서블릿.xml로 된다
다이나믹~ 으로 프로젝트 만들고
jar파일넣고
스프링으로 바꾸고
web.xml에 서블릿 등록 | |
컨트롤러 역활하는 자바 클래스만들고 @Controller 선언해서 이 클래스가 컨트롤러인지 알수있게 표시 |
|
@RequestMapping을 선언해서 처음 시작 페이지의 주소?를 입력해주고 기본값인get을 입력 @RequestMapping은 http request로 들어오는 url을 특정 controller 클래스나 메소드로 연결시키는 역할을 한다. https://blog.naver.com/gmlwo308/222190960392 |
|
그리고 ModelAndView를 생성 | |
xml생성 sumController?? |
|
InternalResourceViewResolver치면 자동완성 됨 확장자.jsp를 붙여주기 위해선 InternalResourceViewResolver가 필요하다 viewResolver는 string 으로 return 되는 view 의 이름을 spring 이 찾아서 클라이언트에 던져주는 역활 https://blog.naver.com/kimdongy1000/221958837601 |
|
prefix 는 앞에 붙는 접두사고 suffix 는 접미사이다 |
|
sum이라는 폴더에서 input.jsp를 찾는다 아래 사진처럼 서블릿xml에서 /sum/을 붙여주는 prefix을 주석걸고 핸들러에서 직접 주소를 적어줘도 된다. |
|
sum폴더 만들고 그안에 input내용 입력 | |
result.jsp도 만들어주고 실행하면 | |
결과가 잘 나온다 포워딩으로 사용하겠다는설정은 서블릿 이름이 Dispatcher로 받아와서 그렇다 |
|
ModelAndView는 오로지 어느 jsp로 가라는말만 하고 있어서 쓸모가없다 | |
그래서 이렇게 바꿔도 에러가 나지 않는다. 리턴되는 타입이 String이면 단순 문자열이 아니라 뷰의 이름으로 인식한다 String은 리턴타입으로 단어를 보내면 .jsp를 붙인 뷰 이름으로 인식한다. |
|
뷰이름이 아니라 실제 문자열로 리턴하고 싶을 때는 @ResponseBody를 붙인다. |
|
이렇게 글자로 나온다. | |
지금까지 컨트롤러가 값을 안받고 그냥 jsp가 바로 값을 받았는데
컨트롤러가 값을 받게 만들어보자
SumController에서 @Request로 값을 받고 result.jsp로 값을 보내준다. |
|
404는 서버
500은 프로그램 잘못짠거
400은 파라메터에 값을 안넣어서 나오는 에러다.
값이 안들어간다면 (required=false) 기본값으로 0을 넣어주고 (defaultValue = "0") 0을 int가 아니라 Stringf 타입으로 해줘라.(String x,) 사진처럼 써주면 값을 넣지 않아도 400에러가 나오지 않는다 |
|
x,y 둘다 해주면 | |
에러 안난고 사진처럼 된다. 근데 사진을 보면 숫자가 합해진게 아니라 문자로 나와서 그냥 나열된다.... |
|
문자열로 받아지는 x,y값을 int로 변환시킨다 |
|
그럼 잘 나온다. | |
이걸 자주 쓰는곳은 게시판에서 무조건 1페이지로 가게 만들때 사용한다. 기본값으로 1을 해주면 무조건 1페이지로 가니깐 |
그리고 데이터를 여러개 한번에 받는 방법이 있다.
받는 데이터가 많아지면 RequestParam을 갯수대로 써줘야 하는데 Map을 쓰면 한번에 받을 수 있다.
Map은 데이터를 받는부분, ModelMap은 데이터를 내보내는 부분 ModelMap??? 주소를 타고 오는 방식은 전부 스트링으로 잡아줘야 한다. 이렇게 해도 결과는 잘 나온다. |
DTO로 받기
DTO만들고 @Data해주기 | |
사진처럼 해주면 DTO를 이용해서 값을 사용할 수 있다. |
|
사진처럼 DTO객체를 보내줘도 되는데 그럼 result.jsp에서 하나씩 get~ 으로 받아줘야 한다. |
결과를 String, ModelAndView, ? 등 여러가지 방법으로 받을 수 있다.
스프링 설정 파일을 폴더 이동하거나 이름을 바꿀때
디폴트값은 /WEB-INF/dispatcher.xml 이지만 난 이름을 dispatcher 말고 contextConfigLocation로 바꾸고 이 파일의 위치는 사진과 같은곳에 있게 만들었다. |
|
그리고 기존에 사용했던 dispatcher-servelt의 내용을 mvc-context로 옮긴다 (기존의 dispatcher-servelt은이제지워도된다) |
|
그리고 실행하면 잘된다 |
|
web.xml에 새롭게 xml파일을 적어놨기 때문에 실행하면 더이상 2번을 찾아가지 않고 1번을 찾아간다. |
viewResolver
xml파일에서 viewResolver을 통해 접두사 접미사를 미리 적은 덕분에 |
|
|
컨트롤러에서 리턴값에 풀 주소를 안적어줘도 된다. 만약 viewResolver를 안해줬다면 return "/view/sungJuk/result.jsp"; 이렇게 항상 길게 적어야 한다. |
InternalResourceViewResolver
view이름을 찾는 방법은 ViewResolver 에서 관리 된다
이 ViewResolver 가 핸들러의 타입이 String , ModeAndView 일때만 작동을 한다
그 외 다른 방법에서는 viewResolver 이 null 로 세팅이 되기 때문에 이름으로 jsp 파일을 찾을 수 없다
https://blog.naver.com/kimdongy1000/222102351660
Model, ModelMap vs ModelAndView
model,modelMap은 데이터만 저장을 하고
modelAndMap은 데이터와 이동하고자 하는 View page를 같이 저장한다
https://blog.naver.com/youhr21/221868885031
@ModelAttribute
1번페이지에서 파라미터로 넘길값이 많을때
이 부분에 파라미터를 5개~10개 이렇게 쓰기엔 너무 효율성이 떨어지고 힘들다
그래서 DTO클래스를 많이 이용하는데
DTO클래스의 이름마저도 길다면 그것또한 힘들다
그래서 @ModelAttribute 어노테이션을 이용해 쉽게 사용할 수 있다.
첫번째 페이지에서 이름, 국어, 영어, 수학 총 4개의 정보를 넘겨줘야 한다. | |
그래서 SungJukDTO라는 클래스를 만들었다 | |
파라미터를 넣어주는 부분에 @ModelAttribute 를 사용하고 SungJukDTO 타입의 sungJukDTO를 넣어저줬다. 여기서 ("내용") 이 부분은 복잡한 이름을 대신할 별명을 넣어주면 된다. 안쓰면 그냥 sungJukDTO를 사용하게 된다. 만약 사진처럼 간단하면? |
|
사용안하면 된다 | |
'Spring' 카테고리의 다른 글
web, WEB-INF 차이점 (0) | 2021.08.24 |
---|---|
(추가 필요@RequestBody )@ResponseBody, @RequestMapping, @RequestParam, @ModelAttribute (0) | 2021.01.09 |
1/06 스프링 chapter06 (0) | 2021.01.06 |
12/30 (0) | 2020.12.30 |
12/28-29 수업내용, 스프링 DB (0) | 2020.12.28 |