뉴렉처 스프링MVC(4 ~ 10)

김상복·2022년 4월 15일
0

뉴렉처스프링

목록 보기
5/7

4. Dispatcher Servlet 라이브러리 설치

Spring Web MVC 라이브러리 설치

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.9.RELEASE</version>
    </dependency>

5. Dispatcher Servlet 설정

web.xml 파일에 설정

<servlet>
	<servlet-name>dispatcher</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
	<servlet-name>dispatcher</servlet-name>
	<url-pattern>/*</url-pattern>
</servlet-mapping>

여기서 중요한 것은 url-pattern인데 /* 이라고 사용하면 이것은 모든 url 매핑 값이 들어올 때 Dispatcher.xml을 거쳐서 가지 않으면 오류가 발생한다는 것을 알 수 있다

6. 스프링 컨트롤러 IndexController 작성

URL 이동 순서

  1. DispatcherServlet으로 모든 url에 servlet 이동하게 설정
    url-pattern 에 / 만을 입력해두면 해당 url이 없을 때는 자동으로 .jsp를 찾게됨

  1. 어떠한 url을 입력시 해당 class로 이동함

해당 입력 url을 bean의 id로 입력시켜서 class로 이동, /index면 index라는 url이 입력 됬을때 작동함

  1. IndexControoler

  • ModelAndView 로 컨트롤러에 데이터 저장 및 보내기 등 작업 수행
  1. mv.addObject("이름" , "입력 데이터) - 보낼 jsp로 데이터를 이름에 저장해서 추가한다
  2. mv.setViewName("view 파일 이름") - jsp파일의 이름을 지정해서 저장된 모델들을 전송한다

이렇게 저장하면 data 라는 이름에 Hello Spring MVC라는 데이터가 저장되어 있다

  1. View Page

위에 jsp파일에 보면 ${data}라는 모델이 있고 그를 출력할 수 있다

밑에 출력 페이지를 보면

index 는 데이터가 출력되어있지만
index.jsp 는 모델에 데이터가 저장되서 넘어오지 않아 출력되지 않는다

그 이유는 2번의 xml 파일에 셋팅을 /index로 해놨기 때문에 index로만 파일이 전송 되고
.jsp url에도 오류가 뜨지 않는 이유는 1번의 디스패처 xml에서 url 매핑을 [/] 로 해놨기 때문에

디스패처 서블렛에서 해당 url을 찾을 수 없으면 자동으로 jsp를 찾기 때문이다

7. 프로젝트 명 uri에서 없애기

프로젝트 오른쪽 마우스 - Properties - Web Project Settings - 루트 ( / )

를 입력해두면 자동으로 삭제 된다 / 서버 삭제하고 다시 재ㅜ동 필수

8. ViewResolver 사용하기

원래 ModelAndView를 사용해서 이동하던

	mv.setViewName("/WEB-INF/view/index.jsp");
    

위 형태의 코드를 생략할 수 있다

  1. Controller JAVA 파일에 해당 코드에 생성자 추가

    ModelAndView mv = new ModelAndView("index");
  2. 디스패처.xml에 해당 Bean 추가

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/WEB-INF/view/"/>
    <property name="suffix" value=".jsp"/>
    </bean>

위의 Bean이 말하는 해당 코드의 의미는 이러하다

1. prefix : 생성자 앞에 붙을 주소
2. suffix : 생성자 뒤에 붙을 주소

즉, prefix + 생성자 + suffix의 데이터가 합쳐져서 해당 url이 완성된다

위와 같은 url을 작성시

생성자에 index만 입력해도 실질적으로 뷰에는 /WEB-INF/view/index.jsp 라는 데이터가 저장되서 이동하게 된다

9. 생략

10. image 정적 파일 같은 것들 추가하기

Spring은 정적 파일을 불러올 수 없다고 한다

1) 정적(Static) : 움직임이 없이 고정된.

2) 동적(Dynamic) : 움직이는 역동적인.

그렇기 때문에 다른 셋팅이 필요하다

정적 파일을 사용하기 위해서는 mvc:resources라는 태그에 해당 파일을 저장해줘야한다

location = "/static/" 이라는 것은 모든 static 폴더 안에 있는 파일 이라는 것이고

mapping = "/**" 은 모든 url 패밍일때 라는 의미이다

즉, 모든 url 매핑에서 불러오는 정적 파일들 중 static 폴더 안에 있는 파일들은 jsp 파일에서 불러 올 수 있도록 셋팅 해주는 것을 의미한다

11, 12. 다른 폴더 안의 경로 추가

  1. 현재 view 폴더 안에 notice 폴더를 만들었고 안에 jsp 파일 detail, list가 존재한다
  2. 해당 페이지를 불러오기 위해서 Controller를 작성
  3. 컨트롤러의 생성자로 url을 입력해왔고 현재 prefix, suffix의 경로상
    /WEB-INF/vew/★★★.jsp 경로가 완성되어 있어서 ★★★의 경로만 매꿔주면 되는데 1번에서 보다시피 view 안에 notice를 만들어줬기에 notice/jsp 파일이름 을 입력해주어야 정상적인 작동을하게 된다.
  4. dispatcher.xml 에서 보면 bean을 등록하는 것도 해당클래스로 이동하는 url을 view 안에 ★★★ 부분이 url로 들어나기 때문에 /notice/★★★로 해야만 출력되는 것을 확인할 수 있다
profile
초보 개발자

0개의 댓글