유튜브 뉴렉처 Spring 31강
Dispatcher-servlet.xml 파일
스프링이 제공하는 프론트 컨트롤러를 사용하기위해 가장 중요한 파일
서블릿의 기능은 spring mvc 라이브러리의 DispatcherServlet.class가 그 역할을 한다.
컨트롤러를 POJO로만들고 Dispatcher를 사용한다
Dispatcher에 URL매핑을 하기위해 DispatcherServlet.class 찾아 Copy Qualified Name 해준다.

그리고 web.xml로 이동한뒤 서블릿 설정을 해준다. 서블릿 이름을 정한뒤
서블릿 클래스 설정을 해주고 ( 복사 붙여넣기 ) *이때 .class 확장자명은 지워준다.
주소를 매핑하기위한 매핑설정까지 해준다
Dispatcher 클래스는 프론트 컨트롤러이기때문에 기본적으로 모든 url을 받는
즉 각각의 POJO클래스에 받은 url을 분배해준다.

테스트 해보기위해서 index.jsp안에서 간단하게 Hi와 ${data} 를 작성한뒤 실행해본다.


현재 사용자가 요청한 url이 Dipatcher를 거치지 않고 출력이되고있다.
web.xml에가서 예외없이 모든걸 Dipatcher 프론트 컨트롤러가 관리할수있도록 다시 설정해준다.

그 후에 다시 실행해보면 500 오류가 나오고
dispatcher-servlet.xml (*-servlet.xml) 설정파일이 없어서 매핑을 할수없기때문에 나오는 메세지가 보인다.

모든 URL을 받은 dispatcher가 적절한 URL에 맞는 리소스를 배분해주기위해 dispatcher-servlet.xml 를 만들어준다.
기본루트는 WEB-INF 안의 (서블릿이름.servlet.xml) 파일이 존재해야한다.
WEB-INF안에 XML File을(dispatcher-servlet.xml) 추가해준다.

IndexController 작성하기
dispatcher-servlet.xml 에는 Spring이 사용할수있는 설정들을 담을수있게된다.
설정내용의 레퍼런스를 알아보기위해
docs.spring.io/spring-framework/ 접속후 docs로 들어가면 스프링 프레임워크의 버전들이 나열되있는데
현재 사용중인 버전의 메뉴얼을 확인하는 것이 좋다.

5.2.x 버전을 선택후 레퍼런스를 확인하기위해 spring-framework-ref... 클릭해준다.

Core 카테고리 선택후 사이드바에서 IocContainer 클릭후 스크롤바를 내려보면 기본적인 설정방법이 나온다.


복사한뒤 xml에 붙여넣기해준다.
요청한 내용은 url로 dispatcher-servlet.xml 에 전달이 되기때문에
bean의 id를 이용해 url로 받아주고 class는 컨트롤러의 위치로(패키지명 까지) 작성해준다.

POJO(컨트롤러)를 사용하기위해 handleRequest 함수가 필요하다.
IndexController로가서 Controller 인터페이스 를 구현해준다.
handleRquest 메소드를 구현해주고 dispatcher 기능은 스프링이 제공해주고있기때문에
dispatcher 하기위한 ModelAndView 객체를 하나 만들어서
data 키워드를 "Hello Spring MVC~" 로 담아준다.
담은내용을 ViewName으로 set해준다
그리고 ModelAndView객체를 반환해주도록한다.

IndexController 로 실행을 시켜보면 404 에러가 보이게된다.

POJO클래스는 tomcat이 모르는 클래스이다. 주소요청 자체를 소스코드로 반환한다.
사용자가 원하는정보는 URL이 매핑된 정보이기때문에 주소를 index로 바꾸어 준다.

그럼에도 불구하고 오류가 나오는데 이문제는 ModelAndView에 또 하나의 요청이 존재하기 때문에
web.xml에 있는 url-parttern이 /* 으로 설정되어있기때문에 계속수행하기 때문이다.
web.xml의 url-parttern을 *을 빼주는 방법으로 수정해주어야한다.

그리고 서버를 재시작한뒤 아까 index로 바꾸었던 주소를 다시한번 동작해보면 index.jsp에있는
${data}가 잘 추가된것을 볼수있다.

View 페이지를 위한 위치
프로그래밍은 절차가 상당히 중요한데 IndexController을 건너띄고 index.jsp가 작동하게되면 안되기 때문에
사용자가 index.jsp를 요청할수 없게 만들어야한다.
View페이지를 요청할수 없게 숨겨줘야한다.
WEB-INF 폴더는 사용자가 직접 요청할수없는 영역이기때문에 WEB-INF안에 폴더를 만들어서 페이지를 숨겨준다.

이렇게 index.jsp를 넣어두면 사용자가 직접 index.jsp를 요청할수없게 된다. ( 컨트롤러에서는 요청할수있음 )
경로가 바뀌었으니 IndexController의 setViewName도 바뀐 경로를 적어준다.
이제 View페이지는 컨트롤러를 통해서만 접근할수있다.

절대 경로 /WEB-INF/view/index.jsp
상대경로 WEB-INF/view/index.jsp
실행할때는 둘다 실행이되겠지만 bean의 아이디에 따라서 경로가 오류가 생길수도 있기때문에
절대경로로 하는것이 좋다
URL에 컨텍스트이름이 붙은것 또한 주소에 가질필요성이 없기 때문에 프로젝트 속성에서 이름을 지워주도록한다.


컨텍스트이름을 바꿨을때는 Server로 가서 webprj(원래 컨텍스트이름)으로 되어있는걸 지워주어야한다.

이클립스는 webapp 에 특정파일을 선택하고 실행하면 브라우저 경로에 써주게된다.
webapp에 index라는 빈파일을 만들어두게되면
컨트롤러가 우선순위기 되었기때문에 URL에 도합되는 dispatcher가 실행이 되게된다.
주소가 입력되게하기위해 편법으로 파일을 하나 만들어둔다.

그리고 index라는 빈 파일을 실행시켜보면 index라는 URL에 도합하는 dispatcher 실행이 되면서 출력이된다.

ViewResolver 사용하기
WEB-INF에 숨긴 View페이지를 쉽게 찾을수 있도록 하는 방법
/WEB-INF/view/index.jsp 라는 경로를 쉽게 index로만 설정시켜도 잘 적용되도록 하는 방법
dispatcher-servlet.xml에서 ViewResolver를 추가시켜준다
bean을 생성해 class는 org.springframework.web.servlet.view.InternalResourceViewResolver 로 설정
*헷갈릴 경우에는 java페이지에서 InternalResourceViewResolver 임포트 시키고 임포트된 패키지루트를 가져오면된다.
bean안에 property로 name을 설정 해주는데 앞부분은 prefix , 뒷부분은 suffix
index로만 사용할것이기때문에 index가 들어가는 부분을 제외하고 앞부분 뒷부분으로 나누어서 적용해준다.

ViewResolver설정을 적용했으면 Controller 페이지로가서 경로를 수정해준다.
생성자를 통해서 경로값을 줄수도있고 , setViewName으로 경로값을 줄수도있다. (현재는 생성자로 줌)

서버를 재시작하고 새로고침을 해보면 경로를 index로만 주어도 404에러가 나오지않는게
ViewResolver가 적용된것을 볼수있다.
뉴렉처 Spring 34강 완
'Step by Step' 카테고리의 다른 글
Spring 공부 2021-03-29 (0) | 2021.03.29 |
---|---|
Spring 공부 2021-03-22 (0) | 2021.03.22 |
Spring 공부 2021-03-18 (0) | 2021.03.18 |
Spring 공부 2021-03-17 (0) | 2021.03.17 |
Spring 공부 2021-03-16 (0) | 2021.03.16 |